CloudFormation テンプレートの Mappings セクション構文リファレンス - AWS CloudFormation

CloudFormation テンプレートの Mappings セクション構文リファレンス

オプションの Mappings セクションは、特定の条件または依存関係に基づいて値を指定するために使用できる key-value ペアを作成するのに役立ちます。

Mappings セクションの一般的なユースケースの 1 つは、スタックがデプロイされている AWS リージョン に基づいて値を設定することです。これは AWS::Region 疑似パラメータを使用することで実現できます。AWS::Region 擬似パラメータは、CloudFormation によってスタックが作成されるリージョンに解決される値です。擬似パラメータは、スタックの作成時に CloudFormation によって解決されます。

マップ内の値を取得するには、テンプレートの Resources セクション内で Fn::FindInMap 組み込み関数を使用できます。

構文

Mappings セクションでは、次の構文を使用します。

JSON

"Mappings" : { "MappingLogicalName" : { "Key1" : { "Name" : "Value1" }, "Key2" : { "Name" : "Value2" }, "Key3" : { "Name" : "Value3" } } }

YAML

Mappings: MappingLogicalName: Key1: Name: Value1 Key2: Name: Value2 Key3: Name: Value3
  • MappingLogicalName はマッピングの論理名です。

  • マッピング内では、各マッピングは、別のマッピングが後に続くキーです。

  • キーは、名前と値のペアのマップであり、マッピング内で一意である必要があります。

  • 名前と値のペアは、ラベルとマッピングする値から構成されます。値に名前を付けることで、1 つのキーに対して値のセットを複数、対応付けることができます。

  • マッピングに含まれるキーは、リテラル文字列であることが必要です。

  • 値はタイプ String または List です。

注記

Mappings セクションにパラメータ、擬似パラメータまたは組み込み関数を含めることはできません。

基本的なマッピング

以下に示したのは、Mappings というマップを持つ RegionMap セクションの例です。キーは 5 つ存在し、それぞれ単一の文字列値を含んだ名前と値のペアに対応しています。キーはリージョンの名前です。名前と値の各ペアは、キーで表されるリージョンで利用可能な T ファミリーのインスタンスタイプです。名前と値のペアには、名前 (この例では InstanceType) と値があります。

JSON

"Mappings" : { "RegionMap" : { "us-east-1" : {"InstanceType": "t2.micro"}, "us-west-1" : {"InstanceType": "t2.micro"}, "eu-west-1" : {"InstanceType": "t2.micro"}, "eu-north-1" : {"InstanceType": "t3.micro"}, "me-south-1" : {"InstanceType": "t3.micro"} } }

YAML

Mappings: RegionMap: us-east-1: InstanceType: t2.micro us-west-1: InstanceType: t2.micro eu-west-1: InstanceType: t2.micro eu-north-1: InstanceType: t3.micro me-south-1: InstanceType: t3.micro

複数の値のマッピング

次の例には、2 つの値のセットにマッピングされたリージョンキーがあります。1 つは MyAMI1 という名前で、もう 1 つは MyAMI2 という名前です。

JSON

"AMIIDMap" : { "us-east-1" : {"MyAMI1" : "ami-0ff8a91507f77f867", "MyAMI2" : "ami-0a584ac55a7631c0c"}, "us-west-1" : {"MyAMI1" : "ami-0bdb828fd58c52235", "MyAMI2" : "ami-066ee5fd4a9ef77f1"}, "eu-west-1" : {"MyAMI1" : "ami-047bb4163c506cd98", "MyAMI2" : "ami-0a7c483d527806435"}, "ap-southeast-1" : {"MyAMI1" : "ami-08569b978cc4dfa10", "MyAMI2" : "ami-0be9df32ae9f92309"}, "ap-northeast-1" : {"MyAMI1" : "ami-06cd52961ce9f0d85", "MyAMI2" : "ami-053cdd503598e4a9d"} }

YAML

AMIIDMap: us-east-1: MyAMI1: ami-0ff8a91507f77f867 MyAMI2: ami-0a584ac55a7631c0c us-west-1: MyAMI1: ami-0bdb828fd58c52235 MyAMI2: ami-066ee5fd4a9ef77f1 eu-west-1: MyAMI1: ami-047bb4163c506cd98 MyAMI2: ami-0a7c483d527806435 ap-southeast-1: MyAMI1: ami-08569b978cc4dfa10 MyAMI2: ami-0be9df32ae9f92309 ap-northeast-1: MyAMI1: ami-06cd52961ce9f0d85 MyAMI2: ami-053cdd503598e4a9d

