[英]How to trigger a Lambda on S3 file upload
我似乎无法让我的 lambda 像我预期的那样触发。 在 AWS EventBridge 中,我使用以下自定义事件模式创建了一个规则:
{
"source": ["aws.s3"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["s3.amazonaws.com"],
"eventName": [
"CopyObject",
"CompleteMultipartUpload",
"PutObject"
],
"requestParameters": {
"bucketName": ["my-bucket"],
"key": [{"prefix": "folder1/folder2/"}]
}
}
}
但是当我将文件上传到“目录”时,规则不会触发 lambda。
有人可以告诉我哪里出错了吗?
正如我之前对您的问题的评论中提到的,您可能没有适当的权限来允许EventBridge
Invoke
您的 Lambda。
您可以将以下Resource-based policy
添加到Lambda :
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "AllowExecutionFromEventBridge",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "<lambda-arn>",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "<eventbridge-rule-arn>"
}
}
}
]
}
您需要将<lambda-arn>
和<eventbridge-rule-arn>
替换为各自的值。
您可以在此处阅读有关resource-based policy
更多信息: 为 AWS Lambda 使用基于资源的策略。
如果您使用 Terraform 之类的工具,则可以使用以下代码段:
resource "aws_lambda_permission" "example" {
statement_id = "AllowExecutionFromCloudWatch"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.example.function_name
principal = "events.amazonaws.com"
source_arn = aws_cloudwatch_event_rule.example.arn
}
您还需要将function_name
和source_arn
替换为您的具体引用。
感谢所有人的帮助和建议——如果有人在未来看到这篇文章,所有好的资源。 事实证明,@Balu Vyamajala 在评论中是正确的——我错误地配置了 CloudTrail。
自 2021 年 11 月 29 日起,Amazon Event Bridge 现在支持 Amazon S3 事件通知,而无需启用 CloudTrial 。
在您要监控的 S3 存储桶的属性中,您必须启用 Amazon EventBridge。
在您的 eventbridge 规则中,您可以将 lambda 配置为“目标”。 如果您想继续学习,我制作了有关如何在 AWS 中配置 eventbridge 的分步教程: https://youtu.be/k-jEuNb_KBM
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.