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.
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-keyaccess.key
\ --credential-file|-fcredential.file
\ --exit-code|-eexit.code
\ --http-proxyHTTP.proxy
\ --https-proxyHTTPS.proxy
\ --id|-iunique.id
\ --regionAWS.region
\ --resourceresource.logical.ID
\ --roleIAM.role.name
\ --secret-keysecret.key
\ --stackstack.name.or.stack.ID
\ --urlAWS 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|-rresource.status.reason
\ --data|-ddata
\ --id|-iunique.id
\ --exit-code|-eexit.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 |
---|---|---|
|
Clave de acceso de AWS para una cuenta con permiso para llamar a la API Tipo: cadena |
No |
|
Datos para enviar de vuelta con el Tipo: cadena Valor predeterminado: en blanco |
No |
|
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 Tipo: cadena Ejemplos: |
No |
|
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 |
|
Un proxy HTTP (no SSL). Use el siguiente formato Tipo: cadena |
No |
|
Un proxy HTTPS. Use el siguiente formato Tipo: cadena |
No |
|
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 |
|
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: |
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í |
|
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 |
|
Si es true, señal Tipo: Booleano Valor predeterminado: |
No |
|
Clave de acceso secreta de AWS que corresponde a la clave de acceso de AWS especificada. Tipo: cadena |
No |
|
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 |
|
Una URL prefirmada que puede utilizar para señalar el éxito o el error de una Tipo: cadena |
Sí |
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.