

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
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Elie El Khoury, Amazon Web Services*

## Riepilogo
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-summary"></a>

Questo modello spiega come eseguire l'integrazione con. AWS Step Functions AWS Systems Manager Utilizza le integrazioni dei servizi AWS SDK per chiamare l'**startAutomationExecution**API 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 Guida per gli [AWS Step Functions sviluppatori](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

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](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Prerequisiti e limitazioni
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Prerequisiti**
+ Un account attivo AWS 
+ AWS Identity and Access Management Autorizzazioni (IAM) per accedere a Step Functions and Systems Manager
+ Un' EC2 istanza con Systems Manager Agent (SSM Agent) [installato](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html) sull'istanza
+ [Un profilo di istanza IAM per Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) collegato all'istanza in cui intendi 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

## Architecture
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-architecture"></a>

**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\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automazione e scalabilità**
+ Questo modello fornisce un AWS CloudFormation modello che è possibile utilizzare per distribuire i runbook su più istanze. (Vedi l'archivio di [implementazione di GitHub Step Functions and Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

## Tools (Strumenti)
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-tools"></a>

**Servizi AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ti aiuta a gestire in modo sicuro l'accesso alle tue AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)è un servizio di orchestrazione senza server che consente di combinare AWS Lambda funzioni e altro Servizi AWS per creare applicazioni aziendali critiche.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)consente 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](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

## Epiche
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-epics"></a>

### Crea runbook
<a name="create-runbooks"></a>


| Operazione | Description | Competenze 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 Console di gestione AWS, apri la [CloudFormation console](https://console.aws.amazon.com/cloudformation/) e distribuisci il modello. Per ulteriori informazioni sulla distribuzione dei CloudFormation modelli, consulta [Creazione di uno stack sulla CloudFormation console nella documentazione](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html). CloudFormation  Il CloudFormation modello distribuisce tre risorse:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Crea un esempio di macchina a stati
<a name="create-a-sample-state-machine"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| Crea una macchina a stati di test.  | Segui le istruzioni contenute nella [Guida per gli AWS Step Functions sviluppatori](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) 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.<pre>{<br />  "Comment": "A description of my state machine",<br />  "StartAt": "StartAutomationWaitForCallBack",<br />  "States": {<br />    "StartAutomationWaitForCallBack": {<br />      "Type": "Task",<br />      "Resource": "arn:aws:states:::aws-sdk:ssm:startAutomationExecution.waitForTaskToken",<br />      "Parameters": {<br />        "DocumentName": "SfnRunCommandByInstanceIds",<br />        "Parameters": {<br />          "InstanceIds": [<br />            "i-1234567890abcdef0"<br />          ],<br />          "taskToken.$": "States.Array($$.Task.Token)",<br />          "workingDirectory": [<br />            "/home/ssm-user/"<br />          ],<br />          "Commands": [<br />            "echo \"This is a test running automation waitForTaskToken\" >> automation.log",<br />            "sleep 100"<br />          ],<br />          "executionTimeout": [<br />              "10800"<br />          ],<br />          "deliveryTimeout": [<br />              "30"<br />          ],<br />          "shell": [<br />              "Shell"<br />          ]<br />            }<br />      },<br />      "End": true<br />    }<br />  }<br />}</pre>Questo codice richiama il runbook per eseguire due comandi che dimostrano la `waitForTaskToken` chiamata a Systems Manager Automation.Il valore del `shell` parametro (`Shell`o`PowerShell`) determina se il documento di automazione viene eseguito `AWS-RunShellScript` o`AWS-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:<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | 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:<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | 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](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Risorse correlate
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Guida introduttiva a AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Guida per AWS Step Functions sviluppatori*)
+ [Attendi una richiamata con il task token](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*Guida per AWS Step Functions gli sviluppatori*, modelli di integrazione dei servizi)
+ [chiamate API send\$1task\$1success e send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) [(documentazione Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) 
+ [AWS Systems Manager Automazione (guida AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) *per l'utente)*

## Informazioni aggiuntive
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Dettagli di implementazione**

Questo modello fornisce un CloudFormation modello che implementa due runbook di Systems Manager:
+ `SfnRunCommandByInstanceIds`esegue il `AWS-RunPowerShellScript` comando `AWS-RunShellScript` or utilizzando instance. IDs
+ `SfnRunCommandByTargets`esegue il `AWS-RunPowerShellScript` comando `AWS-RunShellScript` or utilizzando target.

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


| 
| 
| Fase | Azione | Description | 
| --- |--- |--- |
| **1** | `Branch` | Controlla il valore del `shell` parametro (`Shell`o`PowerShell`) 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 nella console Systems Manager. | 
| **3** | `SendTaskFailure` | Viene eseguito quando il passaggio 2 viene interrotto o annullato. Richiama l'API [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) 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\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html), che accetta il token passato dalla macchina a stati come input. | 

**Parametri del runbook**

`SfnRunCommandByInstanceIds`runbook:


| 
| 
| Nome del parametro | Tipo | Facoltativo o richiesto | Description | 
| --- |--- |--- |--- |
| `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 | Le IDs istanze in cui si desidera eseguire il comando. | 
| `taskToken` | Stringa | Richiesto | Il token di attività da utilizzare per le risposte di callback. | 

`SfnRunCommandByTargets`runbook:


| 
| 
| Name | Tipo | Facoltativo o richiesto | Description | 
| --- |--- |--- |--- |
| `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 | Tipo | Fase | 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 | 