マッピングから値を返します

Fn::FindInMap 関数を使用すると、指定したキーによって名前付きの値を取得できます。次に示したのは、Amazon EC2 というリソースを含んだテンプレートの例です。このリソースの ImageId プロパティを、FindInMap 関数によって割り当てています。FindInMap 関数で、(AWS::Region 擬似パラメータを使用して) スタックの作成先となるリージョンとしてキーを指定し、マッピング先の値の名前として MyAMI1 を指定しています。擬似パラメーターの詳細については、「擬似パラメータ参照」を参照してください。

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "AMIIDMap" : { "us-east-1" : {"MyAMI1" : "ami-0ff8a91507f77f867", "MyAMI2" : "ami-0a584ac55a7631c0c"}, "us-west-1" : {"MyAMI1" : "ami-0bdb828fd58c52235", "MyAMI2" : "ami-066ee5fd4a9ef77f1"}, "eu-west-1" : {"MyAMI1" : "ami-047bb4163c506cd98", "MyAMI2" : "ami-0a7c483d527806435"}, "ap-northeast-1" : {"MyAMI1" : "ami-06cd52961ce9f0d85", "MyAMI2" : "ami-053cdd503598e4a9d"}, "ap-southeast-1" : {"MyAMI1" : "ami-08569b978cc4dfa10", "MyAMI2" : "ami-0be9df32ae9f92309"} } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "AMIIDMap", { "Ref" : "AWS::Region" }, "MyAMI1" ]}, "InstanceType" : "t2.micro" } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Mappings: AMIIDMap: us-east-1: MyAMI1: ami-0ff8a91507f77f867 MyAMI2: ami-0a584ac55a7631c0c us-west-1: MyAMI1: ami-0bdb828fd58c52235 MyAMI2: ami-066ee5fd4a9ef77f1 eu-west-1: MyAMI1: ami-047bb4163c506cd98 MyAMI2: ami-0a7c483d527806435 ap-northeast-1: MyAMI1: ami-06cd52961ce9f0d85 MyAMI2: ami-053cdd503598e4a9d ap-southeast-1: MyAMI1: ami-08569b978cc4dfa10 MyAMI2: ami-0be9df32ae9f92309 Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap [AMIIDMap, !Ref "AWS::Region", MyAMI1] InstanceType: t2.micro

入力パラメーターと Fn::FindInMap

Fn::FindInMap 関数を使用して、マップ内の特定の値を参照するために入力パラメーターを使用できます。例えば、特定のセキュリティグループ ID にマッピングされているリージョンと環境タイプのリストがあるとします。入力パラメータ (EnvironmentType) を使用して、スタックが使用するセキュリティグループ ID を選択できます。リージョンを決定するには、AWS::Region 擬似パラメータを使用して、スタックを作成する AWS リージョン を取得します。

この例では、EC2 インスタンスの ImageId プロパティのデフォルト値として Systems Manager パラメータエイリアス (/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2) を提供する Systems Manager パラメータタイプも宣言します。これは、スタックが作成されるリージョンで CloudFormation が最新の Amazon Linux 2 AMI の AMI ID 値として解決する値です。

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "LatestAmiId" : { "Description" : "The latest Amazon Linux 2 AMI from the Parameter Store", "Type" : "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>", "Default" : "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" }, "EnvironmentType" : { "Description" : "The environment type (Dev or Prod)", "Type" : "String", "Default" : "Dev", "AllowedValues" : [ "Dev", "Prod" ] } }, "Mappings" : { "SecurityGroupMap" : { "us-east-1" : { "Dev" : "sg-12345678", "Prod" : "sg-abcdef01" }, "us-west-2" : { "Dev" : "sg-ghijkl23", "Prod" : "sg-45678abc" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Ref" : "LatestAmiId" }, "InstanceType" : "t2.micro", "SecurityGroupIds" : [{ "Fn::FindInMap" : [ "SecurityGroupMap", { "Ref" : "AWS::Region" }, { "Ref" : "EnvironmentType" } ]}] } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: SecurityGroupMap: us-east-1: Dev: "sg-12345678" Prod: "sg-abcdef01" us-west-2: Dev: "sg-ghijkl23" Prod: "sg-45678abc" Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref LatestAmiId InstanceType: t2.micro SecurityGroupIds: - !FindInMap [SecurityGroupMap, !Ref "AWS::Region", !Ref EnvironmentType]

これらの関連トピックは、Fn::FindInMap 関数を使用するテンプレートを作成する際に役立ちます。