cfn-hup - AWS CloudFormation

cfn-hup

Descripción

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.

Sintaxis

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

Opciones

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

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

El archivo cfn-hup.conf utiliza el siguiente formato:

[main] stack=<stack-name-or-id>
Nombre Descripción Obligatorio

stack

Un nombre de pila o ID.

Tipo: cadena

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 utilizada por 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 de cfn-hup no cuentan con permisos de escritura para grupos 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

Archivo de configuración hooks.conf

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

[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 ruta anterior y CFN_NEW_METADATA establecido en el valor actual.

El archivo de configuración de enlaces se carga solo al iniciarse el daemon de cfn-hup, de manera que nuevos enlaces requieran reiniciar el daemon. Se almacena una memoria caché de los valores de metadatos anteriores en /var/lib/cfn-hup/data/metadata_db— y se puede eliminar esta memoria caché para forzar a cfn-hup a ejecutar de nuevo todas las acciones post.add.

Nombre Descripción Obligatorio

hookname

Un nombre único para este enlace.

Tipo: cadena

triggers

Una lista delimitada por comas de condiciones para detectar.

Valores válidos: post.add, post.update o post.remove

Ejemplo: post.add, post.update

path

La ruta al objeto de los metadatos. Admite una ruta de profundidad arbitraria dentro del bloque de metadatos.

Opciones de formato de ruta
  • Resources.<LogicalResourceId>:— monitorea la hora de la última actualización del recurso que se desencadena con cualquier cambio en el recurso.

  • Recursos.<LogicalResourceId>.PhysicalResourceId:— monitorea el ID lógico del recurso que se desencadena solo cuando cambia la identidad del recurso asociado (como una nueva instancia de EC2).

  • Resources.<LogicalResourceId>Metadata(.ruta opcional):— monitorea los metadatos de un recurso para comprobar si se producen cambios (es posible especificar una ruta secundaria de metadatos en un nivel de profundidad arbitrario para monitorear valores específicos).

action

Un comando de shell arbitrario que se ejecuta como determinado.

runas

Un usuario para ejecutar los comandos como. Cfn-hup utiliza el comando su para cambiar al usuario.

Directorio hooks.d

Para permitir la composición de varias aplicaciones que despliegan 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 colocar 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 cualquier enlace en el directorio hooks.d tiene el mismo nombre que un enlace en hooks.conf, los enlaces se fusionarán (es decir, hooks.d sobrescribirá hooks.conf para cualquier valor especificado por ambos archivos).

Ejemplo

En el siguiente fragmento de código de plantilla, CloudFormation desencadena el archivo de enlaces cfn-auto-reloader.conf cuando cambia el recurso AWS::CloudFormation::Init que se asocia al recurso LaunchConfig.

JSON

... "LaunchConfig": { "Type" : "AWS::AutoScaling::LaunchConfiguration", "Metadata" : { "QBVersion": {"Ref": "paramQBVersion"}, "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

... LaunchConfig: Type: "AWS::AutoScaling::LaunchConfiguration" Metadata: QBVersion: !Ref paramQBVersion 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" ...

Ejemplo adicional

Para ver una plantilla de ejemplo, consulte Implementación de aplicaciones en Amazon EC2 con AWS CloudFormation.