微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 S3 文件上传时触发 Lambda

如何解决如何在 S3 文件上传时触发 Lambda

我似乎无法像预期的那样触发我的 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 中的属性选项卡

  • 导航到事件通知。单击创建事件通知。 enter image description here

  • 然后添加事件名称。

  • 如果您想将事件限制为特定文件夹或文件类型,您可以填写前缀或后缀字段,或者如果您希望它用于整个存储桶,请将这些留空。 enter image description here

  • 然后选择事件列表。喜欢放置,发布。enter image description here

  • 然后选择目的地并点击保存。您将收到通知。 enter image description here

,

您可以使用 S3 事件或云监视事件规则为 S3 上的任何事件调用 lambda 函数。

  • 下图显示了如何为 s3 putObject 操作配置云监视事件规则。
  • 确保您为相应区域中的数据事件启用了云跟踪。
  • 确保为特定存储桶创建规则。
  • 如果你提到的是所有桶。您将获得不必要的调用,因为云监视事件规则适用于云跟踪,它将所有日志存储到 s3。 enter image description here
,

正如我之前对您的问题的评论中提到的,您可能没有适当的权限来允许 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 的更多信息:Using resource-based policies for 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。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。