

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).

# Referencia de scripts auxiliares de CloudFormation
<a name="cfn-helper-scripts-reference"></a>

CloudFormation proporciona los siguientes scripts auxiliares de Python que puede utilizar para instalar software e iniciar servicios en una instancia de Amazon EC2 que cree como parte de la pila:
+  [cfn-init](cfn-init.md): se utiliza para recuperar e interpretar los metadatos de los recursos, instalar paquetes, crear archivos e iniciar servicios.
+  [cfn-signal](cfn-signal.md): se utiliza para señalizar con `CreationPolicy` o `WaitCondition`, de modo que se puedan sincronizar otros recursos de la pila cuando esté listo el recurso o la aplicación de requisitos previos.
+  [cfn-get-metadata](cfn-get-metadata.md): se utiliza para recuperar los metadatos de un recurso o de la ruta a una clave específica.
+  [cfn-hup](cfn-hup.md): se utiliza para comprobar si hay actualizaciones de metadatos y ejecutar enlaces personalizados cuando se detectan cambios.

Los scripts se llaman directamente desde la plantilla. Los scripts funcionan junto con los metadatos de los recursos que están definidos en la misma plantilla. Los scripts se ejecutan en la instancia Amazon EC2 durante el proceso de creación de la pila.

**nota**  
Los scripts no se ejecutan de forma predeterminada. Debe incluir llamadas en la plantilla para ejecutar scripts auxiliares específicos.

