【问题标题】:AWS Lambda S3 Bucket Notification via CloudFormation通过 CloudFormation 的 AWS Lambda S3 存储桶通知
【发布时间】:2015-04-30 11:48:39
【问题描述】:

我正在尝试通过 CloudFormation 创建 Lambda 通知,但收到有关 ARN 格式不正确的错误。

要么我的 CloudFormation 有误,要么它还不支持 Lambda 预览。

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "LambdaArn": {
      "Type": "String",
      "Default": "arn:aws:lambda:{some-region}:{some-account-id}:function:{some-fn-name}"
    }
  },
  "Resources": {
    "EventArchive": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "NotificationConfiguration": {
          "TopicConfigurations": [
            {
              "Event": "s3:ObjectCreated:Put",
              "Topic": {
                "Ref": "LambdaArn"
              }
            }
          ]
        }
      }
    }
  }
}

但是当我推送这个 CloudFormation 时,我收到了以下信息:

The ARN is not well formed

有人知道这意味着什么吗?我知道上面的示例已经过修改,因此不使用我的 actual ARN,但在我的实际代码中,我直接从 GUI 复制了 ARN。

另外,有趣的是,我能够通过 AWS 控制台创建通知,因此我只是假设 AWS CloudFormation 尚不支持此功能(尽管这不是很清楚,但我在阅读文档时并不认为) .

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation aws-lambda


    【解决方案1】:

    AWS 现在似乎已经发布了对直接在 CloudFormation 中通知 lambda 函数的支持。

    S3 NotificationConfiguration 定义过去仅包含 TopicConfigurations,但已更新为包含 LambdaConfigurations

    添加 NoficationConfiguration 后,请确保包含 Lambda::Permission 资源,以便允许 S3 执行您的 lambda 函数。这是一个可以用作模板的示例权限:

    "PhotoBucketExecuteProcessorPermission": {
        "Type" : "AWS::Lambda::Permission",
        "Properties" : {
            "Action":"lambda:invokeFunction",
            "FunctionName": { "Fn::GetAtt": [ "PhotoProcessor", "Arn" ]},
            "Principal": "s3.amazonaws.com",
            "SourceAccount": {"Ref" : "AWS::AccountId" },
            "SourceArn": {
                "Fn::Join": [":", [
                    "arn","aws","s3","", ""
                     ,{"Ref" : "PhotoBucketName"}]]
            }
        }
    }
    

    【讨论】:

    • 超级有帮助。这是 CloudFormation 中记录最少的事情之一。
    • @BKH 在同一个句子中使用“有据可查”和“CloudFormation”不是矛盾吗?
    • 因此是“最少的”。这不是很好,但并不可怕。
    【解决方案2】:

    来自the docs

    Amazon S3 向其报告指定事件的 Amazon SNS 主题。

    看来,虽然S3 supports sending events to Lambda,CloudFormation 还没有赶上。它需要一个 SNS ARN,您在其中提供 Lambda 函数 ARN。

    目前,您似乎必须手动连接事件通知。

    【讨论】:

    猜你喜欢
    • 2016-12-09
    • 2020-11-04
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2022-01-27
    • 2020-08-13
    相关资源
    最近更新 更多