gpt4 book ai didi

amazon-web-services - CloudFormation模板导入其他模板

转载 作者:行者123 更新时间:2023-12-03 07:37:49 26 4
gpt4 key购买 nike

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

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

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

CloudFormation 是否支持此操作,或者是否有一些工具可以完成此简单操作?

最佳答案

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

此代码段将通过循环 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

关于amazon-web-services - CloudFormation模板导入其他模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36787934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com