我有一个触发Lambda函数的SQS队列。我正在尝试解析SQS消息并提取相关数据。我特别尝试提取s3对象键和s3 bucket arn。
我当前的Lambda函数:
def lambda_handler(event, context):
for record in event['Records']:
payload = record['body']
print(str(payload))
objectKey = record['body']['s3']['object']['key']
bucketARN = record['body']['s3']['bucket']['arn']
print('Filename is: ' + str(objectKey))
print('Bucket ARN is: ' + str(bucketARN))
CloudWatch中显示的我的SQS消息:
{
"Records": [
{
"eventVersion": "2.1",
"eventSource": "aws:s3",
"awsRegion": "xxx",
"eventTime": "2021-03-27T19:39:41.694Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "AWS:AIDAQ5MMP4GQL2S4KQ2SZ"
},
"requestParameters": {
"sourceIPAddress": "xxx"
},
"responseElements": {
"x-amz-request-id": "xxx",
"x-amz-id-2": "xxx"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "xxx",
"bucket": {
"name": "xxx",
"ownerIdentity": {
"principalId": "AHWVPEVW911DW"
},
"arn": "arn:aws:s3:::xxx"
},
"object": {
"key": "Audio1.mp3",
"size": 16659,
"eTag": "71d5ea0a7152e04d0d170be8146080ba",
"sequencer": "00605F8A02147F848A"
}
}
}
]
}
最后一个错误是:
[ERROR] TypeError: string indices must be integers
Traceback (most recent call last):
File "/var/task/transcribe.py", line 14, in lambda_handler
objectKey = record['body']['s3']['object']['key']
我还尝试了objectKey=record['Records][0]['s3']['object']['key']。谢谢
在这里找到了一个类似问题的有用答案。
这对我很有用:
for record in event['Records']:
#pull the body out & json load it
jsonmaybe = record['body']
jsonmaybe = json.loads(jsonmaybe)
objectKey = jsonmaybe['Records'][0]['s3']['object']['key']
print(objectKey)
bucketARN = jsonmaybe['Records'][0]['s3']['bucket']['arn']
print(bucketARN)
目前我正在使用SQS-Lambda集成 Lambda的并发可用。SQS批次设置为1记录,0延迟。 SQS的可见性超时为15分钟,Lambda最大执行时间为15分钟 我会注意到,有时SQS消息在飞行中被卡住,根本没有被任何Lambda处理(它们在15分钟后落入死信队列,CloudWatch显示没有Lambda被消息调用) 有人面临过同样的问题吗? 我在VPC内部运行Lambda,如果这很重要的话
我正在使用Lambda函数将消息推送到SQS队列。消息放入SQS队列后,我需要触发其他Lambda函数来处理队列中的消息。 我认为我们可以使用SNS实现这一点。我是AWS服务新手,请建议在SNS的帮助下基于SQS队列消息触发Lambda函数的解决方案。
有一个SQS队列,我在其中不断收到消息。我只需要阅读和处理过去24小时内收到的信息。目前收到的信息应在第二天处理<代码>时间戳存储在消息正文中。 是否可以从SQS队列中选择性地读取消息。例如,只读那些值大于前一天的时间戳但小于当前时间戳(当前时间戳是此作业运行的时间)的消息?
我知道可以使用多个线程使用SQS队列。我想保证每封邮件都会被消费一次。我知道可以更改消息的可见性超时,例如,等于我的处理时间。如果我的进程花费的时间超过可见性超时时间(例如连接速度慢),则其他线程可以使用相同的消息。 保证消息只处理一次的最佳方法是什么?
我试图实现一个AWS SQS队列,以最大限度地减少来自后端服务器的数据库交互,但我遇到了问题。 我有一个消费者进程,它从一个SQS队列中查找消息 为了测试功能,我为一个客户端实现了逻辑。它运行得很好。然而,当我添加了3个客户端时,它不能正常工作。我能够看到SQS队列被500条消息卡住了,后端作业正在正常工作,从队列中读取。 我需要增加后端作业的数量还是增加客户端SQS队列的数量?现在,所有客户端都