Esegui le attività di AWS Systems Manager Automation in modo sincrono da AWS Step Functions - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esegui le attività di AWS Systems Manager Automation in modo sincrono da AWS Step Functions

Creato da Elie El khoury (AWS)

Archivio di codici: amazon-stepfunctions-ssm-waitfortasktoken

Ambiente: produzione

Tecnologie: senza server; Informatica per l'utente finale DevOps; Operazioni

Servizi AWS: AWS Step Functions; AWS Systems Manager

Riepilogo

Questo modello spiega come effettuare l'integrazione AWS Step Functions con AWS Systems Manager. Utilizza le integrazioni dei servizi AWS SDK per chiamare l'startAutomationExecutionAPI Systems Manager con un token di attività da un flusso di lavoro di una macchina a stati e si interrompe fino a quando il token non restituisce una chiamata riuscita o non riuscita. Per dimostrare l'integrazione, questo modello implementa un wrapper di documenti di automazione (runbook) attorno al documento or e lo utilizza per chiamare AWS-RunShellScript o in modo AWS-RunPowerShellScript sincrono. .waitForTaskToken AWS-RunShellScript AWS-RunPowerShellScript Per ulteriori informazioni sulle integrazioni dei servizi AWS SDK in Step Functions, consulta la AWS Step Functions Developer Guide.

Step Functions è un servizio di flusso di lavoro visivo a basso codice che puoi utilizzare per creare applicazioni distribuite, automatizzare i processi IT e aziendali e creare pipeline di dati e apprendimento automatico utilizzando i servizi. AWS I flussi di lavoro gestiscono gli errori, i nuovi tentativi, la parallelizzazione, le integrazioni dei servizi e l'osservabilità in modo da poterti concentrare su una logica aziendale di maggior valore.

L'automazione, una funzionalità di AWS Systems Manager, semplifica le attività comuni di manutenzione, distribuzione e riparazione per Servizi AWS Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift e Amazon Simple Storage Service (Amazon S3). L'automazione ti offre un controllo granulare sulla concomitanza delle tue automazioni. Ad esempio, è possibile specificare quante risorse indirizzare contemporaneamente e quanti errori possono verificarsi prima che un'automazione venga interrotta.

Per i dettagli di implementazione, inclusi i passaggi del runbook, i parametri e gli esempi, consulta la sezione Informazioni aggiuntive.

Prerequisiti e limitazioni

Prerequisiti

  • Un account attivo AWS

  • AWS Identity and Access Management Autorizzazioni (IAM) per accedere a Step Functions and Systems Manager

  • Un'istanza EC2 con Systems Manager Agent (SSM Agent) installato sull'istanza

  • Un profilo di istanza IAM per Systems Manager collegato all'istanza in cui si prevede di eseguire il runbook

  • Un ruolo Step Functions con le seguenti autorizzazioni IAM (che seguono il principio del privilegio minimo):

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

Versioni del prodotto

  • Schema del documento SSM versione 0.3 o successiva

  • SSM Agent versione 2.3.672.0 o successiva

Architettura

Stack tecnologico Target

  • AWS Step Functions

  • Automazione di AWS Systems Manager

Architettura di destinazione

Architettura per l'esecuzione sincrona delle attività di automazione di Systems Manager da Step Functions

Automazione e scalabilità

Strumenti

Servizi AWS

  • AWS CloudFormationti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante tutto il loro ciclo di vita in tutte le regioni Account AWS .

  • AWS Identity and Access Management (IAM) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

  • AWS Step Functionsè un servizio di orchestrazione senza server che consente di combinare AWS Lambda funzioni e altro Servizi AWS per creare applicazioni aziendali critiche.

  • AWS Systems Managerconsente di gestire le applicazioni e l'infrastruttura in esecuzione in. Cloud AWS Semplifica la gestione delle applicazioni e delle risorse, riduce i tempi di rilevamento e risoluzione dei problemi operativi e aiuta a gestire le AWS risorse in modo sicuro su larga scala.

Codice

