amazon-s3 - 无法使用现有 S3 存储桶配置 lambda 和 SNS

标签 amazon-s3 aws-lambda aws-cloudformation amazon-sns

我有一个现有的 S3 存储桶(其中有我以前的同事已经创建的一些 lambda 事件和 SNS 配置)。我想添加一个新的 lambda 事件,该事件将由另一个前缀中的 PutObject 触发。

我一直在对其他现有的 S3 存储桶执行此操作,没有出现任何问题。然而,现在有了这个S3存储桶,无论我尝试创建一个lambda(根据我正在阅读的一些AWS文档,在lambda控制台上执行此操作都会自动附加S3调用该函数的策略。但我也只是尝试手动添加 S3 调用 lambda 或 SNS 的权限(我编辑了 SNS 策略以允许 S3 存储桶发送消息和接收消息),我收到此错误:

An error occurred when creating the trigger: Unable to validate the following destination configurations (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: KKBWYJGTVK8X8AYZ; S3 Extended Request ID: ZF3NOIqw8VcRYX6bohbYp7d0a+opDuXOcFRrn1KBn3vBVBIPuAQ/s7V+3vptIue1uWu6muIWBhY=; Proxy: null)

我已经关注了我能找到的所有 AWS 链接,甚至尝试关注 S3 上现有 lambda 事件触发器的所有设置(前缀除外)。但是,我仍然没有任何解决方案。我能想到的唯一区别可能是背后有一个 CloudFormation 来链接所有现有的应用程序。但是,我认为 s3 Bucket 不涉及其中。

您能给我一些建议吗?非常感谢!

更新:此外,我刚刚测试了在另一个存储桶上执行相同的操作 - 具有相同的 IAM 角色,并且它有效。所以我认为这个问题与存储桶有关。

最佳答案

您能否与我们分享您的政策或之前用于实现您现在的目标的任何基础设施即代码,任何人都很难找出造成这种情况的原因。我当然还建议通过 AWS CloudFormation 在 AWS 中设置资源,也许这是一个很好的入门指南:https://www.youtube.com/watch?v=t97jZch4lMY

请比较以下定义 Lambda 函数权限的 IAM 策略。

所需权限包括:

  • 从源 S3 存储桶获取对象。
  • 将调整大小的对象放入目标 S3 存储桶中。
  • 与 CloudWatch Logs 相关的权限。
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:CreateLogGroup",
                "logs:CreateLogStream"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::mybucket/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::mybucket-resized/*"
        }
    ]

您还需要为 Lambda 配置执行角色。

创建执行角色,为您的函数提供访问 AWS 资源的权限。

创建执行角色

  • 在 IAM 控制台中打开角色页面。
  • 选择“创建角色”。
  • 创建具有以下属性的角色。
  • 可信实体 – AWS Lambda。
  • 权限 – AWSLambdaS3Policy。
  • 角色名称 – lambda-s3-role。

上面创建的策略具有该函数管理 Amazon S3 中的对象并将日志写入 CloudWatch Logs 所需的权限。

关于amazon-s3 - 无法使用现有 S3 存储桶配置 lambda 和 SNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66697055/

相关文章:

java - 在 Java 中使用 Amazon SQS 和 SNS

aws-lambda - 如何在 AWS API Gateway 集成模板中有条件地设置字段?

amazon-web-services - AWS Lambda 通过仅导出互联网网关访问互联网

node.js - 在同一亚马逊帐户上的存储桶之间移动文件

amazon-web-services - 如何在此 cloudformation 模板的 aws cli 命令中插入参数?

amazon-web-services - CloudFormation !Select with !Split 函数和负载均衡器 arn

javascript - HTML 视频循环重新下载视频文件

android - 为什么不在 AWS 中触发 setTransferListener?

amazon-web-services - 每 15 分钟运行一次 Athena 与 Kinesis Data Analytics

aws-cloudformation - 如何将 CloudFormation 与 CodeDeploy 和 AutoScaling 组集成