

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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html).

# `Fn::FindInMap`
<a name="intrinsic-function-reference-findinmap"></a>

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
<a name="w2aac24c25b5"></a>

### JSON
<a name="intrinsic-function-reference-findinmap-syntax.json"></a>

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

### YAML
<a name="intrinsic-function-reference-findinmap-syntax.yaml"></a>

Sintaxis del nombre de función completo:

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

Sintaxis de la forma abreviada:

```
!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
```

**nota**  
No puede anidar dos instancias de dos funciones de manera abreviada.

## Parameters
<a name="w2aac24c25b7"></a>

MapName  <a name="MapName"></a>
El nombre lógico de un mapeo declarado en la sección Mappings que contiene las claves y valores.

TopLevelKey  <a name="TopLevelKey"></a>
El nombre de clave de nivel superior. Su valor es una lista de pares clave-valor.

SecondLevelKey  <a name="SecondLevelKey"></a>
El nombre de la clave de segundo nivel, que se ha establecido en una de las claves de la lista asignada a `TopLevelKey`.

## Valor devuelto
<a name="w2aac24c25b9"></a>

El valor que se ha asignado a `SecondLevelKey`.

## Ejemplos
<a name="intrinsic-function-reference-findinmap-examples"></a>

Los siguientes ejemplos muestran cómo utilizar la función `Fn::FindInMap`.

**Topics**
+ [Uso de Fn::FindInMap con valores específicos de la región](#intrinsic-function-reference-findinmap-region-example)
+ [Uso de Fn::FindInMap para configuraciones específicas del entorno](#intrinsic-function-reference-findinmap-environment-example)

### Uso de Fn::FindInMap con valores específicos de la región
<a name="intrinsic-function-reference-findinmap-region-example"></a>

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](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html). 

#### JSON
<a name="intrinsic-function-reference-findinmap-region-example.json"></a>

```
{
  "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
<a name="intrinsic-function-reference-findinmap-region-example.yaml"></a>

```
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
```

### Uso de Fn::FindInMap para configuraciones específicas del entorno
<a name="intrinsic-function-reference-findinmap-environment-example"></a>

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 [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-securitygroupids](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html#cfn-ec2-instance-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
<a name="intrinsic-function-reference-findinmap-environment-example.json"></a>

```
{
  "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
<a name="intrinsic-function-reference-findinmap-environment-example.yaml"></a>

```
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 ]
```

## Funciones compatibles
<a name="w2aac24c25c13"></a>

Puede utilizar las siguientes funciones en una función `Fn::FindInMap`:
+ `Fn::FindInMap`
+ `Ref`

## Recursos relacionados
<a name="w2aac24c25c15"></a>

Para usar otras funciones intrínsecas o un valor predeterminado en una función `Fn::FindInMap`, debe declarar la transformación `AWS::LanguageExtensions` en su plantilla. Para obtener más información, consulte [`Fn::FindInMap enhancements`](intrinsic-function-reference-findinmap-enhancements.md).

Estos temas relacionados pueden resultarle útiles a la hora de desarrollar plantillas que utilicen la función `Fn::FindInMap`.
+ [`Fn::Sub`](intrinsic-function-reference-sub.md)
+ [Sintaxis Mappings de la plantilla de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/mappings-section-structure.html) en la *Guía del usuario de AWS CloudFormation*