cfn-signal
Beschreibung
Das Hilfsskript „cfn-signal“ signalisiert CloudFormation, ob Amazon EC2-Instances erfolgreich erstellt wurden. Wenn Sie Softwareanwendungen auf Instances installieren und konfigurieren, können Sie CloudFormation signalisieren, wenn diese Softwareanwendungen bereit sind.
Verwenden Sie hierzu das cfn-signal Skript in Verbindung mit einer CreationPolicy oder Auto Scaling-Gruppe mit WaitOnResourceSignals-Aktualisierungsrichtlinie. Wenn CloudFormation Ressourcen mit diesen Richtlinien erstellt oder aktualisiert, wird die Arbeit am Stack pausiert, bis die Ressource die erforderliche Anzahl Signale empfängt oder der Timeout-Zeitraum überschritten wurde. Für jedes gültige Signal, das CloudFormation erhält, übermittelt CloudFormation die Signale an die Stack-Ereignisse, damit Sie jedes Signal nachverfolgen können. Eine Anleitung, bei der eine Erstellungsrichtlinie und cfn-signal verwendet wird, finden Sie unter Bereitstellen von Anwendungen auf Amazon EC2 mit AWS CloudFormation.
cfn-signal erfordert keine Anmeldeinformationen; die Optionen --access-key
, --secret-key
, --role
oder --credential-file
müssen also nicht verwendet werden. Wenn jedoch keine Anmeldeinformationen angegeben werden, prüft CloudFormation auf Stack-Mitgliedschaft und schränkt den Geltungsbereich des Aufrufs desjenigen Stacks ein, zu dem die Instance gehört.
Syntax zur Ressourcen-Signalisierung (empfohlen)
Wenn Sie CloudFormation-Ressourcen signalisieren möchten, verwenden Sie folgende Syntax.
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
Syntax zur Verwendung mit Wartebedingungs-Handle
Wenn Sie einen Wartebedingungs-Handle signalisieren möchten, verwenden Sie folgende Syntax.
cfn-signal --success|-s
signal.to.send
\ --reason|-rresource.status.reason
\ --data|-ddata
\ --id|-iunique.id
\ --exit-code|-eexit.code
\waitconditionhandle.url
Optionen
Die Optionen, die Sie verwenden können, hängen davon ab, ob Sie eine Erstellungsrichtlinie oder einen Wartebedingungs-Handle signalisieren. Einieg Optionen, die für Erstellungsrichtlinien gelten, gelten u.U. nicht für Wartebedingungs-Handles.
Name | Beschreibung | Erforderlich |
---|---|---|
|
AWS-Zugriffsschlüssel für ein Konto mit Berechtigung für CloudFormation Type: String |
Nein |
|
Mit Type: String Standard: leer |
Nein |
|
Der Fehlercode aus einem Prozess, der verwendet werden kann, um Erfolg oder Fehlschlag zu ermitteln. Ist dies festgelegt, wird die Option Type: String Beispiele: |
Nein |
|
Eine Datei mit einem geheimen Zugriffsschlüssel und einem Zugriffsschlüssel. Der Dateiparameter Anmeldeinformationen hat Vorrang vor den Parametern Rolle, Zugriffschlüssel und geheimer Zugriffschlüssel. Type: String |
Nein |
|
Ein HTTP-Proxys (Nicht-SSL). Verwenden Sie das folgende Format: Type: String |
Nein |
|
Ein HTTPS-Proxy. Verwenden Sie das folgende Format: Type: String |
Nein |
|
Die zu sendende eindeutige ID. Type: String Standard: Die ID der Amazon EC2-Instance. Wenn die ID nicht aufgelöst werden kann, wird der Fully Qualified Domain Name (FQDN) des Computer ausgegeben. |
Nein |
|
Ein Statusgrund für das Ressourcen-Ereignis (derzeit nur bei Fehlschlägen) – Standardeinstellung ist "Konfiguration fehlgeschlagen", wenn kein Erfolg ermittelt wurde. Type: String |
Nein |
--region (nur Ressourcen-Signalisierung) |
Der zu verwendende regionale CloudFormation-Endpunkt. Type: String Standard: |
Nein |
--resource (nur Ressourcen-Signalisierung) |
Die logische ID der Ressource, die die zu signalisierende Erstellungs-Richtlinie enthält. Type: String |
Ja |
|
Der Name einer IAM-Rolle, die mit dieser Instance verknüpft ist. Type: String Bedingun: Der Dateiparameter Anmeldeinformationen hat Vorrang vor diesem Parameter. |
Nein |
|
Bei „true“ signalisiert Type: Boolean Standard: |
Nein |
|
Geheimer AWS-Zugriffsschlüssel, der dem angegebenen AWS-Zugriffsschlüssel entspricht. Type: String |
Nein |
|
Der Stack-Name oder die Stack-ID, die die zu signalisierende Ressource enthält. Type: String |
Ja |
-u, --url (nur Ressourcen-Signalisierung) |
Der zu verwendende CloudFormation-Endpunkt. Type: String |
Nein |
|
Eine vorsignierte URL, mit der Sie einer zugehörigen Type: String |
Ja |
Beispiel
Beispiel für Amazon Linux
Ein häufiges Anwendungsmuster beteht darin, cfn-init und cfn-signal zusammen zu verwenden. Der cfn-signal-Aufruf nutzt den Rückgabstatus de Aufrufs von cfn-init (über das $? Shell-Konstrukt). Wenn die Anwendung nicht installiert werden kann, kann die Instance nicht erstellt werden und ein Rollback des Stacks wird durchgeführt. Für Windows-Stacks siehe Bootstrapping für AWS CloudFormation-Windows-Stacks.
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
Beispiele
Mehrere CloudFormation-Beispielvorlagen verwenden cfn-signal, einschließlich der folgenden Vorlagen.