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 Atributo 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 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

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

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

Tipo: cadena

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": "{{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

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: !Base64 'Fn::Join': - '' - - | #!/bin/bash -x - | # Install the files and packages from the metadata - yum install -y aws-cfn-bootstrap - |+ - | - '/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.