Este é o novo Guia de referência de modelos do CloudFormation. Atualize seus favoritos e links. Para obter ajuda para começar a usar o CloudFormation, consulte o Guia do usuário do 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.
Tópicos
Usar Fn::FindInMap com valores específicos da região
O exemplo a seguir mostra como usar Fn::FindInMap em um modelo que inclui dois mapeamentos: AWSInstanceType2Arch e AWSRegionArch2AMI. Também inclui um parâmetro InstanceType que permite escolher entre t3.micro e t4g.nano. O padrão é t3.micro, mas pode ser substituído durante a criação da pilha.
O Fn::FindInMap primeiro determina a arquitetura (HVM64 ou ARM64) com base no tipo de instância selecionado e pesquisa a ID da AMI correta para essa arquitetura na atual Região da AWS.
nota
Os IDs de AMI mostrados nesses exemplos são espaços reservados para fins de demonstração. Sempre que possível, considere usar referências dinâmicas aos parâmetros AWS Systems Manager como 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 um parâmetro AWS Systems Manager 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 obter mais informações, consulte Obter valores armazenados em outros serviços usando referências dinâmicas.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "InstanceType": { "Description": "The EC2 instance type", "Type": "String", "AllowedValues": [ "t3.micro", "t4g.nano" ], "Default": "t3.micro" } }, "Mappings": { "AWSInstanceType2Arch": { "t3.micro": { "Arch": "HVM64" }, "t4g.nano": { "Arch": "ARM64" } }, "AWSRegionArch2AMI": { "us-east-1" : { "HVM64" : "ami-12345678901234567", "ARM64" : "ami-23456789012345678" }, "us-west-1" : { "HVM64" : "ami-34567890123456789", "ARM64" : "ami-45678901234567890" }, "eu-west-1" : { "HVM64" : "ami-56789012345678901", "ARM64" : "ami-67890123456789012" }, "ap-southeast-1" : { "HVM64" : "ami-78901234567890123", "ARM64" : "ami-89012345678901234" }, "ap-northeast-1" : { "HVM64" : "ami-90123456789012345", "ARM64" : "ami-01234567890123456" } } }, "Resources" : { "MyEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "InstanceType" : { "Ref": "InstanceType" }, "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch", { "Ref": "InstanceType" }, "Arch" ]}] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: InstanceType: Description: The EC2 instance type Type: String AllowedValues: - t3.micro - t4g.nano Default: t3.micro Mappings: AWSInstanceType2Arch: t3.micro: Arch: HVM64 t4g.nano: Arch: ARM64 AWSRegionArch2AMI: us-east-1: HVM64:ami-12345678901234567ARM64:ami-23456789012345678us-west-1: HVM64:ami-34567890123456789ARM64:ami-45678901234567890eu-west-1: HVM64:ami-56789012345678901ARM64:ami-67890123456789012ap-southeast-1: HVM64:ami-78901234567890123ARM64:ami-89012345678901234ap-northeast-1: HVM64:ami-90123456789012345ARM64:ami-01234567890123456Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: Fn::FindInMap: - AWSRegionArch2AMI - Ref: AWS::Region - Fn::FindInMap: - AWSInstanceType2Arch - Ref: InstanceType - Arch
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
{ "AWSTemplateFormatVersion": "2010-09-09", "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": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": "t2.micro", "SecurityGroupIds":{ "Fn::Split":[ ",", { "Fn::FindInMap":[ "SecurityGroups", { "Ref":"EnvironmentType" }, "SecurityGroupIds" ] } ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: SecurityGroups: Dev: SecurityGroupIds:sg-12345678Prod: SecurityGroupIds:sg-abcdef01,sg-ghijkl23Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' 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 obter 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.
-
Sintaxe de Mappings do modelo do CloudFormation no Guia do usuário do AWS CloudFormation