要解决AWS Lambda函数在S3事件上触发,但每30分钟只触发一次的问题,可以使用AWS CloudWatch事件规则来实现。以下是一个解决方案的代码示例:
import json
def lambda_handler(event, context):
# 处理S3事件的逻辑
print(event)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
{
"source": [
"aws.s3"
],
"detail-type": [
"AWS API Call via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"PutObject",
"CompleteMultipartUpload"
],
"requestParameters": {
"bucketName": [
"YOUR_BUCKET_NAME"
]
}
}
}
请注意替换YOUR_BUCKET_NAME
为您要监视的S3存储桶的名称。
{
"scheduleExpression": "rate(30 minutes)"
}
通过以上步骤设置后,当S3存储桶上发生PutObject
或CompleteMultipartUpload
事件时,CloudWatch事件规则将触发Lambda函数。同时,定时触发的CloudWatch事件规则每30分钟触发一次,确保Lambda函数在该周期内只触发一次。