AWS CloudFormationの条件付きプロパティ


10

EC2インスタンスを作成するためのAWS CloudFormationテンプレートがあります。しかし、それらのいくつかは特定のものを必要PrivateIpAddressとし、私はそれをテンプレートに組み込む方法を理解するのに苦労しています。

とりあえず、テンプレートパラメータPrivateIPと条件を作成していRequestedPrivateIPます。ここまでは順調ですね。しかし、それをAWS::EC2::Instanceリソース仕様に組み込む方法がわかりません。私はこれを試しました:

    "PrivateIpAddress": {
        "Fn::If": [ "RequestedPrivateIP",
            { "Ref": "PrivateIP" },
            ""                            <-- This doesn't work
        ]
    },

しかし、RequestedPrivateIPがfalseの場合は失敗します

CREATE_FAILED    AWS::EC2::Instance    NodeInstance    Invalid addresses: []

オプションで静的プライベートIPを割り当て、指定がない場合はAWSに任せて動的IPを設定する方法はありますか?

回答:



0

PrivateIpAddressプロパティは値として空の文字列をサポートしていないようなので、の2つの個別のリソースを作成することをお勧めしますAWS::EC2::Instance。それらの1つはあなたの状態にRequestedPrivateIPなりますが、他の1つは同じ状態である必要がありますが、否定されDidNotRequestPrivateIPます。

"InstanceWithPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "RequestedPrivateIP",
    "Properties": {
        [...]
    }
},

"InstanceWithoutPrivateIp": {
    "Type": "AWS::EC2::Instance",
    "Condition": "DidNotRequestPrivateIP",
    "Properties": {
        [...]
    }
}

1
これは確かにオプションですが、私がやりたくないDRY(Do n't Repeat Yourself)の原則を大幅に破ります。また、SSL証明書が設定されているかどうかに基づいて、ELBがHTTPSでリッスンするかどうかなど、設定されているプロパティと設定されていないプロパティが他にもあることがよくあります。わずかな変更を加えてすべての宣言を繰り返すことにより、これらの小さなバリエーションをすべてキャッチしようとすると、すぐに大規模で保守不可能なテンプレートにつながります。しかしとにかく提案をありがとう。
Mlu

@MLuに完全に同意します。繰り返すことは決して楽しいものではありません。ただし、CloudFormationの私の経験から、あなたは時々自分自身を繰り返すことを強いられます。私が目にする他の解決策は、上記の条件に含める代わりにサブスタックを作成し、それらのサブスタックでその条件に固有の処理を行うことです。
Bazze 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.