Führen Sie AWS Systems Manager Automation Automation-Aufgaben synchron über AWS Step Functions aus - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Führen Sie AWS Systems Manager Automation Automation-Aufgaben synchron über AWS Step Functions aus

Erstellt von Elie El khoury (AWS)

Code-Repository: amazon-stepfunctions-ssm-waitfortasktoken

Umgebung: Produktion

Technologien: Serverlos DevOps; Datenverarbeitung für Endbenutzer; Betrieb

AWS-Services: AWS Step Functions; AWS Systems Manager

Übersicht

Dieses Muster erklärt die Integration AWS Step Functions mit AWS Systems Manager. Es verwendet AWS SDK-Dienstintegrationen, um die Systems Manager startAutomationExecutionManager-API mit einem Task-Token aus einem State-Machine-Workflow aufzurufen, und pausiert, bis das Token mit einem erfolgreichen oder fehlerhaften Aufruf zurückkehrt. Um die Integration zu demonstrieren, implementiert dieses Muster einen Wrapper für Automatisierungsdokumente (Runbook) um das AWS-RunPowerShellScript OR-Dokument und wird verwendet.waitForTaskToken, um AWS-RunShellScript oder synchron aufzurufen. AWS-RunShellScript AWS-RunPowerShellScript Weitere Informationen zu AWS SDK-Dienstintegrationen in Step Functions finden Sie im AWS Step Functions Entwicklerhandbuch.

Step Functions ist ein visueller Workflow-Dienst mit geringem Programmieraufwand, mit dem Sie mithilfe von Diensten verteilte Anwendungen erstellen, IT- und Geschäftsprozesse automatisieren und Daten- und Machine-Learning-Pipelines erstellen können. AWS Workflows verwalten Fehler, Wiederholungen, Parallelisierung, Serviceintegrationen und Beobachtbarkeit, sodass Sie sich auf die wertvollere Geschäftslogik konzentrieren können.

Automatisierung, eine Funktion von AWS Systems Manager, vereinfacht allgemeine Wartungs-, Bereitstellungs- und Problembehebungsaufgaben für AWS-Services Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift und Amazon Simple Storage Service (Amazon S3). Durch die Automatisierung haben Sie eine detaillierte Kontrolle über die Parallelität Ihrer Automatisierungen. Sie können beispielsweise angeben, auf wie viele Ressourcen gleichzeitig zugegriffen werden soll und wie viele Fehler auftreten können, bevor eine Automatisierung gestoppt wird.

Einzelheiten zur Implementierung, einschließlich Runbook-Schritten, Parametern und Beispielen, finden Sie im Abschnitt Zusätzliche Informationen.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives Konto AWS

  • AWS Identity and Access Management (IAM) -Berechtigungen für den Zugriff auf Step Functions und Systems Manager

  • Eine EC2-Instanz, auf der Systems Manager Agent (SSM Agent) installiert ist

  • Ein IAM-Instanzprofil für Systems Manager, das an die Instance angehängt ist, auf der Sie das Runbook ausführen möchten

  • Eine Step Functions Functions-Rolle mit den folgenden IAM-Berechtigungen (die dem Prinzip der geringsten Rechte folgen):

{ "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": "*" }

Produktversionen

  • SSM-Dokumentschema Version 0.3 oder höher

  • SSM Agent Version 2.3.672.0 oder höher

Architektur

Zieltechnologie-Stack

  • AWS Step Functions

  • AWS Systems Manager -Automatisierung

Zielarchitektur

Architektur für die synchrone Ausführung von Systems Manager Manager-Automatisierungsaufgaben über Step Functions

Automatisierung und Skalierung

Tools

AWS-Services

  • AWS CloudFormationhilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus regionsübergreifend AWS-Konten zu verwalten.

  • AWS Identity and Access Management (IAM) hilft Ihnen dabei, den Zugriff auf Ihre AWS Ressourcen sicher zu verwalten, indem kontrolliert wird, wer authentifiziert und autorisiert ist, sie zu verwenden.

  • AWS Step Functionsist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Funktionen und andere Funktionen kombinieren können, um geschäftskritische Anwendungen AWS-Services zu erstellen.

  • AWS Systems Managerhilft Ihnen bei der Verwaltung Ihrer Anwendungen und Infrastruktur, die in der ausgeführt werden. AWS Cloud Es vereinfacht das Anwendungs- und Ressourcenmanagement, verkürzt die Zeit für die Erkennung und Lösung betrieblicher Probleme und hilft Ihnen, Ihre AWS Ressourcen sicher und in großem Umfang zu verwalten.

Code

Der Code für dieses Muster ist im Implementierungs-Repository von GitHub Step Functions und Systems Manager verfügbar. 

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Laden Sie die CloudFormation Vorlage herunter.

Laden Sie die ssm-automation-documents.cfn.json Vorlage aus dem cloudformation  Ordner des GitHub Repositorys herunter.

AWS DevOps

Runbooks erstellen.

