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を設定する方法はありますか?
構造を次のように変更します。
"PrivateIpAddress": {
"Fn::If": [ "RequestedPrivateIP",
{ "Ref": "PrivateIP" },
{"Ref" : "AWS::NoValue" }
]
}
aWS :: NoValueは、ifステートメントのelseオプションを提供するためにあります。 http://docs.aws.Amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html
PrivateIpAddress
プロパティは値として空の文字列をサポートしていないようなので、AWS::EC2::Instance
の2つの個別のリソースを作成することをお勧めします。それらの1つはあなたの状態RequestedPrivateIP
を持ちますが、もう1つは同じ状態を持つべきですが否定されます。 DidNotRequestPrivateIP
。
"InstanceWithPrivateIp": {
"Type": "AWS::EC2::Instance",
"Condition": "RequestedPrivateIP",
"Properties": {
[...]
}
},
"InstanceWithoutPrivateIp": {
"Type": "AWS::EC2::Instance",
"Condition": "DidNotRequestPrivateIP",
"Properties": {
[...]
}
}