Fn::FindInMap - AWS CloudFormation

Fn::FindInMap

A função intrínseca Fn::FindInMap retorna o valor correspondente às chaves em um mapa de dois níveis que é declarado na seção Mappings.

Declaração

JSON

{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }

YAML

Sintaxe para o nome da função completo:

Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ]

Sintaxe para a forma resumida:

!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
nota

Você não pode aninhar duas instâncias de duas funções na forma abreviada.

Parâmetros

MapName

O nome lógico de um mapeamento declarado na seção de mapeamento que contém as chaves e os valores.

TopLevelKey

O nome da chave de nível superior. Seu valor é uma lista de pares de chave/valor.

SecondLevelKey

O nome da chave de segundo nível, que é definido para uma das chaves na lista atribuída ao TopLevelKey.

Valor de retorno

O valor que é atribuído a SecondLevelKey.

Exemplos

Os exemplos a seguir demonstram como usar a função Fn::FindInMap.

Usar Fn::FindInMap com valores específicos da região

O exemplo a seguir mostra como usar Fn::FindInMap em um modelo com uma seção Mappings que contém um único mapa, RegionMap, que associa AMIs com regiões da AWS.

  • O mapa tem 5 chaves de nível superior que correspondem a várias regiões da AWS.

  • Cada chave de nível superior é atribuída a uma lista com duas chaves de segundo nível, "HVM64" e "HVMG2", que correspondem à arquitetura da AMI.

  • Cada uma das chaves de segundo nível é atribuída com um nome de AMI apropriada.

O modelo de exemplo a seguir contém um recurso AWS::EC2::Instance cuja propriedade ImageId é definida pela função FindInMap.

O MapName é definido como o mapa de interesse, que é "RegionMap" neste exemplo. A TopLevelKey é definida como a região na qual a pilha é criada, que é determinada usando o pseudoparâmetro "AWS::Region". A SecondLevelKey está definida como a arquitetura desejada, que é "HVM64" para este exemplo.

FindInMap retorna a AMI atribuída à FindInMap. Para uma instância HVM64 em us-east-1, FindInMap retornaria "ami-0ff8a91507f77f867".

nota

Considere os parâmetros AWS Systems Manager como uma alternativa à seção Mappings. Para evitar atualizar todos os modelos com um novo ID sempre que a AMI que você deseja usar for alterada, use o tipo de parâmetro AWS::SSM::Parameter::Value<AWS::EC2::Image::Id> para recuperar o ID da AMI mais recente quando a pilha for criada ou atualizada. As versões mais recentes de AMIs comumente usadas também estão disponíveis como parâmetros públicos no Systems Manager. Para ter mais informações, consulte Especificar recursos existentes no runtime com tipos de parâmetros fornecidos pelo CloudFormation.

JSON

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

YAML

Mappings: RegionMap: us-east-1: HVM64: "ami-0ff8a91507f77f867" HVMG2: "ami-0a584ac55a7631c0c" us-west-1: HVM64: "ami-0bdb828fd58c52235" HVMG2: "ami-066ee5fd4a9ef77f1" eu-west-1: HVM64: "ami-047bb4163c506cd98" HVMG2: "ami-0a7c483d527806435" ap-southeast-1: HVM64: "ami-08569b978cc4dfa10" HVMG2: "ami-0be9df32ae9f92309" ap-northeast-1: HVM64: "ami-06cd52961ce9f0d85" HVMG2: "ami-053cdd503598e4a9d" Resources: myEC2Instance: Type: "AWS::EC2::Instance" Properties: ImageId: !FindInMap - RegionMap - !Ref 'AWS::Region' - HVM64 InstanceType: t2.micro

Usar Fn::FindInMap para configurações específicas do ambiente

O exemplo a seguir mostra como usar Fn::FindInMap em um modelo com uma seção Mappings que contém um único mapa, SecurityGroups. Ele também contém um parâmetro EnvironmentType que permite especificar se o ambiente é Dev ou Prod. O padrão é Dev, mas pode ser substituído durante a criação da pilha.

Fn::FindInMap retorna o SecurityGroupIds apropriado com base no parâmetro EnvironmentType. Depois, Fn::Split divide a string separada por vírgulas de IDs de grupos de segurança em uma lista, que é o formato esperado para SecurityGroupIds.

Se você implantar essa pilha com EnvironmentType definido como Dev, SecurityGroupIds para EC2Instance será sg-12345678. Se você definir EnvironmentType como Prod, ele usará sg-abcdef01 e sg-ghijkl23.

JSON

{ ... "Parameters":{ "EnvironmentType":{ "Description":"The environment type (Dev or Prod)", "Type":"String", "Default":"Dev", "AllowedValues":[ "Dev", "Prod" ] } }, "Mappings":{ "SecurityGroups":{ "Dev":{ "SecurityGroupIds":"sg-12345678" }, "Prod":{ "SecurityGroupIds":"sg-abcdef01,sg-ghijkl23" } } }, "Resources":{ "Ec2Instance":{ "Type":"AWS::EC2::Instance", "Properties":{ "ImageId": "ami-0a70b9d193ae8a799", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }

YAML

Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: SecurityGroups: Dev: SecurityGroupIds: sg-12345678 Prod: SecurityGroupIds: sg-abcdef01,sg-ghijkl23 Resources: Ec2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0a70b9d193ae8a799 InstanceType: t2.micro SecurityGroupIds: Fn::Split: - "," - Fn::FindInMap: [ SecurityGroups, !Ref EnvironmentType, SecurityGroupIds ]

Funções compatíveis

Você pode usar as seguintes funções em uma função Fn::FindInMap:

  • Fn::FindInMap

  • Ref

Recursos relacionados

Para usar outras funções intrínsecas ou um valor padrão em uma função Fn::FindInMap, é necessário declarar a transformação AWS::LanguageExtensions no modelo. Para ter mais informações, consulte Fn::FindInMap enhancements.

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