この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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