Sintaxis de Mappings de la plantilla de CloudFormation - AWS CloudFormation

Sintaxis de Mappings de la plantilla de CloudFormation

La sección opcional Mappings ayuda a crear pares de clave-valor que pueden usarse para especificar valores a ciertas condiciones o dependencias.

Un caso de uso común es para la sección Mappings es para establecer valores según la Región de AWS en la que la pila esté implementada. Esto se puede lograr con el pseudoparámetro AWS::Region. El pseudoparámetro AWS::Region es un valor que CloudFormation resuelve para la región en la que se crea la pila. CloudFormation resuelve los pseudoparámetros cuando usted crea la pila.

Para recuperar los valores de una asignación, puede usar la función intrínseca Fn::FindInMap en la sección Resources de la plantilla.

Sintaxis

La sección Mappings usa la siguiente sintaxis:

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 es el nombre lógico para la asignación.

  • Dentro de las asignaciones, cada una es una clave seguida de otra asignación.

  • La clave debe ser un mapa de pares de nombre-valor y única dentro del mapeo.

  • El par nombre-valor es una etiqueta y el valor que se deben asignar. Al nombrar los valores, puede asignar más de un conjunto de valores a una clave.

  • Las claves en mapeos deben ser cadenas literales.

  • Los valores pueden ser de tipo String o List.

nota

No puede incluir parámetros, pseudo parámetros o funciones intrínsecas en la sección Mappings.

Si actualmente su pila no utiliza los valores de una asignación, no puede actualizar solo la asignación. Tiene que incluir cambios que agreguen, modifiquen o eliminen recursos.

Ejemplos

Asignación básica

El siguiente ejemplo muestra la sección Mappings con una asignación RegionToInstanceType, que contiene cinco claves que se asignan a pares nombre-valor que contienen valores de una única cadena. Las claves son nombres de regiones. Cada par nombre-valor es un tipo de instancia de la familia T que está disponible en la región representada por la clave. Los pares nombre-valor tienen un nombre (InstanceType en el ejemplo) y un valor.

JSON

"Mappings" : { "RegionToInstanceType" : { "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: RegionToInstanceType: 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

Asignación con múltiples valores

En el siguiente ejemplo, se muestran claves de región que se asignan a dos conjuntos de valores: uno denominado MyAMI1 y el otro, MyAMI2.

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

"Mappings" : { "RegionToAMI" : { "us-east-1" : { "MyAMI1" : "ami-12345678901234567", "MyAMI2" : "ami-23456789012345678" }, "us-west-1" : { "MyAMI1" : "ami-34567890123456789", "MyAMI2" : "ami-45678901234567890" }, "eu-west-1" : { "MyAMI1" : "ami-56789012345678901", "MyAMI2" : "ami-67890123456789012" }, "ap-southeast-1" : { "MyAMI1" : "ami-78901234567890123", "MyAMI2" : "ami-89012345678901234" }, "ap-northeast-1" : { "MyAMI1" : "ami-90123456789012345", "MyAMI2" : "ami-01234567890123456" } } }

YAML

Mappings: RegionToAMI: us-east-1: MyAMI1: ami-12345678901234567 MyAMI2: ami-23456789012345678 us-west-1: MyAMI1: ami-34567890123456789 MyAMI2: ami-45678901234567890 eu-west-1: MyAMI1: ami-56789012345678901 MyAMI2: ami-67890123456789012 ap-southeast-1: MyAMI1: ami-78901234567890123 MyAMI2: ami-89012345678901234 ap-northeast-1: MyAMI1: ami-90123456789012345 MyAMI2: ami-01234567890123456

Devolución de un valor a partir de una asignación

Puede utilizar la función Fn::FindInMap para obtener un valor identificado a partir de una clave especificada. La siguiente plantilla de ejemplo contiene un recurso de Amazon EC2 cuya propiedad InstanceType asigna la función FindInMap. La función FindInMap especifica clave como la región de Región de AWS donde se crea la pila (mediante el pseudoparámetro AWS::Region) y InstanceType como el nombre del valor al que hay que asignarla. ImageId utiliza un parámetro de Systems Manager para recuperar de forma dinámica la AMI más reciente de Amazon Linux 2. Para obtener más información sobre pseudoparámetros, consulte . Obtención de valores de AWS mediante pseudoparámetros.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Mappings" : { "RegionToInstanceType" : { "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" } } }, "Resources" : { "myEC2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap" : [ "RegionToInstanceType", { "Ref" : "AWS::Region" }, "InstanceType" ]} } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Mappings: RegionToInstanceType: 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 Resources: myEC2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionToInstanceType, !Ref 'AWS::Region', InstanceType]

Parámetro de entrada y Fn::FindInMap

La siguiente plantilla de ejemplo muestra cómo crear una instancia de EC2 con varias asignaciones. La plantilla utiliza asignaciones anidadas para seleccionar automáticamente el tipo de instancia y el grupo de seguridad adecuados en función de la Región de AWS de destino y el tipo de entorno (Dev o Prod). También utiliza un parámetro de Systems Manager para recuperar de forma dinámica la AMI más reciente de Amazon Linux 2.

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters" : { "EnvironmentType" : { "Description" : "The environment type (Dev or Prod)", "Type" : "String", "Default" : "Dev", "AllowedValues" : [ "Dev", "Prod" ] } }, "Mappings" : { "RegionAndEnvironmentToInstanceType" : { "us-east-1" : { "Dev" : "t3.micro", "Prod" : "c5.large" }, "us-west-1" : { "Dev" : "t2.micro", "Prod" : "m5.large" } }, "RegionAndEnvironmentToSecurityGroup" : { "us-east-1" : { "Dev" : "sg-12345678", "Prod" : "sg-abcdef01" }, "us-west-1" : { "Dev" : "sg-ghijkl23", "Prod" : "sg-45678abc" } } }, "Resources" : { "Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType" : { "Fn::FindInMap": [ "RegionAndEnvironmentToInstanceType", { "Ref": "AWS::Region" }, { "Ref": "EnvironmentType" } ]}, "SecurityGroupIds" : [{ "Fn::FindInMap" : [ "RegionAndEnvironmentToSecurityGroup", { "Ref" : "AWS::Region" }, { "Ref" : "EnvironmentType" } ]}] } } } }

YAML

AWSTemplateFormatVersion: 2010-09-09 Parameters: EnvironmentType: Description: The environment type (Dev or Prod) Type: String Default: Dev AllowedValues: - Dev - Prod Mappings: RegionAndEnvironmentToInstanceType: us-east-1: Dev: t3.micro Prod: c5.large us-west-1: Dev: t2.micro Prod: m5.large RegionAndEnvironmentToSecurityGroup: us-east-1: Dev: sg-12345678 Prod: sg-abcdef01 us-west-1: Dev: sg-ghijkl23 Prod: sg-45678abc Resources: Ec2Instance: Type: AWS::EC2::Instance Properties: ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' InstanceType: !FindInMap [RegionAndEnvironmentToInstanceType, !Ref 'AWS::Region', !Ref EnvironmentType] SecurityGroupIds: - !FindInMap [RegionAndEnvironmentToSecurityGroup, !Ref 'AWS::Region', !Ref EnvironmentType]

Estos temas relacionados pueden resultarle útiles a la hora de desarrollar plantillas que utilicen la función Fn::FindInMap.