Sintaxe de Mappings de modelo do CloudFormation - AWS CloudFormation

Sintaxe de Mappings de modelo do CloudFormation

A seção opcional Mappings ajuda a criar pares de chave-valor que podem ser usados para especificar valores com base em determinadas condições ou dependências.

Um caso de uso comum para a seção Mappings é definir valores com base na Região da AWS em que a pilha é implantada. Isso pode ser feito por meio do pseudoparâmetro AWS::Region. O pseudoparâmetro AWS::Region é um valor que o CloudFormation resolve para a região em que a pilha é criada. Os pseudoparâmetros são resolvidos pelo CloudFormation quando você cria a pilha.

Para recuperar valores em um mapa, você pode usar a função intrínseca Fn::FindInMap na seção Resources do seu modelo.

Sintaxe

A seção Mappings usa a seguinte sintaxe:

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 é o nome lógico do mapeamento.

  • Dentro de um mapeamento, cada mapa é uma chave seguida por outro mapeamento.

  • A chave deve ser um mapa de pares nome/valor e exclusiva dentro do mapeamento.

  • O par de nome/valor é um rótulo e o valor para mapear. Nomeando os valores, você pode mapear mais de um conjunto de valores para uma chave.

  • As chaves em mapeamentos devem ser sequências literais.

  • Os valores podem ser do tipo String ou List.

nota

Você não pode incluir parâmetros, pseudoparâmetros ou funções intrínsecas na seção Mappings.

Se os valores em um mapeamento não estiverem sendo usados atualmente pela pilha, você não poderá atualizar apenas o mapeamento. Você precisa incluir alterações que adicionam, modificam ou excluem recursos.

Exemplos

Mapeamento básico

O exemplo a seguir mostra uma seção Mappings com um mapa RegionMap que contém cinco chaves que são mapeadas para pares de nome e valor que contêm valores de sequência únicos. As chaves são nomes de regiões. Cada par de nome-valor é um tipo de instância da família T que está disponível na região representada pela chave. Os pares de nome-valor têm um nome (InstanceType no exemplo) e um valor.

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

Mapeamento com vários valores

O exemplo a seguir tem chaves de regiões que são mapeadas para dois conjuntos de valores: uma chamada MyAMI1 e a outra 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

Retornar um valor de um mapeamento

Você pode usar a função Fn::FindInMap para retornar um valor nomeado com base em uma chave especificada. O modelo de exemplo a seguir contém um recurso do Amazon EC2 cuja propriedade ImageId é atribuída pela função FindInMap. A função FindInMap especifica a chave como a região onde a pilha é criada (usando o pseudoparâmetro AWS::Region) e MyAMI1 como o nome do valor para o qual mapear. Para obter mais informações sobre pseudoparâmetros, consulte Obter valores da AWS usando pseudoparâmetros.

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

Parâmetro de entrada e Fn::FindInMap

Você pode usar um parâmetro de entrada com a função Fn::FindInMap para fazer referência a um valor específico em um mapa. Por exemplo, suponha que você tem uma lista de regiões e tipos de ambientes que são mapeados para determinado ID de grupo de segurança. Você pode selecionar o ID do grupo de segurança usado pela pilha utilizando um parâmetro de entrada (EnvironmentType). Para determinar a região, use o pseudoparâmetro AWS::Region, o qual obtém a Região da AWS na qual você cria a pilha.

Este exemplo também declara um tipo de parâmetro do Systems Manager que fornece um alias de parâmetro (/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2) do Systems Manager como o valor padrão para a propriedade ImageId da instância do EC2. Esse é um valor que o CloudFormation resolve como o valor do ID da AMI mais recente do Amazon Linux 2 na região em que a pilha é criada.

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]

Esses tópicos relacionados podem ser úteis à medida que você desenvolve modelos que usam a função Fn::FindInMap.