cfn-signal - AWS CloudFormation

cfn-signal

Descripción

El script auxiliar de cfn-signal envía una señal a CloudFormation para indicar si se han creado o actualizado correctamente instancias 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.

Puede utilizar el script cfn-signal junto con una CreationPolicy o un grupo de Auto Scaling con una política de actualización de WaitOnResourceSignals. Cuando CloudFormation crea o actualiza recursos con esas políticas, suspende el trabajo en la pila hasta que el recurso recibe el número de señales necesarias o hasta que se supera el periodo de tiempo de espera. Para cada señal válida que CloudFormation recibe, CloudFormation publica las señales en los eventos de la pila para que pueda realizar un seguimiento de cada señal. Para un tutorial que utilice una política de creación y cfn-signal, consulte Implementación de aplicaciones en Amazon EC2 con AWS CloudFormation.

nota

cfn-signal no requiere credenciales, por lo que no tiene que utilizar las opciones --access-key, --secret-key, --role o --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.

Sintaxis para la señalización de recursos (recomendado)

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 AWS CloudFormation.endpoint

Sintaxis para identificador de condición de espera

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

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 CloudFormation. El parámetro del archivo de credenciales sustituye a este parámetro.

Type: String

No

-d, --data (identificador de condición de espera solamente)

Datos para enviar de vuelta con el waitConditionHandle. Cambia por defecto a en blanco.

Type: String

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.

Type: String

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.

Type: String

No

--http-proxy

Un proxy HTTP (no SSL). Use el siguiente formato http://user:password@host:port

Type: String

No

--https-proxy

Un proxy HTTPS. Use el siguiente formato https://user:password@host:port

Type: String

No

-i, --id

El ID único para enviar.

Type: String

Valor predeterminado: El ID de la instancia Amazon EC2. Si no se puede resolver el ID, se devuelve el Nombre de dominio completo (FQDN).

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' si el éxito es falso.

Type: String

No

--region (señalización de recursos solamente)

El punto de enlace regional de CloudFormation que se debe utilizar.

Type: String

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.

Type: String

--role (señalización de recursos solamente)

El nombre de un rol de IAM asociado a la instancia.

Type: String

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.

Type: Boolean

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.

Type: String

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.

Type: String

-u, --url (señalización de recursos solamente)

El punto de enlace de CloudFormation que se debe usar.

Type: String

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 WaitCondition asociada

Type: String

Ejemplo

Ejemplo de Amazon Linux

Un patrón de uso común consiste en utilizar cfn-init y cfn-signal a la vez. La llamada cfn-signal utiliza el estado de la devolución de la llamada a cfn-init (utilizando la construcción de shell $?). Si no se puede instalar la aplicación, no se creará la instancia y se restaurará la pila. Para pilas de Windows, consulte Arranque de pilas de Windows de AWS CloudFormation.

JSON

{ "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": "ami-a4c7edb2", "InstanceType": "t2.micro", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -x\n", "# Install the files and packages from the metadata\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

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: ami-a4c7edb2 InstanceType: t2.micro UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -x - | # Install the files and packages from the metadata - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ CreationPolicy: ResourceSignal: Timeout: PT5M

Ejemplos

Varias plantillas de ejemplo de CloudFormation utilizan cfn-signal, incluidas las siguientes plantillas.