由于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进行硬编码?