AWS CloudFormation
ユーザーガイド (API バージョン 2010-05-15)

条件

オプションの Conditions セクションには、エンティティが作成または設定される状況を定義する文が含まれています。たとえば、条件を作成し、それをリソースまたは出力に関連付けることで、条件が true の場合にのみ AWS CloudFormation がリソースまたは出力を作成するようにできます。同様に、条件をプロパティに関連付けて、条件が true の場合にのみ AWS CloudFormation がプロパティを特定の値に設定するようにできます。条件が false の場合、AWS CloudFormation はプロパティをユーザーが指定した別の値に設定します。

テスト環境と本稼働環境など、異なるコンテキストでリソースを作成できるテンプレートを再利用する場合に、条件を使用することがあります。テンプレートで EnvironmentType 入力パラメータを追加できます。このパラメータは入力として prod または test を受け取ります。本稼働環境では特定の機能に Amazon EC2 インスタンスを含め、テスト環境ではコスト削減のために使用する機能数を減らす場合があります。条件を使用すると、どのリソースを作成するかや、それらを各環境タイプでどのように設定するかを定義できます。

条件は、スタックを作成または更新するときに、事前定義の擬似パラメータまたは指定する入力パラメータ値に基づいて評価されます。それぞれの条件の中で、別の条件、パラメーター値、マッピングを参照することができます。必要な条件をすべて定義したら、テンプレートの Resources セクションと Outputs セクションでそれらをリソースやリソースプロパティに関連付けることができます。

AWS CloudFormation は、スタックの作成時または更新時、テンプレートに存在するすべての条件を評価したうえで、リソースを作成します。関連付けられた条件が true となるリソースが作成されます。関連づけられた条件が false のリソースは無視されます。また、AWS CloudFormation では各スタックの更新時に、リソースが更新される前にこれらの条件が再評価されます。関連付けられた条件が true のままのリソースは更新されます。関連づけられた条件が false になったリソースは削除されます。

重要

スタックの更新時に、条件を単独で更新することはできません。条件を更新できるのは、リソースを追加、変更、または削除する変更を含める場合だけです。

条件の概要を使用方法

条件付きで作成または構成するエンティティに応じて、次のテンプレートセクションにステートメントを含める必要があります。

Parametersセクションを開いて、

条件で評価する入力を定義します。これらの入力パラメータの値に基づいて、条件は true または false と評価されます。条件で擬似パラメータを評価する場合は、このセクションで擬似パラメータを定義する必要はありません。擬似パラメータは AWS CloudFormation によって事前定義されています。

Conditionsセクションを開いて、

組み込み関数を使用して条件を定義します。これらの条件は、AWS CloudFormation が関連するリソースをいつ作成するかを指定します。

Resources および Outputsセクション

条件付きで作成するリソースまたは出力と条件を関連付けます。AWS CloudFormation は、true に関連付けられたエンティティを作成し、false に関連付けられたをエンティティを無視します。Condition キーと条件の論理 ID を使用して、リソースまたは入力と関連付けます。条件付きでプロパティを指定するには、Fn::If 関数を使用します。詳細については、「条件関数」を参照してください。

構文

Conditions セクションは、キー名 Conditions で構成されます。各条件の宣言には論理 ID と組み込み関数が含まれており、スタックの作成または更新時に評価されます。次の擬似テンプレートで、Conditions セクションの概要を示します。

JSON

"Conditions" : { "Logical ID" : {Intrinsic function} }

YAML

Conditions: Logical ID: Intrinsic function

条件の組み込み関数

次の組み込み関数を使用して条件を定義できます。

  • Fn::And

  • Fn::Equals

  • Fn::If

  • Fn::Not

  • Fn::Or

各関数の構文と情報については、「条件関数」を参照してください。

注記

Fn::If は、テンプレートの Resources セクションと Outputs セクションのメタデータ属性、更新ポリシー属性、およびプロパティ値でのみ使用できます。

次のサンプルテンプレートには、EnvType という入力パラメーターが存在します。本稼働用のスタックを作成する場合は prod を、テスト用のスタックを作成する場合は test をここに指定します。本稼働環境では、AWS CloudFormation が Amazon EC2 インスタンスを作成し、インスタンスにボリュームをアタッチします。テスト環境では、AWS CloudFormation によって Amazon EC2 インスタンスのみが作成されます。

CreateProdResources 条件は、true パラメーターが EnvType と等しい場合に prod に評価されます。このサンプルテンプレートでは、NewVolume リソースと MountPoint リソースを CreateProdResources 条件に関連付けています。したがって、EnvType パラメーターが prod と等しい場合にのみ、リソースが作成されます。

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-0ff8a91507f77f867", "TestAz" : "us-east-1a" }, "us-west-1" : { "AMI" : "ami-0bdb828fd58c52235", "TestAz" : "us-west-1a" }, "us-west-2" : { "AMI" : "ami-a0cfeed8", "TestAz" : "us-west-2a" }, "eu-west-1" : { "AMI" : "ami-047bb4163c506cd98", "TestAz" : "eu-west-1a" }, "sa-east-1" : { "AMI" : "ami-07b14488da8ea02a0", "TestAz" : "sa-east-1a" }, "ap-southeast-1" : { "AMI" : "ami-08569b978cc4dfa10", "TestAz" : "ap-southeast-1a" }, "ap-southeast-2" : { "AMI" : "ami-09b42976632b27e9b", "TestAz" : "ap-southeast-2a" }, "ap-northeast-1" : { "AMI" : "ami-06cd52961ce9f0d85", "TestAz" : "ap-northeast-1a" } } }, "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" : { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "AMI" ]} } }, "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" ]} } } }, "Outputs" : { "VolumeId" : { "Value" : { "Ref" : "NewVolume" }, "Condition" : "CreateProdResources" } } }

YAML

AWSTemplateFormatVersion: "2010-09-09" Mappings: RegionMap: us-east-1: AMI: "ami-0ff8a91507f77f867" TestAz: "us-east-1a" us-west-1: AMI: "ami-0bdb828fd58c52235" TestAz: "us-west-1a" us-west-2: AMI: "ami-a0cfeed8" TestAz: "us-west-2a" eu-west-1: AMI: "ami-047bb4163c506cd98" TestAz: "eu-west-1a" sa-east-1: AMI: "ami-07b14488da8ea02a0" TestAz: "sa-east-1a" ap-southeast-1: AMI: "ami-08569b978cc4dfa10" TestAz: "ap-southeast-1a" ap-southeast-2: AMI: "ami-09b42976632b27e9b" TestAz: "ap-southeast-2a" ap-northeast-1: AMI: "ami-06cd52961ce9f0d85" TestAz: "ap-northeast-1a" 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: !FindInMap [RegionMap, !Ref "AWS::Region", AMI] 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 Outputs: VolumeId: Condition: CreateProdResources Value: !Ref NewVolume

このページの内容: