由于CloudFormation存在已知限制,其中S3存储桶通知配置无法可靠地应用于创建存储桶的CF模板中的存储桶,因此我不得不将通知配置拉出到单独的文件中,然后将其用于AWS CLI如下:

$ aws s3api put-bucket-notification-configuration --bucket <bucket> --notification-configuration file://<file>

只要我知道通知将提前触发的Lambda的ARN,这样就可以正常工作 . 不幸的是,我们将AWS账户分解为多个配置文件,Lambdas的ARN格式包含12位数的配置文件ID,因此我更愿意动态地执行此部分 . 在CF模板中,我可以使用Join和Ref方法动态创建ARN,但这些文件似乎不遵循相同的规则 . 首选的方法是使用这样的东西:

{
    "LambdaFunctionConfigurations": [
        {
            "LambdaFunctionArn": {
                "Fn::Join": [":", ["arn:aws:lambda", { "Ref": "AWS::Region" }, { "Ref": "AWS::AccountId" }, "function:<function_name>"]]
            },
            "Events": ["s3:ObjectCreated:*"]
        }
    ]
}

当我尝试它时,我得到一个验证错误,因为LambdaFunctionArn的值是一个对象而不是一个字符串 . 我的问题是:有没有人知道如何在put-bucket-notification-configuration调用中使用动态值,这样我就不必对区域和配置文件ID进行硬编码?