Il codice per questo modello è disponibile nell'archivio di implementazione di GitHub Step Functions and Systems Manager

Epiche

AttivitàDescrizioneCompetenze richieste

Scarica il CloudFormation modello.

Scarica il ssm-automation-documents.cfn.json modello dalla cloudformation  cartella del GitHub repository.

AWS DevOps

Crea runbook.

Accedi a AWS Management Console, apri la AWS CloudFormation console e distribuisci il modello. Per ulteriori informazioni sulla distribuzione dei CloudFormation modelli, consulta Creazione di uno stack sulla AWS CloudFormation console nella documentazione. CloudFormation  

Il CloudFormation modello distribuisce tre risorse:

  • SfnRunCommandByInstanceIds— Runbook che consente di eseguire AWS-RunShellScript o utilizzare gli ID AWS-RunPowerShellScript di istanza.

  • SfnRunCommandByTargets— Runbook che consente di eseguire AWS-RunShellScript o utilizzare AWS-RunPowerShellScript obiettivi.

  • SSMSyncRole— Il ruolo IAM assunto dai runbook.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Crea una macchina a stati di test.

Segui le istruzioni contenute nella Guida per gli AWS Step Functions sviluppatori per creare ed eseguire una macchina a stati. Per la definizione, utilizzate il codice seguente. Assicurati di aggiornare il InstanceIds valore con l'ID di un'istanza valida abilitata per Systems Manager nel tuo account.

