web-dev-qa-db-ja.com

AWS Cloudformation:リソースのプロパティを条件付きで作成する

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}

助言がありますか?

7
pkaramol

おそらく私は誤解しているかもしれませんが、これは条件のユースケースではなく、パラメータのユースケースのように聞こえます。あなたはパブリックIPをどのような条件で使用したいかを言っていないからです。ちょうど「たまにデバッグ目的で」あなたがデバッグしていることをテンプレートはどのように知るのでしょうか?パラメータでそれを伝える必要があります。

ドキュメントをチェックしてください https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html

したがって、パブリックIPパラメーターとサブネットIDパラメーターを使用して、スタックの作成時に好きなものを渡すことができます。

条件が役立つ1つの方法は、パブリック/プライベートIPとサブネットを切り替えるデバッグパラメータを作成することです。これはあなたが考えていたものですか?

プロパティの条件を使用するには、IF関数を使用します

https://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-conditions.html

起動時にパブリックIPを提供するようにパブリックサブネットを設定することをお勧めします。もちろん、プライベートサブネットがそれを行わないことを確認してください。次に、サブネットをパラメータとして渡します。

https://docs.aws.Amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip

1
Michael West