**Topics**
+ [Imágenes de AMI de Amazon Linux](#cfn-helper-scripts-reference-amazon-amis)
+ [Descarga de paquetes para otras plataformas](#cfn-helper-scripts-reference-downloads)
+ [Permisos para los scripts auxiliares](#cfn-helper-scripts-reference-permissions)
+ [Uso de la versión más reciente](#cfn-helper-scripts-reference-latest-version)
+ [cfn-init](cfn-init.md)
+ [cfn-signal](cfn-signal.md)
+ [cfn-get-metadata](cfn-get-metadata.md)
+ [cfn-hup](cfn-hup.md)

## Imágenes de AMI de Amazon Linux
<a name="cfn-helper-scripts-reference-amazon-amis"></a>

Los scripts auxiliares de CloudFormation están preinstalados en las imágenes de AMI de Amazon Linux que tienen instalados scripts de arranque.
+ En la última versión de AMI de Amazon Linux, los scripts están instalados en `/opt/aws/bin`.
+ En versiones anteriores de la AMI de Amazon Linux, el paquete `aws-cfn-bootstrap` que contiene los scripts se encuentra en el repositorio Yum.

**nota**  
Los scripts auxiliares se preinstalaron en las últimas versiones de la AMI de Amazon Linux y no en las AMI optimizadas, como la imagen optimizada de ECS que usa Amazon Linux como base.

## Descarga de paquetes para otras plataformas
<a name="cfn-helper-scripts-reference-downloads"></a>

<a name="cfn-helper-scripts-reference-downloads"></a>Para las distribuciones de Linux o Unix que no sean imágenes de AMI de Amazon Linux y para Microsoft Windows (2008 o posterior), puede descargar el paquete `aws-cfn-bootstrap`.

**nota**  
Las versiones 2.0–1 y superiores de los scripts auxiliares son compatibles con Python 3.4 y superior. Si necesita scripts auxiliares que sean compatibles con una versión anterior de Python, consulte [Historial de versiones de scripts auxiliares de CloudFormation 1.4](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/releasehistory-aws-cfn-bootstrap.html#releasehistory-aws-cfn-bootstrap-v1).


| Formato de archivo | Descargar URL | 
| --- | --- | 
|  TAR.GZ  |  [ https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz](https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz) Use el pip de Python para instalar `tar.gz`. Para completar la instalación de Ubuntu, debe crear un symlink: `ln -s /<path-to-extracted-tar>/aws-cfn-bootstrap-2.0/init/ubuntu/cfn-hup /etc/init.d/cfn-hup`  | 
|  ZIP  |  [ https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.zip](https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.zip)  | 
|  EXE  |  Windows de 32 bits: [ https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.exe](https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.exe)  Windows de 64 bits: [ https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-win64-latest.exe](https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-win64-latest.exe)  | 

## Permisos para los scripts auxiliares
<a name="cfn-helper-scripts-reference-permissions"></a>

De forma predeterminada, los scripts auxiliares no requieren credenciales, por lo que no es necesario utilizar las opciones `--access-key`, `--secret-key`, `--role` ni `--credential-file`. Sin embargo, si no se especifican credenciales, CloudFormation comprueba la pertenencia a la pila y limita el ámbito de la llamada a la pila al que pertenece a la instancia.

Si decide especificar una opción, le recomendamos que solo especifique una de las siguientes:
+ `--role`
+ `--credential-file`
+ `--access-key` junto con las `--secret-key`

Si especifica una opción, tenga en cuenta los permisos que requieren los distintos scripts auxiliares:
+ `cfn-signal` requiere `cloudformation:SignalResource`
+ El resto de los scripts auxiliares requieren `cloudformation:DescribeStackResource`

Para obtener más información sobre el uso de claves de contexto de condición y acciones específicas de CloudFormation en las políticas de IAM, consulte [Control del acceso a CloudFormation con AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/control-access-with-iam.html) en la *Guía del usuario de AWS CloudFormation*.

## Uso de la versión más reciente
<a name="cfn-helper-scripts-reference-latest-version"></a>

Los scripts auxiliares se actualizan periódicamente. Si utiliza los scripts auxiliares, asegúrese de que las instancias que lance utilicen la versión más reciente de los scripts:
+ Incluya el siguiente comando en la propiedad `UserData` de la plantilla antes de llamar a los scripts. Este comando garantiza que obtiene la última versión:

  `yum install -y aws-cfn-bootstrap`
+ Si no incluye el comando `yum install` y utiliza los scripts `cfn-init`, `cfn-signal` o `cfn-get-metadata`, tendrá que actualizar manualmente los scripts de cada instancia Linux Amazon EC2 mediante este comando:

  `sudo yum install -y aws-cfn-bootstrap`
**nota**  
La ejecución de `sudo yum install -y aws-cfn-bootstrap` instala los scripts auxiliares desde el repositorio de `yum`.
+ Si no incluye el comando `yum install` y utiliza el script `cfn-hup`, tendrá que actualizar manualmente el script de cada instancia Linux Amazon EC2 mediante estos comandos:

  `sudo yum install -y aws-cfn-bootstrap`

  `sudo /sbin/service cfn-hup restart`
**nota**  
La ejecución de `sudo yum install -y aws-cfn-bootstrap` instala los scripts auxiliares desde el repositorio de `yum`.
+ Si utiliza el código fuente para los scripts para trabajar con otra versión de Linux o una plataforma diferente, y ha creado su propio almacén de confianza de certificados, también tendrá que mantener el almacén de confianza actualizado.

Para ver el historial de versiones del paquete `aws-cfn-bootstrap`, consulte [Historial de lanzamiento para los scripts auxiliares de CloudFormation](releasehistory-aws-cfn-bootstrap.md).

# cfn-init
<a name="cfn-init"></a>

En una plantilla de CloudFormation, puede utilizar `AWS::CloudFormation::Init` en la sección `Metadata` de un recurso de Amazon EC2 para definir las tareas de inicialización. Para obtener más información, consulte [`AWS::CloudFormation::Init`](aws-resource-init.md).

El script auxiliar `cfn-init` lee metadatos de plantilla de la clave `AWS::CloudFormation::Init` y actúa de forma acorde para lo siguiente:
+ Obtener y analizar metadatos de CloudFormation
+ Instalar paquetes
+ Escribir archivos en el disco
+ Habilitar/deshabilitar e iniciar/detener servicios

El script auxiliar `cfn-init` se suele ejecutar a partir de los datos de usuario de una instancia de Amazon EC2 o de una plantilla de lanzamiento.

Si es la primera vez que utiliza scripts auxiliares, le recomendamos que complete primero el tutorial [Implementación de aplicaciones en Amazon EC2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html) de la *Guía del usuario de AWS CloudFormation*.

**Topics**
+ [Sintaxis](#cfn-init-Syntax)
+ [Opciones](#cfn-init-options)
+ [Ejemplos](#cfn-init-examples)
+ [Recursos relacionados](#cfn-init-related-resources)

**nota**  
Si utiliza `cfn-init` para actualizar un archivo existente, crea una copia de seguridad del archivo original en el mismo directorio con una extensión .bak. Por ejemplo, si actualiza `/path/to/file_name`, la acción produce dos archivos: `/path/to/file_name.bak` incluye el contenido original del archivo y `/path/to/file_name` incluye los contenidos actualizados.

## Sintaxis
<a name="cfn-init-Syntax"></a>

```
cfn-init --stack|-s stack.name.or.id \
         --resource|-r logical.resource.id \
         --region region \
         --access-key access.key \
         --secret-key secret.key \
         --role rolename \
         --credential-file|-f credential.file \
         --configsets|-c config.sets \
         --url|-u service.url \
         --http-proxy HTTP.proxy \
         --https-proxy HTTPS.proxy \
         --verbose|-v
```

**nota**  
`cfn-init` no requiere credenciales, por lo que no tiene que usar las opciones `--access-key`, `--secret-key`, `--role` ni `--credential-file`. Sin embargo, si no se especifican credenciales, CloudFormation comprueba la pertenencia a la pila y limita el ámbito de la llamada a la pila al que pertenece a la instancia. Para obtener más información, consulte [Permisos para los scripts auxiliares](cfn-helper-scripts-reference.md#cfn-helper-scripts-reference-permissions).

## Opciones
<a name="cfn-init-options"></a>


| Nombre | Descripción | Obligatorio | 
| --- | --- | --- | 
|   `-s, --stack`   |  Nombre o ID de la pila. *Tipo:* cadena *Valor predeterminado*: Ninguno *Ejemplo de*: `--stack { "Ref" : "AWS::StackName" },`  |  Sí  | 
|   `-r, --resource `   |  El ID de recurso lógico del recurso que contiene los metadatos. *Tipo:* cadena *Ejemplo de*: `--resource WebServerHost`  |  Sí  | 
|   `--region`   |  El punto de enlace regional de CloudFormation que se debe utilizar. *Tipo:* cadena *Valor predeterminado*: `us-east-1` *Ejemplo*:`--region ", { "Ref" : "AWS::Region" },`  |  No  | 
|   `--access-key`   |  Clave de acceso de AWS para una cuenta con permiso para llamar a `DescribeStackResource` en CloudFormation. El parámetro del archivo de credenciales sustituye a este parámetro. *Tipo:* cadena  |  No  | 
|   `--secret-key`   |  Clave de acceso secreta de AWS que corresponde a la clave de acceso de AWS especificada. *Tipo:* cadena  |  No  | 
|   `--role`   |  El nombre de un rol de IAM asociado a la instancia. *Tipo:* cadena Condición: El parámetro del archivo de credenciales sustituye a este parámetro.  |  No  | 
|   `-f, --credential-file`   |  Un archivo que contiene una clave de acceso secreta y una clave de acceso. El parámetro del archivo de credenciales sustituye a los parámetros --role, --access-key y --secret-key. *Tipo:* cadena  |  No  | 
|   `-c, --configsets`   |  Una lista separada por comas de configsets para ejecutar (en orden). *Tipo:* cadena *Valor predeterminado*: `default`  |  No  | 
|   `-u, --url`   |  El punto de enlace de CloudFormation que se debe usar. *Tipo:* cadena  |  No  | 
|  `--http-proxy`  |  Un proxy HTTP (no SSL). Use el siguiente formato: `http://user:password@host:port` *Tipo:* cadena  |  No  | 
|  `--https-proxy`  |  Un proxy HTTPS. Use el siguiente formato: `https://user:password@host:port` *Tipo:* cadena  |  No  | 
|  `-v, --verbose`  |  Resultados detallados. Esto es útil para la depuración de casos en los que se produce un error en la inicialización de `cfn-init`.  Para depurar eventos de inicialización, debe activar `DisableRollback`. A continuación, puede utilizar SSH en la consola y leer los registros en `/var/log/cfn-init.log`. Para obtener más información, consulte [Elija cómo gestionar los errores al aprovisionar recursos](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stack-failure-options.html) en la *Guía del usuario de AWS CloudFormation*.   |  No  | 
| `-h, --help` | Muestra un mensaje de ayuda y sale. |  No | 

## Ejemplos
<a name="cfn-init-examples"></a>

### Ejemplo de Amazon Linux
<a name="w2aac32c27c21b3"></a>

En los siguientes ejemplos se muestra la propiedad `UserData` de una instancia de EC2, que ejecuta el configset `InstallAndRun` asociado al recurso `WebServerInstance`.

Para incluir la última versión, agregue `yum install -y aws-cfn-bootstrap` a `UserData`.

#### JSON
<a name="cfn-init-example.json"></a>

Propiedad `UserData` que usa la función `Fn::Join` intrínseca.

```
{
    "UserData": {
        "Fn::Base64": {
            "Fn::Join": [
                "",
                [
                    "#!/bin/bash -xe\n",
                    "",
                    "yum install -y aws-cfn-bootstrap",
                    "/opt/aws/bin/cfn-init -v ",
                    "         --stack ",
                    {
                        "Ref": "AWS::StackName"
                    },
                    "         --resource WebServerInstance ",
                    "         --configsets InstallAndRun ",
                    "         --region ",
                    {
                        "Ref": "AWS::Region"
                    },
                    "\n"
                ]
            ]
        }
    }
}
```

#### YAML
<a name="cfn-init-example.yaml"></a>

Propiedad `UserData` que usa la función `Fn::Sub` intrínseca.

```
UserData:
  Fn::Base64: !Sub |
    #!/bin/bash -xe
    yum update -y aws-cfn-bootstrap
    # Install the files and packages from the metadata
    /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource WebServerInstance --configsets InstallAndRun --region ${AWS::Region}
```

## Recursos relacionados
<a name="cfn-init-related-resources"></a>

Para ver un tutorial con una plantilla de ejemplo, consulte [Implementación de aplicaciones en Amazon EC2](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html) en la *Guía del usuario de AWS CloudFormation*.

Para ver un ejemplo de Windows, consulte [Arranque de pilas de CloudFormation basadas en Windows](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-windows-stacks-bootstrapping.html) en la *Guía del usuario de AWS CloudFormation*.

También puede visitar nuestro repositorio de GitHub para descargar las [plantillas de ejemplo](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html#sample-templates) que usan `cfn-init`, entre las que se incluyen las siguientes.
+  [InstanceWithCfnInit.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/EC2/InstanceWithCfnInit.yaml) 
+  [AutoScalingRollingUpdates.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/AutoScaling/AutoScalingRollingUpdates.yaml) 

Para ver ejemplos adicionales de plantillas de pila LAMP que utilicen `cfn-init`, consulte [ec2-lamp-server](https://github.com/aws-samples/ec2-lamp-server) en el sitio web de GitHub.

# cfn-signal
<a name="cfn-signal"></a>

El script auxiliar `cfn-signal` envía una señal a CloudFormation para indicar si se han creado o actualizado correctamente instancias de Amazon EC2. Si instala y configura aplicaciones de software en instancias, puede enviar una señal a CloudFormation cuando dichas aplicaciones de software estén listas.

Debe usar el script `cfn-signal` junto con un [Atributo `CreationPolicy`](aws-attribute-creationpolicy.md) o un [`UpdatePolicy`Atributo](aws-attribute-updatepolicy.md) con `WaitOnResourceSignals` para los grupos de Amazon EC2 Auto Scaling. Cuando CloudFormation crea o actualiza recursos con esas políticas, suspende el trabajo en la pila hasta que el recurso reciba el número necesario de señales o hasta que se supere el periodo de tiempo de espera. Para cada señal válida que CloudFormation recibe, publica las señales en los eventos de la pila para que pueda hacer un seguimiento de cada una de ellas.

**Topics**
+ [Sintaxis para la señalización de recursos (recomendado)](#w2aac32c29b9)
+ [Sintaxis para identificador de condición de espera](#cfn-signal-Syntaxwaitcondition)
+ [Opciones](#cfn-signal-options)
+ [Ejemplos](#cfn-signal-examples)
+ [Recursos relacionados](#cfn-signal-related-resources)

## Sintaxis para la señalización de recursos (recomendado)
<a name="w2aac32c29b9"></a>

Si desea señalar recursos de CloudFormation, utilice la siguiente sintaxis.

```
cfn-signal --success|-s signal.to.send \
        --access-key access.key \
        --credential-file|-f credential.file \
        --exit-code|-e exit.code \
        --http-proxy HTTP.proxy \
        --https-proxy HTTPS.proxy \
        --id|-i unique.id \
        --region AWS.region \
        --resource resource.logical.ID \
        --role IAM.role.name \
        --secret-key secret.key \
        --stack stack.name.or.stack.ID \
        --url CloudFormation.endpoint
```

**nota**  
`cfn-signal` no requiere credenciales, por lo que no tiene que usar las opciones `--access-key`, `--secret-key`, `--role` ni `--credential-file`. Sin embargo, si no se especifican credenciales, CloudFormation comprueba la pertenencia a la pila y limita el ámbito de la llamada a la pila al que pertenece a la instancia. Para obtener más información, consulte [Permisos para los scripts auxiliares](cfn-helper-scripts-reference.md#cfn-helper-scripts-reference-permissions).

## Sintaxis para identificador de condición de espera
<a name="cfn-signal-Syntaxwaitcondition"></a>

Si desea señalar un identificador de condición de espera, utilice la siguiente sintaxis.

```
cfn-signal --success|-s signal.to.send \
        --reason|-r resource.status.reason \
        --data|-d data \
        --id|-i unique.id \
        --exit-code|-e exit.code \
        waitconditionhandle.url
```

## Opciones
<a name="cfn-signal-options"></a>

Las opciones que puede utilizar dependerán de si está señalando una política de creación o un identificador de condición de espera. Algunas opciones que se aplican a una política de creación podrían no aplicarse a un identificador de condición de espera.


| Nombre | Descripción | Obligatorio | 
| --- | --- | --- | 
|  `--access-key` (señalización de recursos solamente)  |  Clave de acceso de AWS para una cuenta con permiso para llamar a la API `SignalResource ` de CloudFormation. El parámetro del archivo de credenciales sustituye a este parámetro. *Tipo:* cadena  |  No  | 
|  `-d, --data` (identificador de condición de espera solamente)  |  Datos para enviar de vuelta con el `waitConditionHandle`. Cambia por defecto a en blanco. *Tipo:* cadena *Valor predeterminado*: en blanco  |  No  | 
|  `-e, --exit-code`   |  El código de error de un proceso que puede utilizarse para determinar se realizó correctamente o dio un error. Si se especifica, se pasa por alto la opción `--success`. *Tipo:* cadena *Ejemplos*: `-e $?` (para Linux), `-e %ERRORLEVEL%` (para Windows cmd.exe) y `-e $lastexitcode` (para Windows PowerShell).  |  No  | 
|  `-f, --credential-file` (señalización de recursos solamente)  |  Un archivo que contiene una clave de acceso secreta y una clave de acceso. El parámetro del archivo de credenciales sustituye a los parámetros --role, --access-key y --secret-key. *Tipo:* cadena  |  No  | 
|  `--http-proxy`  |  Un proxy HTTP (no SSL). Use el siguiente formato: `http://user:password@host:port` *Tipo:* cadena  |  No  | 
|  `--https-proxy`  |  Un proxy HTTPS. Use el siguiente formato: `https://user:password@host:port` *Tipo:* cadena  |  No  | 
|  `-i, --id`  |  El ID único para enviar. *Tipo:* cadena *Valor predeterminado*: El ID de la instancia Amazon EC2. Si no se puede resolver el ID, se devuelve el nombre de dominio completo.  |  No  | 
|  `-r, --reason ` (identificador de condición de espera solamente)  |  Una razón para el estado del evento del recurso (actualmente solo se utiliza en caso de error) - cambia por defecto a “Configuration failed” (Error de configuración) si el éxito es falso. *Tipo:* cadena  |  No  | 
| --region (señalización de recursos solamente) |  El punto de enlace regional de CloudFormation que se debe utilizar. *Tipo:* cadena *Valor predeterminado*: `us-east-1`  |  No  | 
| --resource (señalización de recursos solamente) |  El ID lógico del recurso que contiene la política de creaciones que desea señalar. *Tipo:* cadena  |  Sí  | 
|  `--role` (señalización de recursos solamente)  |  El nombre de un rol de IAM asociado a la instancia. *Tipo:* cadena Condición: El parámetro del archivo de credenciales sustituye a este parámetro.  |  No  | 
|  `-s, --success`   |  Si es true, señal `SUCCESS`, de lo contrario `FAILURE`. *Tipo*: Booleano *Valor predeterminado*: `true`  |  No  | 
|  `--secret-key` (señalización de recursos solamente)  |  Clave de acceso secreta de AWS que corresponde a la clave de acceso de AWS especificada. *Tipo:* cadena  |  No  | 
|  `--stack` (señalización de recursos solamente)  |  El nombre de la pila o ID de la pila que contiene el recurso que desea señalar. *Tipo:* cadena  |  Sí  | 
| -u, --url (señalización de recursos solamente) |  El punto de enlace de CloudFormation que se debe usar. *Tipo:* cadena  |  No  | 
|  `waitconditionhandle.url` (identificador de condición de espera solamente)  |  Una URL prefirmada que puede utilizar para señalar el éxito o el error de una asociada `WaitCondition` *Tipo:* cadena  |  Sí  | 

## Ejemplos
<a name="cfn-signal-examples"></a>

### Ejemplo de Amazon Linux
<a name="w2aac32c29c15b3"></a>

Un patrón de uso común consiste en utilizar `cfn-init` y `cfn-signal` a la vez. La llamada a `cfn-signal` usa el estado de la devolución de la llamada a `cfn-init` (utilizando el constructo del intérprete de comandos \$1?). Si no se puede instalar la aplicación, no se creará la instancia y se restaurará la pila.

#### JSON
<a name="cfn-signal-example.json"></a>

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Simple EC2 instance",
    "Resources": {
        "MyInstance": {
            "Type": "AWS::EC2::Instance",
            "Metadata": {
                "AWS::CloudFormation::Init": {
                    "config": {
                        "files": {
                            "/tmp/test.txt": {
                                "content": "Hello world!",
                                "mode": "000755",
                                "owner": "root",
                                "group": "root"
                            }
                        }
                    }
                }
            },
            "Properties": {
                "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}",
                "InstanceType": "t2.micro",
                "UserData": {
                    "Fn::Base64": {
                        "Fn::Join": [
                            "",
                            [
                                "#!/bin/bash -x\n",
                                "# Install the files and packages from the metadata\n",
                                "yum install -y aws-cfn-bootstrap",
                                "\n",
                                "/opt/aws/bin/cfn-init -v ",
                                "         --stack ",
                                {
                                    "Ref": "AWS::StackName"
                                },
                                "         --resource MyInstance ",
                                "         --region ",
                                {
                                    "Ref": "AWS::Region"
                                },
                                "\n",
                                "# Signal the status from cfn-init\n",
                                "/opt/aws/bin/cfn-signal -e $? ",
                                "         --stack ",
                                {
                                    "Ref": "AWS::StackName"
                                },
                                "         --resource MyInstance ",
                                "         --region ",
                                {
                                    "Ref": "AWS::Region"
                                },
                                "\n"
                            ]
                        ]
                    }
                }
            },
            "CreationPolicy": {
                "ResourceSignal": {
                    "Timeout": "PT5M"
                }
            }
        }
    }
}
```

#### YAML
<a name="cfn-signal-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Description: Simple EC2 instance
Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Metadata:
      'AWS::CloudFormation::Init':
        config:
          files:
            /tmp/test.txt:
              content: Hello world!
              mode: '000755'
              owner: root
              group: root
    Properties:
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}'
      InstanceType: t2.micro
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash -x
          # Install the files and packages from the metadata
          yum install -y aws-cfn-bootstrap
          /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}
          # Signal the status from cfn-init
          /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}
    CreationPolicy:
      ResourceSignal:
        Timeout: PT5M
```

## Recursos relacionados
<a name="cfn-signal-related-resources"></a>

También puede visitar nuestro repositorio de GitHub para descargar las [plantillas de ejemplo](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html#sample-templates) que usan `cfn-signal`, entre las que se incluyen las siguientes.
+  [InstanceWithCfnInit.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/EC2/InstanceWithCfnInit.yaml) 
+  [AutoScalingRollingUpdates.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/AutoScaling/AutoScalingRollingUpdates.yaml) 

# cfn-get-metadata
<a name="cfn-get-metadata"></a>

Puede utilizar el script auxiliar `cfn-get-metadata` para recuperar un bloque de metadatos de CloudFormation e imprimirlo en una salida estándar. También puede imprimir un subárbol del bloque de metadatos si especifica una clave. Sin embargo, solo se admiten las claves de nivel superior.

**Topics**
+ [Sintaxis](#cfn-get-metadata-Syntax)
+ [Opciones](#cfn-get-metadata-options)

## Sintaxis
<a name="cfn-get-metadata-Syntax"></a>

```
cfn-get-metadata --access-key access.key \
                 --secret-key secret.key \
                 --credential-file|f credential.file \
                 --key|k key \
                 --stack|-s stack.name.or.id \
                 --resource|-r logical.resource.id \
                 --role IAM.role.name \
                 --url|-u service.url \
                 --region region
```

**nota**  
`cfn-get-metadata` no requiere credenciales, por lo que no tiene que usar las opciones `--access-key`, `--secret-key`, `--role` ni `--credential-file`. Sin embargo, si no se especifican credenciales, CloudFormation comprueba la pertenencia a la pila y limita el ámbito de la llamada a la pila al que pertenece a la instancia. Para obtener más información, consulte [Permisos para los scripts auxiliares](cfn-helper-scripts-reference.md#cfn-helper-scripts-reference-permissions).

## Opciones
<a name="cfn-get-metadata-options"></a>


| Nombre | Descripción | Obligatorio | 
| --- | --- | --- | 
|   `-k, --key`   |  Para un par clave-valor, devuelve el nombre de la clave para el valor especificado. *Tipo:* cadena *Ejemplo*: En el caso de `{ "Key1": "SampleKey1", "Key2": "SampleKey2" }`, `cfn-get-metadata -k Key2` devuelve `SampleKey2`.  |  No  | 
|   `-s, --stack`   |  Nombre de la pila. *Tipo:* cadena *Valor predeterminado*: Ninguno *Ejemplo*: `-s { "Ref" : "AWS::StackName" },`  |  Sí  | 
|   `-r, --resource`   |  El ID de recurso lógico del recurso que contiene los metadatos. *Tipo:* cadena *Ejemplo*: `-r WebServerHost`  |  Sí  | 
|  `--role` (señalización de recursos solamente)  |  El nombre de un rol de IAM asociado a la instancia. *Tipo:* cadena Condición: El parámetro del archivo de credenciales sustituye a este parámetro.  |  No  | 
|   `--region`   |  La Región de la que se debe obtener la URL de CloudFormation. *Tipo:* cadena *Valor predeterminado*: Ninguno *Ejemplo*: `--region ", { "Ref" : "AWS::Region" },`  |  No  | 
|   `--access-key`   |  Clave de acceso de AWS para una cuenta con permiso para llamar a DescribeStackResource en CloudFormation. *Tipo:* cadena Condición: El parámetro del archivo de credenciales sustituye a este parámetro.  |  Condicional  | 
|   `--secret-key`   |  Clave secreta de AWS que corresponde a la clave de acceso de AWS especificada. *Tipo:* cadena Condición: El parámetro del archivo de credenciales sustituye a este parámetro.  |  Condicional  | 
|   `-f, --credential-file`   |  Un archivo que contiene una clave secreta y una clave de acceso. *Tipo:* cadena Condición: El parámetro del archivo de credenciales sustituye a los parámetros --access-key y --secret-key.  |  Condicional  | 

# cfn-hup
<a name="cfn-hup"></a>

El script auxiliar `cfn-hup` es un daemon que detecta cambios en los metadatos de recursos y ejecuta acciones especificadas por el usuario cuando se detecta un cambio. Esto le permite llevar a cabo actualizaciones de la configuración en las instancias de Amazon EC2 que se están ejecutando a través de la acción de la API `UpdateStack`.

Para obtener más información, consulte el tutorial [Actualización de una pila de CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/updating.stacks.walkthrough.html) en la *Guía del usuario de AWS CloudFormation*.

**Topics**
+ [Sintaxis](#cfn-hup-Syntax)
+ [Opciones](#cfn-hup-options)
+ [Archivo de configuración cfn-hup.conf](#cfn-hup-config-file)
+ [`hooks.conf`Archivo de configuración de la](#cfn-hup-hook-file)
+ [Directorio `hooks.d`](#cfn-hup-hooks-dir)
+ [Ejemplos](#cfn-hup-examples)
+ [Recursos relacionados](#cfn-hup-related-resources)

## Sintaxis
<a name="cfn-hup-Syntax"></a>

```
cfn-hup --config|-c config.dir \
        --no-daemon \
        --verbose|-v
```

## Opciones
<a name="cfn-hup-options"></a>


| Nombre | Descripción | Obligatorio | 
| --- | --- | --- | 
|   `--config\|-c config.dir`   |  Especifica la ruta que el script `cfn-hup` busca para los directorios `cfn-hup.conf` y `hooks.d`. En Windows, la ruta predeterminada es `system_drive\cfn`. En Linux, la ruta predeterminada es `/etc/cfn`.  |  No  | 
|   `--no-daemon`   |  Especifique esta opción para ejecutar el script `cfn-hup` una vez y salir.  |  No  | 
|   `-v, --verbose `   |  Especifique esta opción para utilizar el modo detallado.  |  No  | 

## Archivo de configuración cfn-hup.conf
<a name="cfn-hup-config-file"></a>

En el archivo `cfn-hup.conf` se almacena el nombre de la pila y las credenciales de AWS a las cuales se dirige el daemon `cfn-hup`.

El archivo `cfn-hup.conf` usa el formato siguiente:

```
[main]
stack=<stack-name-or-id>
```


| Nombre | Descripción | Obligatorio | 
| --- | --- | --- | 
|   `stack`   |  Un nombre de pila o ID. *Tipo:* cadena  |  Sí  | 
|   `credential-file`   |  Un archivo de credencial exclusivo del propietario, en el mismo formato utilizado para las herramientas de líneas de comandos. *Tipo:* cadena *Condición*: el parámetro `role` sustituye a este parámetro.  |  No  | 
|   `role`   |  El nombre de un rol de IAM asociado a la instancia. *Tipo:* cadena  |  No  | 
|   `region`   |  Nombre de la Región de AWS que contiene la pila. *Ejemplo*: us-east-2  |  No  | 
|   `umask`   |  `umask` que usa el daemon `cfn-hup`. Este valor se puede especificar con o sin 0 inicial. En ambos casos, se interpreta como un número octal (similar al comando `umask` de Linux). Este parámetro no tiene efecto en Windows. *Tipo*: número entero octal entre `0` y `0777` *Valor predeterminado*: `022`, versión 1.4–22 y superiores. El valor predeterminado `022` oculta permisos de escritura de grupo y mundiales, por lo que los archivos creados por el daemon `cfn-hup` no cuentan con permisos de escritura de grupo ni mundiales de forma predeterminada. El valor predeterminado para las versiones que comprenden de la 1.4 a la 21 y versiones anteriores es `0`, que no oculta nada.  |  No  | 
|   `interval`   |  El intervalo usado para comprobar si hay cambios en los metadatos de recursos en cuestión de minutos. *Tipo*: entero *Valor predeterminado*: `15`  |  No  | 
|   `verbose`   |  Especifica si se debe utilizar el registro detallado. *Tipo*: Booleano *Valor predeterminado*: `false`  |  No  | 

## `hooks.conf`Archivo de configuración de la
<a name="cfn-hup-hook-file"></a>

Las acciones del usuario a las que el daemon `cfn-hup` llama periódicamente se definen en el archivo de configuración `hooks.conf`. El archivo `hooks.conf` usa el *formato* siguiente:

```
[hookname]
triggers=post.add or post.update or post.remove
path=Resources.<logicalResourceId> (.Metadata or .PhysicalResourceId)(.<optionalMetadatapath>)
action=<arbitrary shell command>
runas=<runas user>
```

Cuando se ejecuta la operación, se ejecuta en una copia del entorno actual (en el que se encuentra `cfn-hup`), con `CFN_OLD_METADATA` establecido en el valor de metadatos anterior especificado por ruta y `CFN_NEW_METADATA` establecido en el valor actual.

El archivo de configuración de enlaces se carga solo al iniciarse el daemon `cfn-hup`, de manera que los nuevos enlaces necesitarán que se reinicie el daemon. Se almacena una memoria caché de los valores de metadatos anteriores en `/var/lib/cfn-hup/data/metadata_db`, pero puede eliminarla para forzar `cfn-hup` y que se ejecuten de nuevo todas las acciones `post.add`.


| Nombre | Descripción | Obligatorio | 
| --- | --- | --- | 
|   `hookname`   |  Un nombre único para este enlace. *Tipo:* cadena  |  Sí  | 
|   `triggers`   |  Una lista delimitada por comas de condiciones para detectar. *Valores válidos*: `post.add`, `post.update` o `post.remove` *Ejemplo de*: `post.add, post.update`  |  Sí  | 
|   `path`   |  La ruta al objeto de los metadatos. Admite una ruta de profundidad arbitraria dentro del bloque de metadatos.  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AWSCloudFormation/latest/TemplateReference/cfn-hup.html)  |  Sí  | 
|   `action`   |  Un comando de shell arbitrario que se ejecuta como determinado.  |  Sí  | 
|   `runas`   |  Usuario con el que ejecutar los comandos. `cfn-hup` utiliza el comando su para cambiar al usuario.  |  Sí  | 

## Directorio `hooks.d`
<a name="cfn-hup-hooks-dir"></a>

Para permitir la composición de varias aplicaciones que implementan enlaces de notificación de cambios, `cfn-hup` admite un directorio denominado `hooks.d` que se encuentra en el directorio de configuración de enlaces. Puede meter uno o varios archivos de configuración de enlaces adicionales en el directorio `hooks.d`. Los archivos de enlaces adicionales deben utilizar el mismo formato que el archivo `hooks.conf`.

El daemon `cfn-hup` analiza y carga cada archivo en este directorio. Si algún enlace del directorio `hooks.d` tiene el mismo nombre que un enlace de `hooks.conf`, los enlaces se fusionarán (es decir, `hooks.d` sobrescribirá a `hooks.conf` para cualquier valor que se especifique en ambos archivos).

## Ejemplos
<a name="cfn-hup-examples"></a>

En el siguiente ejemplo, CloudFormation desencadena el archivo de enlaces `cfn-auto-reloader.conf` cuando cambia el recurso `AWS::CloudFormation::Init` que está asociado al recurso `LaunchConfig`.

### JSON
<a name="cfn-hup-example.json"></a>

```
...
    "LaunchConfig": {
      "Type" : "AWS::AutoScaling::LaunchConfiguration",
      "Metadata" : {
        "AWS::CloudFormation::Init" : {
...
              "/etc/cfn/hooks.d/cfn-auto-reloader.conf": {
                "content": { "Fn::Join": [ "", [
                  "[cfn-auto-reloader-hook]\n",
                  "triggers=post.update\n",
                  "path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init\n",
                  "action=/opt/aws/bin/cfn-init -v ",
                          "         --stack ", { "Ref" : "AWS::StackName" },
                          "         --resource LaunchConfig ",
                          "         --configsets wordpress_install ",
                          "         --region ", { "Ref" : "AWS::Region" }, "\n",
                  "runas=root\n"
                ]]},          
                "mode"  : "000400",
                "owner" : "root",
                "group" : "root"
              }
...
```

### YAML
<a name="cfn-hup-example.yaml"></a>

```
...
  LaunchConfig:
    Type: AWS::AutoScaling::LaunchConfiguration
    Metadata:
      AWS::CloudFormation::Init:
...
            /etc/cfn/hooks.d/cfn-auto-reloader.conf:
              content: !Sub |
                [cfn-auto-reloader-hook]
                triggers=post.update
                path=Resources.LaunchConfig.Metadata.AWS::CloudFormation::Init
                action=/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource LaunchConfig --configsets wordpress_install --region ${AWS::Region}
                runas=root
              mode: "000400"
              owner: "root"
              group: "root"
...
```

## Recursos relacionados
<a name="cfn-hup-related-resources"></a>

También puede visitar nuestro repositorio de GitHub para descargar las [plantillas de ejemplo](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html#sample-templates) que usan `cfn-hup`, entre las que se incluyen las siguientes.
+  [InstanceWithCfnInit.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/EC2/InstanceWithCfnInit.yaml) 
+  [AutoScalingRollingUpdates.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/AutoScaling/AutoScalingRollingUpdates.yaml) 