メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

条件

任意の Conditions セクションには、いつリソースが作成されたか、またはいつプロパティが定義されたかを定義するステートメントが含まれています。たとえば、2 つの値が等しいかどうかを比較することができます。条件の結果に応じてリソースを作成することができます。複数の条件がある場合、カンマで区切ります。

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

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

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

重要

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

条件の概要を使用方法

条件付きでリソースを生成するには、テンプレートの少なくとも 3 つのセクションにステートメントを含める必要があります。

Parametersセクションを開いて、

条件で、評価する入力値を定義します。条件は、これらの値に基づいて入力パラメータを true または false にします。

Conditionsセクションを開いて、

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

Resources および Outputsセクション

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

構文

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

JSON

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

YAML

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

JSON

Copy
{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionMap" : { "us-east-1" : { "AMI" : "ami-7f418316", "TestAz" : "us-east-1a" }, "us-west-1" : { "AMI" : "ami-951945d0", "TestAz" : "us-west-1a" }, "us-west-2" : { "AMI" : "ami-16fd7026", "TestAz" : "us-west-2a" }, "eu-west-1" : { "AMI" : "ami-24506250", "TestAz" : "eu-west-1a" }, "sa-east-1" : { "AMI" : "ami-3e3be423", "TestAz" : "sa-east-1a" }, "ap-southeast-1" : { "AMI" : "ami-74dda626", "TestAz" : "ap-southeast-1a" }, "ap-southeast-2" : { "AMI" : "ami-b3990e89", "TestAz" : "ap-southeast-2a" }, "ap-northeast-1" : { "AMI" : "ami-dcfa4edd", "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

Copy
AWSTemplateFormatVersion: "2010-09-09" Mappings: RegionMap: us-east-1: AMI: "ami-7f418316" TestAz: "us-east-1a" us-west-1: AMI: "ami-951945d0" TestAz: "us-west-1a" us-west-2: AMI: "ami-16fd7026" TestAz: "us-west-2a" eu-west-1: AMI: "ami-24506250" TestAz: "eu-west-1a" sa-east-1: AMI: "ami-3e3be423" TestAz: "sa-east-1a" ap-southeast-1: AMI: "ami-74dda626" TestAz: "ap-southeast-1a" ap-southeast-2: AMI: "ami-b3990e89" TestAz: "ap-southeast-2a" ap-northeast-1: AMI: "ami-dcfa4edd" 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

このページの内容: