[英]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.