cfn-signal
Description
Le script d'assistant cfn-signal envoie un signal à CloudFormation pour indiquer que les instances Amazon EC2 ont été créées ou mises à jour avec succès. Si vous installez et configurez des applications logicielles dans des instances, vous pouvez envoyer un signal à CloudFormation lorsque ces applications sont prêtes.
Vous utilisez le script cfn-signal conjointement avec une politique de création Attribut CreationPolicy ou un groupe Auto Scaling avec une politique de mise à jour WaitOnResourceSignals. Lorsque CloudFormation crée ou met à jour les ressources avec ces politiques, il interrompt le travail au niveau de la pile jusqu'à ce que la ressource reçoive le nombre de signaux requis ou jusqu'à ce que le délai expire. Pour chaque signal valide que CloudFormation reçoit, CloudFormation publie les signaux dans les événements de la pile afin de vous permettre de suivre chaque signal. Pour voir une procédure détaillée qui utilise une politique de création et cfn-signal, consultez Déploiement d'applications sur Amazon EC2 avec AWS CloudFormation.
Note
cfn-signal ne requiert pas d'informations d'identification. Dès lors, vous n'avez pas besoin d'utiliser les options --access-key
, --secret-key
, --role
ou --credential-file
. Toutefois, si aucune information d'identification n'est spécifiée, CloudFormation vérifie l'appartenance de la pile et limite la portée de l'appel à la pile à laquelle l'instance appartient.
Syntaxe pour le signalement des ressources (recommandée)
Si vous souhaitez signaler les ressources CloudFormation, utilisez la syntaxe suivante.
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
Syntaxe à utiliser avec le descripteur de condition d'attente
Si vous souhaitez signaler un descripteur de condition d'attente, utilisez la syntaxe suivante.
cfn-signal --success|-s
signal.to.send
\ --reason|-rresource.status.reason
\ --data|-ddata
\ --id|-iunique.id
\ --exit-code|-eexit.code
\waitconditionhandle.url
Options
Les options que vous pouvez utiliser varient selon que vous signalez une politique de création ou un descripteur de condition d'attente. Les options qui s'appliquent à une politique de création ne s'appliquent pas forcément toutes au descripteur d'une condition d'attente.
Name (Nom) | Description | Obligatoire |
---|---|---|
|
Clé d'accès AWS pour un compte avec l'autorisation d'appeler l' Type : chaîne |
Non |
|
Données à envoyer avec le descripteur Type : chaîne Par défaut : vide |
Non |
|
Code d'erreur d'un processus qui peut être utilisé pour déterminer le succès ou l'échec. S'il est spécifié, l'option Type : chaîne Exemples : |
Non |
|
Fichier qui contient une clé d'accès secrète et une clé d'accès. Le paramètre du fichier d'informations d'identification supplante les paramètres --role, --access-key et --secret-key. Type : chaîne |
Non |
|
Proxy HTTP (non SSL). Utilisez le format suivant : Type : chaîne |
Non |
|
Proxy HTTPS. Utilisez le format suivant : Type : chaîne |
Non |
|
ID unique à envoyer. Type : chaîne Par défaut : ID de l'instance Amazon EC2. Si l'ID ne peut pas être résolu, le FQDN de la machine est renvoyé. |
Non |
|
Raison du statut pour l'événement de ressource (actuellement uniquement utilisé en cas d'échec) : indique par défaut « Configuration failed » si « success » est false. Type : chaîne |
Non |
--region (signalement de ressources uniquement) |
Point de terminaison de la région CloudFormation à utiliser. Type : chaîne Par défaut : |
Non |
--resource (signalement de ressources uniquement) |
ID logique de la ressource qui contient les règles de création que vous souhaitez signaler. Type : chaîne |
Oui |
|
Nom d'un rôle IAM associé à l'instance. Type : chaîne Condition : le paramètre du fichier d'informations d'identification prévaut sur ce paramètre. |
Non |
|
Si la valeur est true, signal Type : valeur booléenne Par défaut : |
Non |
|
Clé d'accès secrète AWS qui correspond à la clé d'accès AWS spécifiée. Type : chaîne |
Non |
|
Nom de la pile ou ID de la pile qui contient la ressource que vous voulez signaler. Type : chaîne |
Oui |
-u, --url (signalement de ressources uniquement) |
Point de terminaison CloudFormation à utiliser. Type : chaîne |
Non |
|
URL pré-signée que vous pouvez utiliser pour signaler la réussite ou l'échec d'une condition Type : chaîne |
Oui |
Exemple
Exemple de Amazon Linux
Un modèle courant consiste à utiliser cfn-init et cfn-signal ensemble. L'appel de cfn-signal utilise le statut de retour de l'appel à cfn-init (avec la construction shell $?). Si l'installation de l'application échoue, l'instance ne sera pas créée et la pile sera restaurée. Pour les piles Windows, consultez Amorçage de piles Windows 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", "yum install -y aws-cfn-bootstrap", "/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 - 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
Exemples
Plusieurs exemples de modèles CloudFormation utilisent cfn-signal, y compris les modèles suivants.