Esta es la nueva Guía de referencia de plantillas de CloudFormation. Actualice sus marcadores y enlaces. Para obtener ayuda sobre cómo empezar a usar CloudFormation, consulte la Guía del usuario de AWS CloudFormation.
Fn::FindInMap
La función Fn::FindInMap intrínseca devuelve el valor correspondiente a claves en una asignación de dos niveles declarada en la sección Mappings.
Declaración
JSON
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey"] }
Si desea especificar un valor alternativo para cuando no se encuentre una clave en el mapeo, incluya un DefaultValue:
{ "Fn::FindInMap" : [ "MapName", "TopLevelKey", "SecondLevelKey", {"DefaultValue": "DefaultValue"}] }
YAML
Sintaxis del nombre de función completo:
Fn::FindInMap: [MapName,TopLevelKey,SecondLevelKey]
Sintaxis de la forma abreviada:
!FindInMap [MapName,TopLevelKey,SecondLevelKey]
Si desea especificar un valor alternativo para cuando no se encuentre una clave en el mapeo, incluya un DefaultValue:
Sintaxis del nombre de función completo:
Fn::FindInMap: -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
Sintaxis de la forma abreviada:
!FindInMap -MapName-TopLevelKey-SecondLevelKey- DefaultValue:DefaultValue
nota
No puede anidar dos instancias de dos funciones de manera abreviada.
Parameters
- MapName
-
El nombre lógico de un mapeo declarado en la sección Mappings que contiene las claves y valores.
- TopLevelKey
-
El nombre de clave de nivel superior. Su valor es una lista de pares clave-valor.
- SecondLevelKey
-
El nombre de la clave de segundo nivel, que se ha establecido en una de las claves de la lista asignada a
TopLevelKey. - DefaultValue
-
El valor que devuelve
Fn::FindInMapsi no se encuentra elTopLevelKeyo elSecondLevelKeyen el mapeo especificado. Este parámetro es opcional. Si se omite,Fn::FindInMapgenera un error cuando no se encuentra una clave.El cuarto parámetro debe ser un mapa con la clave
DefaultValue. Por ejemplo:{"DefaultValue": "us-east-1"}.
Valor devuelto
El valor que se ha asignado a SecondLevelKey. Si no se encuentra el TopLevelKey o el SecondLevelKey y se especifica un DefaultValue, se devuelve el DefaultValue en su lugar.
Ejemplos
Los siguientes ejemplos muestran cómo utilizar la función Fn::FindInMap.
Temas
Uso de Fn::FindInMap con valores específicos de la región
El siguiente ejemplo muestra cómo utilizar Fn::FindInMap en una plantilla que incluye dos asignaciones: AWSInstanceType2Arch y AWSRegionArch2AMI. También incluye un parámetro InstanceType que le permite elegir entre t3.micro y t4g.nano. El valor predeterminado es t3.micro, pero se puede anular durante la creación de la pila.
Fn::FindInMap primero determina la arquitectura (HVM64 o ARM64) en función del tipo de instancia seleccionado y, a continuación, busca el ID de AMI correcto para esa arquitectura en la Región de AWS actual.
nota
Los ID de AMI que se muestran en estos ejemplos son marcadores de posición con fines de demostración. Siempre que sea posible, considere la posibilidad de utilizar referencias dinámicas a los parámetros AWS Systems Manager como alternativa a la sección Mappings. Para evitar actualizar todas las plantillas con un nuevo ID cada vez que cambie la AMI que desea utilizar, utilice un parámetro AWS Systems Manager para obtener el último ID de AMI al crear o actualizar la pila. Las versiones más recientes de las AMI más utilizadas también están disponibles como parámetros públicos en Systems Manager. Para obtener más información, consulte Obtención de valores almacenados en otros servicios con referencias 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
Uso de Fn::FindInMap para configuraciones específicas del entorno
El siguiente ejemplo muestra cómo utilizar Fn::FindInMap para una plantilla con una sección Mappings que contiene una única asignación, SecurityGroups. También contiene un parámetro EnvironmentType que le permite especificar si el entorno es Dev o Prod. Su valor predeterminado es Dev, pero se puede anular durante la creación de la pila.
Fn::FindInMap devuelve los SecurityGroupIds apropiados en función del parámetro EnvironmentType. A continuación, Fn::Split divide la cadena separada por comas de los identificadores de los grupos de seguridad en una lista, que es el formato esperado para SecurityGroupIds.
Si implementa esta pila con EnvironmentType establecido en Dev, el valor de SecurityGroupIds para EC2Instance será sg-12345678. Si establece EnvironmentType en Prod, usará sg-abcdef01 y 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 ]
Utilice Fn::FindInMap con un valor predeterminado
El siguiente ejemplo utiliza un DefaultValue para proporcionar una alternativa cuando no se encuentra una clave en el mapeo. Si el Región de AWS actual no está definido en el mapeo RegionMap, Fn::FindInMap devuelve t3.micro en lugar de generar un error.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Mappings": { "RegionMap": { "us-east-1": { "InstanceType": "t3.large" }, "eu-west-1": { "InstanceType": "t3.medium" } } }, "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}", "InstanceType": { "Fn::FindInMap": [ "RegionMap", { "Ref": "AWS::Region" }, "InstanceType", { "DefaultValue": "t3.micro" } ] } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionMap: us-east-1: InstanceType: t3.large eu-west-1: InstanceType: t3.medium Resources: MyInstance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}' InstanceType: !FindInMap - RegionMap - !Ref AWS::Region - InstanceType - DefaultValue: t3.micro
Funciones compatibles
Puede utilizar las siguientes funciones en una función Fn::FindInMap:
-
Fn::FindInMap -
Ref
Recursos relacionados
Para usar funciones intrínsecas más allá de Fn::FindInMap y Ref en los parámetros de una función Fn::FindInMap, debe declarar la transformación AWS::LanguageExtensions dentro de su plantilla. Para obtener más información, consulte Fn::FindInMap enhancements.
Estos temas relacionados pueden resultarle útiles a la hora de desarrollar plantillas que utilicen la función Fn::FindInMap.
-
Sintaxis Mappings de la plantilla de CloudFormation en la Guía del usuario de AWS CloudFormation