amazon-web-services - lamda 处理未触发的 SQS 消息
问题描述
我有一个 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)
}
解决方案
当 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 函数成功执行,它将被自动删除。
推荐阅读
- c# - 我正在尝试在我的项目中混合使用 netstandard2.0 和 net48,以逐步过渡到 .NET Core。如何解决此管道警告?
- django - 请求总是返回从 React-Native 发送到 Django 的未经授权的
- php - 如何在php中上传pdf或doc或txt文件
- mysql - 截断作为 CONCAT 函数结果的列?
- button - ButtonBar 中的第一个按钮始终保持焦点?
- c++ - C/C++ - 消息队列在同一 mtype 上发送和接收消息
- google-cloud-platform - 无法在具有多个条件的命令行中创建 gcloud 警报策略
- swift - 使用 SSH 将 xcframework 添加为 Swift 包依赖项
- python - 在已解析的 HTML 内容中查找字段
- java - (A/RefBase: decWeak 调用次数过多) 使用 Set 时