Conditions を使用して、条件付きで(他に何か)リソースを作成できることを知っています。
リソースのプロパティを条件付きで作成する方法を見つけようとしています。
私の場合、いくつかのEC2
デフォルトのパブリックIP割り当て= false
のサブネット内のインスタンス。
デバッグの目的で、インスタンスにパブリック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}
助言がありますか?
おそらく私は誤解しているかもしれませんが、これは条件のユースケースではなく、パラメータのユースケースのように聞こえます。あなたはパブリックIPをどのような条件で使用したいかを言っていないからです。ちょうど「たまにデバッグ目的で」あなたがデバッグしていることをテンプレートはどのように知るのでしょうか?パラメータでそれを伝える必要があります。
ドキュメントをチェックしてください https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html
したがって、パブリックIPパラメーターとサブネットIDパラメーターを使用して、スタックの作成時に好きなものを渡すことができます。
条件が役立つ1つの方法は、パブリック/プライベートIPとサブネットを切り替えるデバッグパラメータを作成することです。これはあなたが考えていたものですか?
プロパティの条件を使用するには、IF関数を使用します
起動時にパブリックIPを提供するようにパブリックサブネットを設定することをお勧めします。もちろん、プライベートサブネットがそれを行わないことを確認してください。次に、サブネットをパラメータとして渡します。
https://docs.aws.Amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip