本文介绍了AWS CloudForment:有条件地创建资源属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我知道可以通过使用Conditions有条件地(还有什么?)创建资源。
我正在尝试找到一种有条件地创建资源属性的方法;
在我的示例中,我使用默认公网IP分配=false
在子网中创建了几个EC2
实例。有时出于调试目的,我希望我的实例获得公共IP。
现在我必须注释入/出SG/Subnet和下面的NetworkInterfaces
属性(它们不在一起)
myEC2:
Type: AWS::EC2::Instance
Metadata:
Comment: My EC2 Instance
AWS::CloudFormation::Init:
config:
commands:
01_provision:
command:
!Sub |
sed -i "s/somestring/${somevar}/" /some/path/
CreationPolicy:
ResourceSignal:
Timeout: PT4M
Properties:
ImageId: !FindInMap [ MyAamiMap, 'myami', amiid ]
InstanceType: "t2.2xlarge"
# SubnetId: !Ref SBNDemo1
# SecurityGroupIds: [!Ref SGInternalDemo]
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
GroupSet:
- Ref: "SGInternalDemo"
SubnetId:
Ref: "SBNDemo1"
UserData:
"Fn::Base64":
!Sub |
#!/bin/bash -xe
# Start cfn-init
/usr/local/bin/cfn-init -s ${AWS::StackId} -r myEC2 --region ${AWS::Region} || echo 'Failed to run cfn-init'
# All done so signal success
/usr/local/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource myEC2 --region ${AWS::Region}
有什么建议吗?
推荐答案
这可能有点晚,但我最近也有同样的问题。
从AWS docs可以使用fn::if相应地设置属性。
模板将如下所示:
Properties:
ImageId: !FindInMap [ MyAamiMap, 'myami', amiid ]
InstanceType: "t2.2xlarge"
# SubnetId: !Ref SBNDemo1
# SecurityGroupIds: [!Ref SGInternalDemo]
NetworkInterfaces:
!If
- YourCondition
-
AssociatePublicIpAddress: "true"
DeviceIndex: "0"
GroupSet:
- Ref: "SGInternalDemo"
SubnetId:
Ref: "SBNDemo1"
- !Ref "AWS::NoValue"
AWS::NoValue表示不会设置NetworkInterfaces属性。
这篇关于AWS CloudForment:有条件地创建资源属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!