我们有一个庞大的VPC CF模板,可用于定义我们的开发,登台和生产环境。这些资源之一是Common S3存储桶,可用于与特定客户没有直接关系的任务。该存储桶具有名为VPCCommonBucket
的导出,其中仅包含存储桶名称。
我正在尝试在另一个堆栈中使用此Export值,引用该存储桶,创建一个只能访问该存储桶的IAM用户,并将其进一步限制为该存储桶中的单个目录。
使用参数时,我可以执行以下操作:
!Sub "arn:aws:s3:::${BucketName}/prefix/*"
但是在使用Fn::ImportValue
/ !ImportValue
方面我找不到类似的东西。当我在这里尝试时,是否可以将导出的变量插入字符串?还是需要返回并更改我们的主模板以包含用于存储桶的arn的ANOTHER Export的问题?
答案 0 :(得分:2)
您可以在Cloudformation模板中将 Fn :: ImportValue 与!Sub 结合使用。但是,内在函数引用类型和顺序在这里很重要。按照AWS Documentation:
当包含!Sub时,不能使用!ImportValue的缩写形式。而是必须使用完整的函数名。
因此,将模板结构化为
Properties:
Bucket:
Fn::Sub:
- 'arn:aws:s3:::${BucketName}/prefix/*'
- BucketName: !ImportValue VPCCommonBucket
您可能还知道,要使用导入功能,您还必须在单独的cloudformation模板中拥有declared the resource an output。如果遇到问题,这是AWS提供的walk-through。