插入CloudFormation ImportValue类似于如何插入参数?

时间:2020-04-18 14:38:58

标签: amazon-web-services amazon-s3 amazon-cloudformation amazon-iam

我们有一个庞大的VPC CF模板,可用于定义我们的开发,登台和生产环境。这些资源之一是Common S3存储桶,可用于与特定客户没有直接关系的任务。该存储桶具有名为VPCCommonBucket的导出,其中仅包含存储桶名称。

我正在尝试在另一个堆栈中使用此Export值,引用该存储桶,创建一个只能访问该存储桶的IAM用户,并将其进一步限制为该存储桶中的单个目录。

使用参数时,我可以执行以下操作:

!Sub "arn:aws:s3:::${BucketName}/prefix/*"

但是在使用Fn::ImportValue / !ImportValue方面我找不到类似的东西。当我在这里尝试时,是否可以将导出的变量插入字符串?还是需要返回并更改我们的主模板以包含用于存储桶的arn的ANOTHER Export的问题?

1 个答案:

答案 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