

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

# 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.<br />*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.<br />*Tipo:* cadena<br />*Condición*: el parámetro `role` sustituye a este parámetro. | No | 
|  `role`  | El nombre de un rol de IAM asociado a la instancia.<br />*Tipo:* cadena | No | 
|  `region`  | Nombre de la Región de AWS que contiene la pila.<br />*Ejemplo*: us-east-2 | No | 
|  `umask`  | `umask` que usa el daemon `cfn-hup`.<br />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.<br />*Tipo*: número entero octal entre `0` y `0777`<br />*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.<br />*Tipo*: entero<br />*Valor predeterminado*: `15` | No | 
|  `verbose`  | Especifica si se debe utilizar el registro detallado.<br />*Tipo*: Booleano<br />*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.<br />*Tipo:* cadena | Sí | 
|  `triggers`  | Una lista delimitada por comas de condiciones para detectar.<br />*Valores válidos*: `post.add`, `post.update` o `post.remove`<br />*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.<br />[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) 