gpt4 book ai didi

amazon-web-services - AWS cloudformation可选线

转载 作者:行者123 更新时间:2023-12-04 04:11:07 27 4
gpt4 key购买 nike

我正在尝试设置一个 cloudformation 模板,该模板将启动一个干净的实例或从快照启动一个实例。我希望能够使用 if/else 类型语句,这样看起来就像

pseudo code:
if InputSnapshotId:
"SnapshotId" : {"Ref" : "InputSnapshotId"},
else:
"Size" : 20,

在cloudformation中,我尝试了很多事情,例如:

"WebserverInstanceDataVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Fn::If" : [
{"Ref" : "FromSnapshot"},
{"SnapshotId" : { "Ref" : "InputSnapshotId" }},
{"Size" : "20"}
],
"VolumeType" : "standard",
"AvailabilityZone" : { "Fn::GetAtt" : [ "WebserverInstance", "AvailabilityZone" ]},
"Tags" : [
{"Key" : "Role", "Value": "data" },
]
},
"DeletionPolicy" : "Delete"
},

或者将 Fn::If 包装在 {}:

    {"Fn::If" : [
{"Ref" : "FromSnapshot"},
{"SnapshotId" : { "Ref" : "InputSnapshotId" }},
{"Size" : "20"}
]}

所有这些都会引发不同类型或错误。第一个在 cloudformation 中给出“遇到不支持的属性 Fn::If”,第二个则不是有效的 JSON。我可以对一个空卷进行快照并定义一个大小参数,然后始终传递 SnapshotId 和大小,但我觉得必须有一种方法可以在 cloudformation 中拥有可选行。

有什么想法吗?

最佳答案

你可以这样做:

 "Conditions" : {
"NotUseSnapshot" : {"Fn::Equals" : [{"Ref" : "InputSnapshotId"}, ""]}
},

"Resources" : {
"WebserverInstanceDataVolume" : {
"Type" : "AWS::EC2::Volume",
"Properties" : {
"Size" : {
"Fn::If" : [
"NotUseSnapshot",
"20",
{"Ref" : "AWS::NoValue"}
]
},
"SnapshotId" : {
"Fn::If" : [
"NotUseSnapshot",
{"Ref" : "AWS::NoValue"},
{"Ref" : "InputSnapshotId"}
]
},
"VolumeType" : "standard",
"AvailabilityZone" : { "Fn::GetAtt" : [ "WebserverInstance", "AvailabilityZone" ]},
"Tags" : [
{"Key" : "Role", "Value": "data" }
]
},
"DeletionPolicy" : "Delete"
}
}

这里是功能模板的链接:https://github.com/caussourd/public-cloudformation-templates/blob/master/conditional_volume_creation.template

关于amazon-web-services - AWS cloudformation可选线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131585/

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