Melden Sie sich bei der an AWS Management Console, öffnen Sie die AWS CloudFormation Konsole und stellen Sie die Vorlage bereit. Weitere Informationen zum Bereitstellen von CloudFormation Vorlagen finden Sie in der CloudFormation Dokumentation unter Erstellen eines Stacks auf der AWS CloudFormation Konsole

Die CloudFormation Vorlage stellt drei Ressourcen bereit:

  • SfnRunCommandByInstanceIds— Runbook, mit dem Sie AWS-RunShellScript Instanz-IDs ausführen oder AWS-RunPowerShellScript verwenden können.

  • SfnRunCommandByTargets— Runbook, mit dem Sie Ziele ausführen AWS-RunShellScript oder AWS-RunPowerShellScript verwenden können.

  • SSMSyncRole— Die von den Runbooks übernommene IAM-Rolle.

AWS DevOps
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie eine Teststatus-Maschine.

Folgen Sie den Anweisungen im AWS Step Functions Entwicklerhandbuch, um einen State Machine zu erstellen und auszuführen. Verwenden Sie für die Definition den folgenden Code. Achten Sie darauf, den InstanceIds Wert mit der ID einer gültigen Systems Manager-fähigen Instanz in Ihrem Konto zu aktualisieren.

{ "Comment": "A description of my state machine", "StartAt": "StartAutomationWaitForCallBack", "States": { "StartAutomationWaitForCallBack": { "Type": "Task", "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken", "Parameters": { "DocumentName": "SfnRunCommandByInstanceIds", "Parameters": { "InstanceIds": [ "i-1234567890abcdef0" ], "taskToken.$": "States.Array($$.Task.Token)", "workingDirectory": [ "/home/ssm-user/" ], "Commands": [ "echo \"This is a test running automation waitForTaskToken\" >> automation.log", "sleep 100" ], "executionTimeout": [ "10800" ], "deliveryTimeout": [ "30" ], "shell": [ "Shell" ] } }, "End": true } } }

Dieser Code ruft das Runbook auf, um zwei Befehle auszuführen, die den waitForTaskToken Aufruf von Systems Manager Automation demonstrieren.

Der shell Parameterwert (ShelloderPowerShell) bestimmt, ob das Automatisierungsdokument ausgeführt wird AWS-RunShellScript oderAWS-RunPowerShellScript.

Die Aufgabe schreibt „Dies ist ein waitForTask Automatisierungstoken für die Testausführung“ in die /home/ssm-user/automation.log Datei und ruht dann 100 Sekunden lang, bevor sie mit dem Aufgabentoken antwortet und die nächste Aufgabe im Workflow freigibt.

Wenn Sie stattdessen das SfnRunCommandByTargets Runbook aufrufen möchten, ersetzen Sie den Parameters Abschnitt des vorherigen Codes durch den folgenden:

