Mappings
La sección Mappings
opcional hace coincidir una clave con el conjunto correspondiente de valores identificados. Por ejemplo, si desea establecer valores en función de una región, puede crear un mapeo que utiliza el nombre de una región como clave y contiene los valores que desea especificar para cada región específica. Puede utilizar la función intrínseca Fn::FindInMap
para recuperar valores en una asignación.
No puede incluir parámetros, pseudo parámetros o funciones intrínsecas en la sección Mappings
.
Sintaxis
La sección Mappings
consta del nombre de clave Mappings
. Las claves en mapeos deben ser cadenas literales. Los valores pueden ser de los tipos String
o List
. El siguiente ejemplo muestra la sección Mappings
que contiene un mapeo único denominado Mapping01
(el nombre lógico).
Dentro de un mapeo, cada asignación es una clave seguida de otro mapeo. La clave debe ser un mapa de pares de nombre-valor y única dentro del mapeo.
JSON
"Mappings" : { "Mapping01" : { "Key01" : { "Name" : "Value01" }, "Key02" : { "Name" : "Value02" }, "Key03" : { "Name" : "Value03" } } }
YAML
Mappings: Mapping01: Key01: Name: Value01 Key02: Name: Value02 Key03: Name: Value03
Ejemplos
Asignación básica
El siguiente ejemplo muestra la sección Mappings
con una asignación RegionMap
, 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. Al nombrar los valores, puede asignar más de un conjunto de valores a una clave.
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
Asignación con múltiples valores
El siguiente ejemplo tiene claves de región que se asignan a dos conjuntos de valores: uno denominado MyAMI1 y el otro 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
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 ImageId
asigna la función FindInMap
. La función FindInMap
especifica clave como la región donde se crea la pila (mediante el pseudoparámetro AWS::Region
) y MyAMI1
como el nombre del valor al que hay que asignarla. Para obtener más información sobre pseudoparámetros, consulte Referencia de 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 y Fn::FindInMap
Puede utilizar un parámetro de entrada con la función Fn::FindInMap
para hacer referencia a un valor específico en una asignación. Por ejemplo, imagine que tiene una lista de las regiones y tipos de entorno que se asignan a un ID de grupo de seguridad específico. Puede seleccionar el ID del grupo de seguridad que utiliza la pila mediante un parámetro de entrada (EnvironmentType
). Para determinar la región, utilice el pseudoparámetro AWS::Region
, que obtiene la región de AWS en la que se crea la pila.
JSON
{ "AWSTemplateFormatVersion" : "2010-09-09", "Parameters":{ "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": "ami-0a70b9d193ae8a799", "InstanceType": "t2.micro", "SecurityGroupIds": [{ "Fn::FindInMap" : [ "SecurityGroupMap", { "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: 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: ami-0a70b9d193ae8a799 InstanceType: t2.micro SecurityGroupIds: - !FindInMap [SecurityGroupMap, !Ref "AWS::Region", !Ref EnvironmentType]
Recursos relacionados
Estos temas relacionados pueden resultarle útiles a la hora de desarrollar plantillas que utilicen la función Fn::FindInMap
.