簡體   English   中英

如何在 S3 文件上傳時觸發 Lambda

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

有人可以告訴我哪里出錯了嗎?

您可以在 S3 中使用事件通知。 它與 Lambda、SNS、SQS 直接集成

  • 轉到 S3 中的屬性選項卡

  • 導航到事件通知。 單擊創建事件通知。 在此處輸入圖像描述

  • 然后添加事件名稱。

  • 如果您想將事件限制為特定的文件夾或文件類型,您可以填寫前綴或后綴字段,或者如果您希望將其用於整個存儲桶,請將其留空。 在此處輸入圖像描述

  • 然后是 select 事件列表。 像把,張貼。 在此處輸入圖像描述

  • 然后選擇目的地並點擊保存。 您將收到通知。 在此處輸入圖像描述

您可以同時使用 S3 事件或雲觀察事件規則來為 S3 上的任何事件調用 lambda function。

  • 下圖顯示了如何為 s3 putObject 操作配置雲觀察事件規則。
  • 確保為相應區域中的數據事件啟用雲跟蹤。
  • 確保為特定存儲桶創建規則。
  • 如果你提到的是所有的桶。 您將獲得不必要的調用,因為雲監視事件規則適用於雲跟蹤,它將所有日志存儲到 s3。 在此處輸入圖像描述

正如我之前對您的問題的評論中提到的,您可能沒有適當的權限來允許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_namesource_arn替換為您的具體引用。

感謝所有人的幫助和建議——如果有人在未來看到這篇文章,所有好的資源。 事實證明,@Balu Vyamajala 在評論中是正確的——我錯誤地配置了 CloudTrail。

自 2021 年 11 月 29 日起,Amazon Event Bridge 現在支持 Amazon S3 事件通知,而無需啟用 CloudTrial

在您要監控的 S3 存儲桶的屬性中,您必須啟用 Amazon EventBridge。

在此處輸入圖像描述

這將允許您使用規則向 EventBridge 發送消息。 在此處輸入圖像描述

在您的 eventbridge 規則中,您可以將 lambda 配置為“目標”。 如果您想繼續學習,我制作了有關如何在 AWS 中配置 eventbridge 的分步教程: https://youtu.be/k-jEuNb_KBM

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM