条件付きでCloudFormationリソースのプロパティを指定
CloudFormationは事前に指定したテンプレートから容易にインフラを構築できるツールです。エンジニアはよく自分で諸々なパラメータを指定したいのでCloudFormationでそれもできます。
簡単なプロパティ
条件付きでリソースのプロパティを指定できます。例えば環境によって違うEC2インスタンスタイプを構築します。以下の場合はスタックのEnvironmentパラメータを "prod" に設定したらインスタンスタイプはt2.largeになり、それ以外にはt2.microになります。
Parameters: Environment: Type: String Conditions: IsProd: !Equals [Environment, "prod"] Resources: MyEc2: Type: AWS::EC2::Instance Properties: InstanceType: !If [ IsProd, t2.large, t2.micro ]
If関数のシンタックスは以下です。条件、条件の結果はtrueの場合値, 条件の結果はfalseの場合値
Fn::If: [condition_name, value_if_true, value_if_false]
Mappingプロパティ
上記は簡単なプロパティです。リソースはMappingプロパティもあります、例えばEC2インスタンスはCpuOptionというプロパティがあります。上記と同じ!If関数を使いますがもうちょっと読みやすいシンタックスにします。条件はtrueの場合は、yamlのMappingを設定します。falseの場合はAWS::NoValueという擬似パラメータになりますのでCpuOptionsプロパティは設定されません。
Parameters: Environment: Type: String Conditions: IsProd: !Equals [Environment, "prod"] Resources: MyEc2: Type: AWS::EC2::Instance Properties: InstanceType: !If [ IsProd, t2.large, t2.micro ] CpuOptions: !If - IsProd - CoreCount: 1 ThreadsPerCore: 2 - !Ref AWS::NoValue