我有一个 lambda 函数来处理我的 SQS 消息。但是,即使我将 SQS 作为其事件触发器,它似乎也不会自动触发。下面是我的代码。
import json
import boto3
def lambda_handler(event, context):
max=2 # Number of messages to process @ a time
if "max" in event:
max=int(event["max"])
else:
max=1
sqs = boto3.resource('sqs') # Get access to resource
queue = sqs.get_queue_by_name(QueueName='mysqs.fifo') # Get queue by name
count=0
# Process messages
for message in queue.receive_messages(MaxNumberOfMessages=max):
body = json.loads(message.body) # Attribute list
print("test")
payload = message[body]
print(str(payload))
count+=1
message.delete()
return {
'statusCode': 200,
'body': str(count)
}
答案 0 :(得分:2)
当 AWS Lambda 函数配置为使用 Amazon SQS 作为触发器时,消息通过 event
变量传入。函数内的代码应该不直接调用 Amazon SQS。
以下是传递给函数的 event
示例:
{
"Records": [
{
"messageId": "11d6ee51-4cc7-4302-9e22-7cd8afdaadf5",
"receiptHandle": "AQEBBX8nesZEXmkhsmZeyIE8iQAMig7qw...",
"body": "Test message.",
"attributes": {
"ApproximateReceiveCount": "1",
"SentTimestamp": "1573251510774",
"SequenceNumber": "18849496460467696128",
"MessageGroupId": "1",
"SenderId": "AIDAIO23YVJENQZJOL4VO",
"MessageDeduplicationId": "1",
"ApproximateFirstReceiveTimestamp": "1573251510774"
},
"messageAttributes": {},
"md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
"eventSource": "aws:sqs",
"eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:fifo.fifo",
"awsRegion": "us-east-2"
}
]
}
然后您的代码可以通过以下方式访问消息:
for record in event['Records']:
payload = record['body']
print(payload)
count += 1
不需要删除消息——一旦 Lambda 函数成功执行,它就会自动删除。