CloudFormation 模板导入其他模板

Posted

技术标签:

【中文标题】CloudFormation 模板导入其他模板【英文标题】:CloudFormation template import other templates 【发布时间】:2016-08-15 17:41:11 【问题描述】:

我有一个需要在模板中重复多次的结构,唯一的区别是可以与"Fn::Join": 一起使用的变量。

我希望有这样的解决方案:

   "Import" : [
      
        "Path":"s3://...", 
        "Parameters":[
          "Key":"name", "Value":"foobar" 
        ]
   ]

CloudFormation 是否支持这一点,或者是否有一些工具可以做到这一点?

【问题讨论】:

【参考方案1】:

使用troposphere。它允许编写生成 CloudFormation 模板的 python 代码——再也不需要直接编写 JSON。如有必要,请向 cmets、循环、类型检查和更高级的编程结构问好。

这个 sn-p 将通过循环 bucket_names 列表为 2 个 S3 存储桶生成一个模板:

from troposphere import Output, Ref, Template
from troposphere.s3 import Bucket, PublicRead
t = Template()

# names of the buckets
bucket_names = ['foo', 'bar']

for bucket_name in bucket_names:
    s3bucket = t.add_resource(Bucket(bucket_name, AccessControl=PublicRead,))
    t.add_output(
        Output(
            bucket_name + "Bucket",
            Value=Ref(s3bucket),
            Description="Name of %s S3 bucket content" % bucket_name
        )
    )

print(t.to_json())

CloudFormation 模板:


    "Outputs": 
        "barBucket": 
            "Description": "Name of bar S3 bucket content",
            "Value": 
                "Ref": "bar"
            
        ,
        "fooBucket": 
            "Description": "Name of foo S3 bucket content",
            "Value": 
                "Ref": "foo"
            
        
    ,
    "Resources": 
        "bar": 
            "Properties": 
                "AccessControl": "PublicRead"
            ,
            "Type": "AWS::S3::Bucket"
        ,
        "foo": 
            "Properties": 
                "AccessControl": "PublicRead"
            ,
            "Type": "AWS::S3::Bucket"
        
    

注意由于 CloudFormation 前缀堆栈名称和后缀随机字符串,存储桶将不会命名为 foobar。真实姓名可以在 CloudFormation 的输出部分看到。

更多对流层示例:https://github.com/cloudtools/troposphere/tree/master/examples

【讨论】:

以上是关于CloudFormation 模板导入其他模板的主要内容,如果未能解决你的问题,请参考以下文章

在 CloudFormation 模板中否定条件

AWS Cloudformation错误:由于递归导入而导致的递归锁定

Cloudformation YAML 模板如果没有按预期工作

有没有办法对 AWS Cloudformation 模板进行单元测试

SAM 模板和 Cloudformation 模板的区别

AWS CloudFormation:结合 ImportValue 和 Sub 函数会导致错误