cfn-signal - AWS CloudFormation

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.

Anmerkung

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

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|-r resource.status.reason \ --data|-d data \ --id|-i unique.id \ --exit-code|-e exit.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

--access-key (nur Ressourcen-Signalisierung)

AWS-Zugriffsschlüssel für ein Konto mit Berechtigung für CloudFormation SignalResource API-Aufrufe. Der Dateiparameter Anmeldeinformationen hat Vorrang vor diesem Parameter.

Type: String

Nein

-d, --data (nur Wartebedingungs-Handle)

Mit waitConditionHandle zurückzusendende Daten. Der Standardwert ist leer.

Type: String

Standard: leer

Nein

-e, --exit-code

Der Fehlercode aus einem Prozess, der verwendet werden kann, um Erfolg oder Fehlschlag zu ermitteln. Ist dies festgelegt, wird die Option --success ignoriert.

Type: String

Beispiele: -e $? (für Linux), -e %ERRORLEVEL% (für Windows cmd.exe) und -e $lastexitcode (für Windows PowerShell).

Nein

-f, --credential-file (nur Ressourcen-Signalisierung)

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

--http-proxy

Ein HTTP-Proxys (Nicht-SSL). Verwenden Sie das folgende Format: http://user:password@host:port

Type: String

Nein

--https-proxy

Ein HTTPS-Proxy. Verwenden Sie das folgende Format: https://user:password@host:port

Type: String

Nein

-i, --id

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

-r, --reason (nur Wartebedingungs-Handle)

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: us-east-1

Nein

--resource (nur Ressourcen-Signalisierung)

Die logische ID der Ressource, die die zu signalisierende Erstellungs-Richtlinie enthält.

Type: String

Ja

--role (nur Ressourcen-Signalisierung)

Der Name einer IAM-Rolle, die mit dieser Instance verknüpft ist.

Type: String

Bedingun: Der Dateiparameter Anmeldeinformationen hat Vorrang vor diesem Parameter.

Nein

-s, --success

Bei „true“ signalisiert SUCCESS, ansonsten FAILURE.

Type: Boolean

Standard: true

Nein

--secret-key (nur Ressourcen-Signalisierung)

Geheimer AWS-Zugriffsschlüssel, der dem angegebenen AWS-Zugriffsschlüssel entspricht.

Type: String

Nein

--stack (nur Ressourcen-Signalisierung)

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

waitconditionhandle.url (nur Wartebedingungs-Handle)

Eine vorsignierte URL, mit der Sie einer zugehörigen WaitCondition Erfolg oder Fehlschlag signalisieren können

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.