"Parameters": { "Targets": [ { "Key": "InstanceIds", "Values": [ "i-02573cafcfEXAMPLE", "i-0471e04240EXAMPLE" ] } ],
AWS DevOps

Aktualisieren Sie die IAM-Rolle für den State Machine.

Im vorherigen Schritt wird automatisch eine dedizierte IAM-Rolle für den State Machine erstellt. Es gewährt jedoch keine Berechtigungen zum Aufrufen des Runbooks. Aktualisieren Sie die Rolle, indem Sie die folgenden Berechtigungen hinzufügen:

{ "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": "*" }
AWS DevOps

Validieren Sie die synchronen Aufrufe.

Führen Sie die Zustandsmaschine aus, um den synchronen Aufruf zwischen Step Functions und Systems Manager Automation zu validieren. 

Eine Beispielausgabe finden Sie im Abschnitt Zusätzliche Informationen

AWS DevOps

Zugehörige Ressourcen

Zusätzliche Informationen

Implementierungsinformationen

Dieses Muster stellt eine CloudFormation Vorlage bereit, die zwei Systems Manager Manager-Runbooks bereitstellt:

  • SfnRunCommandByInstanceIdsführt den AWS-RunPowerShellScript Befehl AWS-RunShellScript or mithilfe von Instanz-IDs aus.

  • SfnRunCommandByTargetsführt den AWS-RunPowerShellScript Befehl AWS-RunShellScript or mithilfe von Zielen aus.

Jedes Runbook implementiert vier Schritte, um einen synchronen Aufruf zu erreichen, wenn die .waitForTaskToken Option in Step Functions verwendet wird.

Schritt

Action (Aktion)

Beschreibung

1

Branch

Prüft den shell Parameterwert (ShelloderPowerShell), um zu entscheiden, ob die Ausführung AWS-RunShellScript für Linux oder AWS-RunPowerShellScript für Windows erfolgen soll.

2

RunCommand_Shell oder RunCommand_PowerShell

Nimmt mehrere Eingaben entgegen und führt den RunPowerShellScript Befehl RunShellScript oder aus. Weitere Informationen finden Sie auf der Registerkarte Details für das Dokument RunCommand_Shell oder RunCommand_PowerShell Automation in der Systems Manager Manager-Konsole.

3

SendTaskFailure

Wird ausgeführt, wenn Schritt 2 abgebrochen oder abgebrochen wird. Es ruft die Step Functions send_task_failure API auf, die drei Parameter als Eingabe akzeptiert: das von der Zustandsmaschine übergebene Token, den Fehlerfehler und eine Beschreibung der Fehlerursache.

4

SendTaskSuccess

Wird ausgeführt, wenn Schritt 2 erfolgreich ist. Es ruft die Step Functions send_task_success API auf, die das von der Zustandsmaschine übergebene Token als Eingabe akzeptiert.

Runbook-Parameter

SfnRunCommandByInstanceIdsRunbook:

Parametername

Typ

Optional oder erforderlich

Beschreibung

shell

String

Erforderlich

Die Instanz-Shell, um zu entscheiden, ob sie AWS-RunShellScript für Linux oder AWS-RunPowerShellScript für Windows ausgeführt werden sollen.

deliveryTimeout

Ganzzahl

Optional

Die Wartezeit in Sekunden, bis ein Befehl an den SSM-Agenten auf einer Instance übermittelt wird. Dieser Parameter hat einen Mindestwert von 30 (0,5 Minuten) und einen Höchstwert von 2592000 (720 Stunden).

executionTimeout

String

Optional

Die Zeit in Sekunden, die ein Befehl bis zum Abschluss benötigt, bevor er als fehlgeschlagen betrachtet wird. Der Standardwert ist 3600 (1 Stunde). Der Höchstwert ist 172800 (48 Stunden).

workingDirectory

String

Optional

Der Pfad zum Arbeitsverzeichnis auf der Instance.

Commands

StringList

Erforderlich

Das auszuführende Shell-Skript oder der auszuführende Befehl.

InstanceIds

StringList

Erforderlich

Die IDs der Instanzen, auf denen Sie den Befehl ausführen möchten.

taskToken

String

Erforderlich

Das Task-Token, das für Rückrufantworten verwendet werden soll.

SfnRunCommandByTargetsRunbook:

Name

Typ

Optional oder erforderlich

Beschreibung

shell

String

Erforderlich

Die Instanz-Shell, um zu entscheiden, ob sie AWS-RunShellScript für Linux oder AWS-RunPowerShellScript für Windows ausgeführt werden sollen.

deliveryTimeout

Ganzzahl

Optional

Die Wartezeit in Sekunden, bis ein Befehl an den SSM-Agenten auf einer Instance übermittelt wird. Dieser Parameter hat einen Mindestwert von 30 (0,5 Minuten) und einen Höchstwert von 2592000 (720 Stunden).

executionTimeout

Ganzzahl

Optional

Die Zeit in Sekunden, die ein Befehl bis zum Abschluss benötigt, bevor er als fehlgeschlagen betrachtet wird. Der Standardwert ist 3600 (1 Stunde). Der Höchstwert ist 172800 (48 Stunden).

workingDirectory

String

Optional

Der Pfad zum Arbeitsverzeichnis auf der Instance.

Commands

StringList

Erforderlich

Das auszuführende Shell-Skript oder der auszuführende Befehl.

Targets

MapList

Erforderlich

Eine Reihe von Suchkriterien, die Instanzen anhand von Schlüssel-Wert-Paaren identifizieren, die Sie angeben. Beispiel: [{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]

taskToken

String

Erforderlich

Das Task-Token, das für Rückrufantworten verwendet werden soll.

Beispielausgabe

Die folgende Tabelle enthält ein Beispiel für die Ausgabe der Step-Funktion. Sie zeigt, dass die Gesamtlaufzeit zwischen Schritt 5 (TaskSubmitted) und Schritt 6 (TaskSucceeded) über 100 Sekunden beträgt. Dies zeigt, dass die Step-Funktion auf die Beendigung des sleep 100 Befehls gewartet hat, bevor sie zur nächsten Aufgabe im Workflow überging.

ID (ID)

Typ

Schritt

Ressource

Verstrichene Zeit (ms)

Zeitstempel

1

ExecutionStarted

-

0

11. März 2022 14:50:34.303 Uhr

2

TaskStateEntered

StartAutomationWaitForCallBack

-

40

11. März 2022 14:50:34,343 Uhr

3

TaskScheduled

StartAutomationWaitForCallBack

-

40

11. März 2022 14:50:34,343 Uhr

4

TaskStarted

StartAutomationWaitForCallBack

-

154

11. März 2022 14:50:34.457 Uhr

5

TaskSubmitted

StartAutomationWaitForCallBack

-

657

11. März 2022 14:50:34.960 Uhr

6

TaskSucceeded

StartAutomationWaitForCallBack

-

10:3835

11. März 2022 14:52:18.138 Uhr

7

TaskStateExited

StartAutomationWaitForCallBack

-

1038 60

11. März 2022 14:52:18.163 Uhr

8

ExecutionSucceeded

-

103 897

11. März 2022 14:52:18.200 Uhr