CloudFormation テンプレートの Conditions セクション構文リファレンス
オプションの Conditions
セクションには、エンティティが作成または設定される状況を定義するステートメントが含まれています。例えば、条件を作成し、それをリソースまたは出力に関連付けることで、条件が true の場合にのみ CloudFormation がリソースまたは出力を作成できるようになります。同様に、条件をプロパティに関連付けて、条件が true の場合にのみ CloudFormation がプロパティを特定の値に設定するようにできます。条件が false の場合、CloudFormation はプロパティをユーザーが指定した別の値に設定します。
テスト環境と本稼働環境など、異なるコンテキストでリソースを作成できるテンプレートを再利用する場合に、条件を使用することがあります。テンプレートで EnvironmentType
入力パラメータを追加できます。このパラメータは入力として prod
または test
を受け取ります。本稼働環境では特定の機能に Amazon EC2 インスタンスを含め、テスト環境ではコスト削減のために使用する機能数を減らす場合があります。条件を使用すると、どのリソースを作成するかや、それらを各環境タイプでどのように設定するかを定義できます。
条件は、スタックを作成または更新するときに、事前定義の擬似パラメータまたは指定する入力パラメータ値に基づいて評価されます。それぞれの条件の中で、別の条件、パラメーター値、マッピングを参照することができます。必要な条件をすべて定義したら、テンプレートの Resources
セクションと Outputs
セクションでそれらをリソースやリソースプロパティに関連付けることができます。
AWS CloudFormation は、スタックの作成時または更新時、テンプレートに存在するすべての条件を評価したうえで、リソースを作成します。関連付けられた条件が true となるリソースが作成されます。関連付けられた条件が false のリソースは無視されます。また、各スタックの更新時に、リソースが更新される前にこれらの条件が再評価されます。関連付けられた条件が true のままのリソースは更新されます。関連づけられた条件が false になったリソースは削除されます。
重要
スタックの更新時に、条件を単独で更新することはできません。条件を更新できるのは、リソースを追加、変更、または削除する変更を含める場合だけです。
条件の使用方法
条件付きで作成または構成するエンティティに応じて、次のテンプレートセクションにステートメントを含める必要があります。
Parameters
セクション-
条件で評価する入力を定義します。これらの入力パラメータの値に基づいて、条件は true または false と評価されます。条件で擬似パラメータを評価する場合は、このセクションで擬似パラメータを定義する必要はありません。擬似パラメータは CloudFormation によって事前定義されています。擬似パラメーターの詳細については、「擬似パラメータ参照」を参照してください。
Conditions
セクション-
組み込み関数を使用して条件を定義します。これらの条件は、CloudFormation が関連するリソースをいつ作成するかを指定します。例については、「サンプルテンプレート」を参照してください。
Resources
およびOutputs
セクション-
条件付きで作成するリソースまたは出力に条件を関連付けます。CloudFormation は、true に関連付けられたエンティティを作成し、false に関連付けられたをエンティティを無視します。
Condition
キーと条件の論理 ID を使用して、リソースまたは入力と関連付けます。条件付きでプロパティを指定するには、Fn::If
関数を使用します。例については、「条件の関連付け」を参照してください。
構文
Conditions
セクションは、キー名 Conditions
で構成されます。各条件の宣言には論理 ID と組み込み関数が含まれており、スタックの作成または更新時に評価されます。次の擬似テンプレートで、Conditions
セクションの概要を示します。
JSON
"Conditions" : { "
ConditionLogicalID
" : {Intrinsic function
} }
YAML
Conditions:
ConditionLogicalID
:Intrinsic function
条件の組み込み関数
次の組み込み関数を使用して条件を定義できます。
-
Fn::And
-
Fn::Equals
-
Fn::ForEach
-
Fn::If
-
Fn::Not
-
Fn::Or
各条件の関数の構文と情報については、「条件関数」を参照してください。Fn::ForEach
の構文と情報については、「Fn::ForEach」を参照してください。
注記
Fn::If
は、テンプレートの Resources
セクションと Outputs
セクションのメタデータ属性、更新ポリシー属性、およびプロパティ値でのみ使用できます。
例
シンプルな条件
次のサンプルテンプレートには、EnvType
という入力パラメーターが存在します。本稼働用のスタックを作成する場合は prod
を、テスト用のスタックを作成する場合は test
をここに指定します。本稼働環境では、CloudFormation が Amazon EC2 インスタンスを作成し、インスタンスにボリュームをアタッチします。テスト環境では、CloudFormation によって Amazon EC2 インスタンスのみが作成されます。
CreateProdResources
条件は、true
パラメーターが EnvType
と等しい場合に prod
に評価されます。このサンプルテンプレートでは、NewVolume
リソースと MountPoint
リソースを CreateProdResources
条件に関連付けています。したがって、EnvType
パラメーターが prod
と等しい場合にのみ、リソースが作成されます。
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EnvType": { "Description": "Environment type.", "Default": "test", "Type": "String", "AllowedValues": [ "prod", "test" ], "ConstraintDescription": "must specify prod or test." } }, "Conditions": { "CreateProdResources": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "EC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867" } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Condition": "CreateProdResources", "Properties": { "InstanceId": { "Ref": "EC2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Condition": "CreateProdResources", "Properties": { "Size": 100, "AvailabilityZone": { "Fn::GetAtt": [ "EC2Instance", "AvailabilityZone" ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvType: Description: Environment type. Default: test Type: String AllowedValues: - prod - test ConstraintDescription: must specify prod or test. Conditions: CreateProdResources: !Equals - !Ref EnvType - prod Resources: EC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 MountPoint: Type: 'AWS::EC2::VolumeAttachment' Condition: CreateProdResources Properties: InstanceId: !Ref EC2Instance VolumeId: !Ref NewVolume Device: /dev/sdh NewVolume: Type: 'AWS::EC2::Volume' Condition: CreateProdResources Properties: Size: 100 AvailabilityZone: !GetAtt - EC2Instance - AvailabilityZone
ネストされた条件
次のサンプルテンプレートは、別の条件内の条件を参照します。S3 バケットを作成するスタックを作成できます。実稼働環境にデプロイされたスタックの場合、CloudFormation は S3 バケットのポリシーを作成します。
JSON
{ "Parameters": { "EnvType": { "Type": "String", "AllowedValues": [ "prod", "test" ] }, "BucketName": { "Default": "", "Type": "String" } }, "Conditions": { "IsProduction": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] }, "CreateBucket": { "Fn::Not": [ { "Fn::Equals": [ { "Ref": "BucketName" }, "" ] } ] }, "CreateBucketPolicy": { "Fn::And": [ { "Condition": "IsProduction" }, { "Condition": "CreateBucket" } ] } }, "Resources": { "Bucket": { "Type": "AWS::S3::Bucket", "Condition": "CreateBucket" }, "Policy": { "Type": "AWS::S3::BucketPolicy", "Condition": "CreateBucketPolicy", "Properties": { "Bucket": { "Ref": "Bucket" }, "PolicyDocument": "..." } } } }
YAML
Parameters: EnvType: Type: String AllowedValues: - prod - test BucketName: Default: '' Type: String Conditions: IsProduction: !Equals - !Ref EnvType - prod CreateBucket: !Not - !Equals - !Ref BucketName - '' CreateBucketPolicy: !And - !Condition IsProduction - !Condition CreateBucket Resources: Bucket: Type: 'AWS::S3::Bucket' Condition: CreateBucket Policy: Type: 'AWS::S3::BucketPolicy' Condition: CreateBucketPolicy Properties: Bucket: !Ref BucketName PolicyDocument: ...