{ "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 } } }

Questo codice richiama il runbook per eseguire due comandi che dimostrano la waitForTaskToken chiamata a Systems Manager Automation.

Il valore del shell parametro (ShelloPowerShell) determina se il documento di automazione viene eseguito AWS-RunShellScript oAWS-RunPowerShellScript.

L'attività scrive «Questo è un waitForTask token di automazione in esecuzione di test» nel /home/ssm-user/automation.log file, quindi rimane inattiva per 100 secondi prima di rispondere con il token dell'attività e rilasciare l'attività successiva del flusso di lavoro.

Se invece vuoi chiamare il SfnRunCommandByTargets runbook, sostituisci la Parameters sezione del codice precedente con la seguente:

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

Aggiorna il ruolo IAM per la macchina a stati.

Il passaggio precedente crea automaticamente un ruolo IAM dedicato per la macchina a stati. Tuttavia, non concede le autorizzazioni per chiamare il runbook. Aggiorna il ruolo aggiungendo le seguenti autorizzazioni:

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

Convalida le chiamate sincrone.

Esegui la macchina a stati per convalidare la chiamata sincrona tra Step Functions e Systems Manager Automation. 

Per un esempio di output, vedere la sezione Informazioni aggiuntive

AWS DevOps

Risorse correlate

Informazioni aggiuntive

Dettagli di implementazione

Questo modello fornisce un CloudFormation modello che implementa due runbook di Systems Manager:

  • SfnRunCommandByInstanceIdsesegue il AWS-RunPowerShellScript comando AWS-RunShellScript or utilizzando gli ID di istanza.

  • SfnRunCommandByTargetsesegue il AWS-RunPowerShellScript comando AWS-RunShellScript or utilizzando target.

Ogni runbook implementa quattro passaggi per eseguire una chiamata sincrona quando si utilizza l'.waitForTaskTokenopzione in Step Functions.

Fase

Action

Descrizione

1

Branch

Controlla il valore del shell parametro (ShelloPowerShell) per decidere se eseguire per Linux o AWS-RunShellScript AWS-RunPowerShellScript per Windows.

2

RunCommand_Shell o RunCommand_PowerShell

Accetta diversi input ed esegue il RunPowerShellScript comando RunShellScript or. Per ulteriori informazioni, consulta la scheda Dettagli per il documento RunCommand_Shell o RunCommand_PowerShell Automation sulla console Systems Manager.

3

SendTaskFailure

Viene eseguito quando il passaggio 2 viene interrotto o annullato. Richiama l'API send_task_failure di Step Functions, che accetta tre parametri come input: il token passato dalla macchina a stati, l'errore di errore e una descrizione della causa dell'errore.

4

SendTaskSuccess

Viene eseguito quando il passaggio 2 ha esito positivo. Chiama l'API Step Functions send_task_success, che accetta il token passato dalla macchina a stati come input.

Parametri del runbook

SfnRunCommandByInstanceIdsrunbook:

Nome del parametro

Type

Facoltativo o richiesto

Descrizione

shell

Stringa

Richiesto

La shell delle istanze per decidere se eseguire AWS-RunShellScript per Linux o AWS-RunPowerShellScript per Windows.

deliveryTimeout

Numero intero

Facoltativo

Il tempo, in secondi, di attesa per l'invio di un comando all'agente SSM su un'istanza. Questo parametro ha un valore minimo di 30 (0,5 minuti) e un valore massimo di 2592000 (720 ore).

executionTimeout

Stringa

Facoltativo

Il tempo, in secondi, necessario per il completamento di un comando prima che venga considerato non riuscito. Il valore predefinito è 3600 (1 ora). Il valore massimo è 172800 (48 ore).

workingDirectory

Stringa

Facoltativo

Il percorso alla directory di lavoro nell'istanza.

Commands

StringList

Richiesto

Lo script o il comando di shell da eseguire.

InstanceIds

StringList

Richiesto

Gli ID delle istanze in cui si desidera eseguire il comando.

taskToken

Stringa

Richiesto

Il token di attività da utilizzare per le risposte di callback.

SfnRunCommandByTargetsrunbook:

Nome

Type

Facoltativo o richiesto

Descrizione

shell

Stringa

Richiesto

La shell delle istanze per decidere se eseguire AWS-RunShellScript per Linux o AWS-RunPowerShellScript per Windows.

deliveryTimeout

Numero intero

Facoltativo

Il tempo, in secondi, di attesa per l'invio di un comando all'agente SSM su un'istanza. Questo parametro ha un valore minimo di 30 (0,5 minuti) e un valore massimo di 2592000 (720 ore).

executionTimeout

Numero intero

Facoltativo

Il tempo, in secondi, necessario per il completamento di un comando prima che venga considerato non riuscito. Il valore predefinito è 3600 (1 ora). Il valore massimo è 172800 (48 ore).

workingDirectory

Stringa

Facoltativo

Il percorso alla directory di lavoro nell'istanza.

Commands

StringList

Richiesto

Lo script o il comando di shell da eseguire.

Targets

MapList

Richiesto

Una matrice di criteri di ricerca che identifica le istanze utilizzando coppie chiave-valore specificate dall'utente. Ad esempio: [{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]

taskToken

Stringa

Richiesto

Il token di attività da utilizzare per le risposte di callback.

Esempio di output

La tabella seguente fornisce un esempio di output della funzione step. Mostra che il tempo di esecuzione totale è superiore a 100 secondi tra il passaggio 5 (TaskSubmitted) e il passaggio 6 (TaskSucceeded). Ciò dimostra che la funzione step ha atteso il completamento del sleep 100 comando prima di passare all'attività successiva del flusso di lavoro.

ID

Type

Fase

Resource (Risorsa)

Tempo trascorso (ms)

Time stamp

1

ExecutionStarted

-

0

11 marzo 2022 14:50:34.303

2

TaskStateEntered

StartAutomationWaitForCallBack

-

40

11 marzo 2022 14:50:34.343

3

TaskScheduled

StartAutomationWaitForCallBack

-

40

11 marzo 2022 14:50:34.343

4

TaskStarted

StartAutomationWaitForCallBack

-

154

11 marzo 2022 14:50:34.457

5

TaskSubmitted

StartAutomationWaitForCallBack

-

657

11 marzo 2022 14:50:34.960

6

TaskSucceeded

StartAutomationWaitForCallBack

-

103835

11 marzo 2022 14:52:18.138

7

TaskStateExited

StartAutomationWaitForCallBack

-

103860

11 marzo 2022 02:52:18.163

8

ExecutionSucceeded

-

103897

11 marzo 2022 14:52:18.200