

# Definición de recursos existentes en tiempo de ejecución con tipos de parámetros proporcionados por CloudFormation
<a name="cloudformation-supplied-parameter-types"></a>

Al crear la plantilla, puede crear parámetros que requieran que los usuarios introduzcan identificadores de los recursos de AWS existentes o parámetros de Systems Manager mediante tipos de parámetros especializados proporcionados por CloudFormation. 

**Topics**
+ [Descripción general](#cloudformation-supplied-parameter-types-overview)
+ [Ejemplo](#cloudformation-supplied-parameter-types-example)
+ [Consideraciones](#cloudformation-supplied-parameter-types-considerations)
+ [Tipos de parámetros específicos de AWS compatibles](#aws-specific-parameter-types-supported)
+ [Tipos de parámetros de Systems Manager admitidos](#systems-manager-parameter-types-supported)
+ [Tipos de parámetros de Systems Manager no admitidos](#systems-manager-parameter-types-unsupported)

## Descripción general
<a name="cloudformation-supplied-parameter-types-overview"></a>

En CloudFormation, puede usar parámentros para personalizar las pilas al proporcionar valores de entrada durante la creación o actualización de la pila. Esta característica hace que sus plantillas sean reutilizables y flexibles en diferentes escenarios. 

Los parámetros se definen en la sección `Parameters` de una plantilla de CloudFormation. Cada parámetro tiene un nombre y un tipo, y se puede tener varias configuraciones adicionales, como un valor predeterminado y valores permitidos. Para obtener más información, consulte [Sintaxis de Parameters de la plantilla de CloudFormation](parameters-section-structure.md). 

El tipo de parámetro determina el tipo de valor de entrada que el parámetro puede aceptar. Por ejemplo, `Number` solo acepta valores numéricos, mientras que `String` acepta la entrada de texto. 

CloudFormation proporciona varios tipos de parámetros adicionales que puede usar en sus plantillas para hacer referencia a los recursos de AWS existentes y a los parámetros de Systems Manager. 

Estos tipos de parámetro se dividen en dos categorías:
+ **tipos de parámetros específicos de AWS**: CloudFormation proporciona un conjunto de tipos de parámetros que ayudan a atrapar valores no válidos al crear o actualizar una pila. Al utilizar estos tipos de parámetros, cualquier persona que utilice la plantilla debe especificar valores válidos de la Cuenta de AWS y la región en la que van a crear la pila.

  Si utilizan la Consola de administración de AWS, CloudFormation proporciona una lista rellenada previamente de los valores existentes de su cuenta y región. De esta forma el usuario no tiene que recordar y escribir correctamente un nombre específico o ID. En su lugar, simplemente seleccionan valores de una lista desplegable. En algunos casos, pueden incluso buscar valores por ID, nombre o el valor `Name` de la etiqueta.
+ **Tipos de parámetros de Systems Manager**CloudFormation también proporciona tipos de parámetros que corresponden a parámetros existentes en el Almacén de parámetros de Systems Manager. Cuando se usan estos tipos de parámetros, cualquier persona que use la plantilla debe especificar una clave de Almacén de parámetros como el valor del tipo de parámetro de Systems Manager y, a continuación, CloudFormation recupera el valor más reciente del Almacén de parámetros que se usará para su pila. Esto puede resultar útil cuando necesite actualizar con frecuencia las aplicaciones con nuevos valores de propiedad, como los ID de Imagen de máquina de Amazon (AMI). Para obtener más información acerca del Almacén de parámetros, consulte [Almacén de parámetros de Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html).

Una vez definidos los parámetros en la sección `Parameters`, puede hacer referencia a los valores de los parámetros en toda la plantilla de CloudFormation mediante la función `Ref`.

## Ejemplo
<a name="cloudformation-supplied-parameter-types-example"></a>

El siguiente ejemplo muestra una plantilla que usa los siguientes tipos de parámetros. 
+ `AWS::EC2::VPC::Id`
+ `AWS::EC2::Subnet::Id`
+ `AWS::EC2::KeyPair::KeyName`
+ `AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>`

Para crear una pila a partir de esta plantilla, debe especificar un ID de VPC, un ID de subred y un nombre de par de claves existentes en su cuenta. También puede especificar una clave del Almacén de parámetros existente que haga referencia al ID de AMI deseado o mantener el valor predeterminado de `/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2`. Este parámetro público es un alias del ID de AMI regional de la AMI más reciente de Amazon Linux 2. Para obtener más información acerca de parámetros públicos, consulte [Descubrir parámetros públicos en el Almacén de parámetros](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-finding-public-parameters.html) en la *Guía del usuario de AWS Systems Manager*.

### JSON
<a name="cloudformation-supplied-parameter-types-example.json"></a>

```
{
    "Parameters": {
        "VpcId": {
            "Description": "ID of an existing Virtual Private Cloud (VPC).",
            "Type": "AWS::EC2::VPC::Id"
        },
        "PublicSubnetId": {
            "Description": "ID of an existing public subnet within the specified VPC.",
            "Type": "AWS::EC2::Subnet::Id"
        },
        "KeyName": {
            "Description": "Name of an existing EC2 key pair to enable SSH access to the instance.",
            "Type": "AWS::EC2::KeyPair::KeyName"
        },
        "AMIId": {
            "Description": "Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI).",
            "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>",
            "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2"
        }
    },
    "Resources": {
        "InstanceSecurityGroup": {
            "Type": "AWS::EC2::SecurityGroup",
            "Properties": {
                "GroupDescription": "Enable SSH access via port 22",
                "VpcId": { "Ref": "VpcId" },
                "SecurityGroupIngress": [
                    {
                        "IpProtocol": "tcp",
                        "FromPort": 22,
                        "ToPort": 22,
                        "CidrIp": "0.0.0.0/0"
                    }
                ]
            }
        },
        "Ec2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "KeyName": { "Ref": "KeyName" },
                "ImageId": { "Ref": "AMIId" },
                "NetworkInterfaces": [
                    {
                        "AssociatePublicIpAddress": "true",
                        "DeviceIndex": "0",
                        "SubnetId": { "Ref": "PublicSubnetId" },
                        "GroupSet": [{ "Ref": "InstanceSecurityGroup" }]
                    }
                ]
            }
        }
    },
    "Outputs": {
        "InstanceId": {
            "Value": { "Ref": "Ec2Instance" }
        }
    }
}
```

### YAML
<a name="cloudformation-supplied-parameter-types-example.yaml"></a>

```
Parameters:
  VpcId:
    Description: ID of an existing Virtual Private Cloud (VPC).
    Type: AWS::EC2::VPC::Id
  PublicSubnetId:
    Description: ID of an existing public subnet within the specified VPC.
    Type: AWS::EC2::Subnet::Id
  KeyName:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instance.
    Type: AWS::EC2::KeyPair::KeyName
  AMIId:
    Description: Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI).
    Type: AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>
    Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
Resources:
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable SSH access via port 22
      VpcId: !Ref VpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
  Ec2Instance:
    Type: AWS::EC2::Instance
    Properties:
      KeyName: !Ref KeyName
      ImageId: !Ref AMIId
      NetworkInterfaces:
        - AssociatePublicIpAddress: "true"
          DeviceIndex: "0"
          SubnetId: !Ref PublicSubnetId
          GroupSet:
            - !Ref InstanceSecurityGroup
Outputs:
  InstanceId:
    Value: !Ref Ec2Instance
```

### Comando AWS CLI para crear una pila
<a name="cloudformation-supplied-parameter-types-cli-command"></a>

El siguiente comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) crea una pila basada en la plantilla de ejemplo. 

```
aws cloudformation create-stack --stack-name MyStack \
  --template-body file://sampletemplate.json \
  --parameters \
ParameterKey="VpcId",ParameterValue="vpc-a123baa3" \
ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e" \
ParameterKey="KeyName",ParameterValue="MyKeyName" \
ParameterKey="AMIId",ParameterValue="MyParameterKey"
```

Para utilizar un tipo de parámetro que acepte una lista de cadenas, por ejemplo `List<AWS::EC2::Subnet::Id>`, debe evitar las comas del interior del `ParameterValue` con una doble barra invertida, como se muestra en el siguiente ejemplo.

```
--parameters ParameterKey="SubnetIDs",ParameterValue="subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0"
```

## Consideraciones
<a name="cloudformation-supplied-parameter-types-considerations"></a>

Recomendamos que use referencias dinámicas para restringir el acceso a las definiciones de configuración confidenciales, como las credenciales de terceros. Para obtener más información, consulte [Obtención de valores almacenados en otros servicios con referencias dinámicas](dynamic-references.md).

Si quiere permitir a los usuarios de la plantilla especificar valores de distintas Cuentas de AWS, no utilice tipos de parámetros específicos de AWS. En su lugar, defina los parámetros de tipo `String` o `CommaDelimitedList`. 

Hay algunas cosas que se deben tener en cuenta con los tipos de parámetros de Systems Manager:
+ Puede ver los valores resueltos de los parámetros [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-stacks.html) en la pestaña **Parámetros** de la pila de la consola o mediante la ejecución de o [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-change-set.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/describe-change-set.html). Tenga en cuenta que estos valores se establecen al crearse o actualizarse la pila, por lo que pueden diferir de los valores más recientes del Almacén de parámetros.
+ En el caso de las actualizaciones de pilas, si se utiliza la opción **Usar un valor existente** (o se establece `UsePreviousValue` como verdadero), significa que se quiere seguir utilizando la misma clave del Almacén de parámetros, no su valor. CloudFormation siempre recupera el valor más reciente.
+ Si especifica cualquier valor permitido u otras restricciones, CloudFormation los valida con las claves de parámetros que especifique, pero no con sus valores. Debe validar los valores en el propio Almacén de parámetros.
+ Al crear o actualizar pilas y crear conjuntos de cambios, CloudFormation usa los valores que existan en al Almacén de parámetros en ese momento. Si un parámetro especificado no existe en el Almacén de parámetros con la Cuenta de AWS del intermediario, CloudFormation devuelve un error de validación.
+ Al ejecutar un conjunto de cambios, CloudFormation usa los valores que es especifican en el conjunto de cambios. Debe revisar estos valores antes de ejecutar el conjunto de cambios porque pueden cambiar en el almacén de parámetros entre el momento de la creación del conjunto de cambios y su ejecución.
+ Para los parámetros almacenados en el mismo Cuenta de AWS, debe proporcionar el nombre del parámetro. Para los parámetros del almacén de parámetros compartidos por otra Cuenta de AWS, debe proporcionar el ARN completo del parámetro.

## Tipos de parámetros específicos de AWS compatibles
<a name="aws-specific-parameter-types-supported"></a>

CloudFormation es compatible con los siguientes tipos específicos de AWS:

`AWS::EC2::AvailabilityZone::Name`  
Una zona de disponibilidad, como por ejemplo `us-west-2a`.

`AWS::EC2::Image::Id`  
Un ID de imagen de Amazon EC2, como por ejemplo `ami-0ff8a91507f77f867`. Tenga en cuenta que la consola de CloudFormation no muestra una lista desplegable de valores para este tipo de parámetro.

`AWS::EC2::Instance::Id`  
Un ID de instancia Amazon EC2, como por ejemplo `i-1e731a32`.

`AWS::EC2::KeyPair::KeyName`  
Un nombre del par de claves de Amazon EC2.

`AWS::EC2::SecurityGroup::GroupName`  
Un nombre del grupo de seguridad de VPC predeterminado; por ejemplo, `my-sg-abc`.

`AWS::EC2::SecurityGroup::Id`  
Un ID de grupo de seguridad, como por ejemplo `sg-a123fd85`.

`AWS::EC2::Subnet::Id`  
Un ID de subred, como por ejemplo `subnet-123a351e`.

`AWS::EC2::Volume::Id`  
Un ID de volumen de Amazon EBS, como por ejemplo `vol-3cdd3f56`.

`AWS::EC2::VPC::Id`  
Un ID de VPC, como por ejemplo `vpc-a123baa3`.

`AWS::Route53::HostedZone::Id`  
Un ID de zona alojada de Amazon Route 53, como por ejemplo `Z23YXV4OVPL04A`.

`List<AWS::EC2::AvailabilityZone::Name>`  
Una matriz de las zonas de disponibilidad de una región, como por ejemplo `us-west-2a, us-west-2b`.

`List<AWS::EC2::Image::Id>`  
Una matriz de ID de imagen de Amazon EC2, como por ejemplo `ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c`. Tenga en cuenta que la consola de CloudFormation no muestra una lista desplegable de valores para este tipo de parámetro.

`List<AWS::EC2::Instance::Id>`  
Una matriz de ID de instancia Amazon EC2, como por ejemplo `i-1e731a32, i-1e731a34`.

`List<AWS::EC2::SecurityGroup::GroupName>`  
Una matriz de los nombres de los grupos de seguridad de VPC predeterminados; por ejemplo, `my-sg-abc, my-sg-def`.

`List<AWS::EC2::SecurityGroup::Id>`  
Una matriz de los ID de grupos de seguridad, como por ejemplo `sg-a123fd85, sg-b456fd85`.

`List<AWS::EC2::Subnet::Id>`  
Una matriz de los IDs de subred, como por ejemplo `subnet-123a351e, subnet-456b351e`.

`List<AWS::EC2::Volume::Id>`  
Una matriz de ID de volumen de Amazon EBS, como por ejemplo `vol-3cdd3f56, vol-4cdd3f56`.

`List<AWS::EC2::VPC::Id>`  
Una matriz de los ID de VPC, como por ejemplo `vpc-a123baa3, vpc-b456baa3`.

`List<AWS::Route53::HostedZone::Id>`  
Una matriz de ID de zonas alojadas de Amazon Route 53, como por ejemplo `Z23YXV4OVPL04A, Z23YXV4OVPL04B`.

## Tipos de parámetros de Systems Manager admitidos
<a name="systems-manager-parameter-types-supported"></a>

CloudFormation admite los siguientes tipos de parámetros de Systems Manager:

`AWS::SSM::Parameter::Name`  
El nombre de una clave de parámetro de Systems Manager. Utilice este tipo de parámetro únicamente para comprobar que existe un parámetro obligatorio. CloudFormation no recuperará el valor real asociado con el parámetro. 

`AWS::SSM::Parameter::Value<String>`  
Un parámetro de Systems Manager cuyo valor es una cadena. Esto corresponde al tipo de parámetro `String` en Parameter Store.

`AWS::SSM::Parameter::Value<List<String>>` o `AWS::SSM::Parameter::Value<CommaDelimitedList>`  
Un parámetro de Administrador de sistemas cuyo valor es una lista de cadenas. Esto corresponde al tipo de parámetro `StringList` en Parameter Store.

`AWS::SSM::Parameter::Value<AWS-specific parameter type>`  
Un parámetro de Systems Manager cuyo valor es un tipo de parámetro específico de AWS.   
Por ejemplo, lo siguiente especifica el tipo `AWS::EC2::KeyPair::KeyName`:  
+ `AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>`

`AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>`  
Un parámetro de Systems Manager cuyo valor es una lista de tipos de parámetros específicos de AWS.   
Por ejemplo, lo siguiente especifica una lista de tipos `AWS::EC2::KeyPair::KeyName`:  
+ `AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>`

## Tipos de parámetros de Systems Manager no admitidos
<a name="systems-manager-parameter-types-unsupported"></a>

CloudFormation no admite los siguientes tipos de parámetros de Systems Manager:
+ Listas de tipos de parámetros de Systems Manager; por ejemplo: `List<AWS::SSM::Parameter::Value<String>>`

Además, CloudFormation no es compatible con la definición de parámetros de plantillas como tipos de parámetros de Systems Manager `SecureString`. Sin embargo, también puede especificar cadenas seguras como *valores* de parámetros para algunos recursos. Para obtener más información, consulte [Obtención de valores almacenados en otros servicios con referencias dinámicas](dynamic-references.md).