

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Exécutez les tâches d'automatisation d'AWS Systems Manager de manière synchrone depuis AWS Step Functions
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions"></a>

*Élie El Khoury, Amazon Web Services*

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

Ce modèle explique comment intégrer AWS Step Functions à AWS Systems Manager. Il utilise les intégrations de services du AWS SDK pour appeler l'**startAutomationExecution**API Systems Manager à l'aide d'un jeton de tâche issu d'un flux de travail basé sur une machine à états, et fait une pause jusqu'à ce que le jeton revienne en cas de réussite ou d'échec d'un appel. Pour démontrer l'intégration, ce modèle implémente un wrapper de document d'automatisation (runbook) autour du `AWS-RunPowerShellScript` document `AWS-RunShellScript` or, et l'utilise `.waitForTaskToken` pour appeler ou de manière synchrone. `AWS-RunShellScript` `AWS-RunPowerShellScript` Pour plus d'informations sur les intégrations de services AWS SDK dans Step Functions, consultez le guide du [AWS Step Functions développeur](https://docs.aws.amazon.com/step-functions/latest/dg/supported-services-awssdk.html).

Step Functions**** est un service de flux de travail visuel à faible code que vous pouvez utiliser pour créer des applications distribuées, automatiser les processus informatiques et commerciaux, et créer des pipelines de données et d'apprentissage automatique à l'aide de AWS services. Les flux de travail gèrent les échecs, les nouvelles tentatives, la parallélisation, les intégrations de services et l'observabilité afin que vous puissiez vous concentrer sur une logique métier à plus forte valeur ajoutée.

L'automatisation, une fonctionnalité de AWS Systems Manager, simplifie les tâches courantes de maintenance, de déploiement et de correction pour Services AWS Amazon Elastic Compute Cloud (Amazon EC2), Amazon Relational Database Service (Amazon RDS), Amazon Redshift et Amazon Simple Storage Service (Amazon S3). L'automatisation vous permet de contrôler de manière précise la simultanéité de vos automatisations. Par exemple, vous pouvez spécifier le nombre de ressources à cibler simultanément et le nombre d'erreurs susceptibles de se produire avant l'arrêt d'une automatisation.

Pour les détails de mise en œuvre, y compris les étapes du runbook, les paramètres et les exemples, consultez la section [Informations supplémentaires](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).

## Conditions préalables et limitations
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-prereqs"></a>

**Conditions préalables**
+ Un AWS compte actif
+ Gestion des identités et des accès AWS Autorisations (IAM) pour accéder à Step Functions et Systems Manager
+ Une EC2 instance sur laquelle l'agent Systems Manager (agent SSM) [est installé](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html)
+ [Un profil d'instance IAM pour Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/setup-instance-profile.html) attaché à l'instance sur laquelle vous prévoyez d'exécuter le runbook
+ Un rôle Step Functions doté des autorisations IAM suivantes (selon le principe du moindre privilège) :

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

**Versions du produit**
+ Schéma de document SSM version 0.3 ou ultérieure
+ Agent SSM version 2.3.672.0 ou ultérieure

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

**Pile technologique cible**
+ AWS Step Functions
+ AWS Systems Manager  Automatisation

**Architecture cible**

![\[Architecture permettant d'exécuter les tâches d'automatisation de Systems Manager de manière synchrone à partir de Step Functions\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/47c19e4f-d68d-4f91-bb68-202098757529/images/2d248aae-d858-4565-8af2-593cde0da780.png)


**Automatisation et mise à l'échelle**
+ Ce modèle fournit un AWS CloudFormation modèle que vous pouvez utiliser pour déployer les runbooks sur plusieurs instances. (Voir le référentiel d'[implémentation de GitHub Step Functions et Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken).)

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

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie dans toutes Comptes AWS les régions.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos AWS ressources en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)est un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et d'autres fonctions Services AWS pour créer des applications critiques pour l'entreprise.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)vous aide à gérer vos applications et votre infrastructure exécutées dans le AWS Cloud. Il simplifie la gestion des applications et des ressources, réduit le délai de détection et de résolution des problèmes opérationnels et vous aide à gérer vos AWS ressources en toute sécurité à grande échelle.

**Code**

Le code de ce modèle est disponible dans le référentiel d'[implémentation de GitHub Step Functions and Systems Manager](https://github.com/aws-samples/amazon-stepfunctions-ssm-waitfortasktoken). 

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

### Créez des runbooks
<a name="create-runbooks"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Téléchargez le CloudFormation modèle. | Téléchargez le `ssm-automation-documents.cfn.json` modèle depuis le `cloudformation ` dossier du GitHub référentiel. | AWS DevOps | 
| Créez des runbooks. | Connectez-vous au AWS Management Console, ouvrez la [CloudFormation console](https://console.aws.amazon.com/cloudformation/) et déployez le modèle. Pour plus d'informations sur le déploiement CloudFormation de modèles, consultez [la section Création d'une pile sur la CloudFormation console](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-create-stack.html) dans la CloudFormation documentation. Le CloudFormation modèle déploie trois ressources :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions.html) | AWS DevOps | 

### Création d'un exemple de machine à états
<a name="create-a-sample-state-machine"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une machine à états de test.  | Suivez les instructions du [guide du AWS Step Functions développeur](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) pour créer et exécuter une machine à états. Pour la définition, utilisez le code suivant. Assurez-vous de mettre à jour la `InstanceIds` valeur avec l'ID d'une instance valide compatible avec Systems Manager dans votre compte.<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>Ce code appelle le runbook pour exécuter deux commandes illustrant l'`waitForTaskToken`appel à Systems Manager Automation.La valeur du `shell` paramètre (`Shell`ou`PowerShell`) détermine si le document d'automatisation s'exécute `AWS-RunShellScript` ou`AWS-RunPowerShellScript`.La tâche écrit « Ceci est un waitForTask jeton d'automatisation de test » dans le `/home/ssm-user/automation.log` fichier, puis s'arrête pendant 100 secondes avant de répondre avec le jeton de tâche et de libérer la tâche suivante dans le flux de travail.Si vous souhaitez plutôt appeler le `SfnRunCommandByTargets` runbook, remplacez la `Parameters` section du code précédent par la suivante :<pre>"Parameters": {<br />          "Targets": [<br />            {<br />              "Key": "InstanceIds",<br />              "Values": [<br />                "i-02573cafcfEXAMPLE",<br />                "i-0471e04240EXAMPLE"<br />              ]<br />            }<br />          ],</pre> | AWS DevOps | 
| Mettez à jour le rôle IAM pour la machine d'état. | L'étape précédente crée automatiquement un rôle IAM dédié pour la machine à états. Cependant, il n'accorde pas l'autorisation d'appeler le runbook. Mettez à jour le rôle en ajoutant les autorisations suivantes :<pre>{<br />      "Effect": "Allow",<br />      "Action": "ssm:StartAutomationExecution",<br />      "Resource": "*"<br /> }</pre> | AWS DevOps | 
| Validez les appels synchrones. | Exécutez la machine d'état pour valider l'appel synchrone entre Step Functions et Systems Manager Automation. Pour un exemple de sortie, consultez la section [Informations supplémentaires](#run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional).  | AWS DevOps | 

## Ressources connexes
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-resources"></a>
+ [Mise en route avec AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started-with-sfn.html) (*Guide AWS Step Functions du développeur*)
+ [Attendez un rappel avec le jeton de tâche](https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html#connect-wait-token) (*guide du AWS Step Functions développeur*, modèles d'intégration des services)
+ Appels d'[API send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) et [send\$1task\$1failure (documentation Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html)) 
+ [AWS Systems Manager Automatisation](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html) (*guide de AWS Systems Manager l'utilisateur*)

## Informations supplémentaires
<a name="run-aws-systems-manager-automation-tasks-synchronously-from-aws-step-functions-additional"></a>

**Détails de l'implémentation**

Ce modèle fournit un CloudFormation modèle qui déploie deux runbooks de Systems Manager :
+ `SfnRunCommandByInstanceIds`exécute la `AWS-RunPowerShellScript` commande `AWS-RunShellScript` or en utilisant l'instance IDs.
+ `SfnRunCommandByTargets`exécute la `AWS-RunPowerShellScript` commande `AWS-RunShellScript` or en utilisant des cibles.

Chaque runbook met en œuvre quatre étapes pour obtenir un appel synchrone lors de l'utilisation de l'`.waitForTaskToken`option dans Step Functions.


| 
| 
| Step (Étape) | Action | Description | 
| --- |--- |--- |
| **1** | `Branch` | Vérifie la valeur du `shell` paramètre (`Shell`ou`PowerShell`) pour décider s'il convient de l'exécuter `AWS-RunShellScript` pour Linux ou `AWS-RunPowerShellScript` pour Windows. | 
| **2** | `RunCommand_Shell` ou `RunCommand_PowerShell` | Prend plusieurs entrées et exécute la `RunPowerShellScript` commande `RunShellScript` or. Pour plus d'informations, consultez l'onglet **Détails** du document `RunCommand_Shell` ou `RunCommand_PowerShell` Automation sur la console Systems Manager. | 
| **3** | `SendTaskFailure` | S'exécute lorsque l'étape 2 est abandonnée ou annulée. Il appelle l'API [send\$1task\$1failure](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_failure.html) de Step Functions, qui accepte trois paramètres en entrée : le jeton transmis par la machine d'état, l'erreur d'échec et une description de la cause de l'échec. | 
| **4** | `SendTaskSuccess` | S'exécute lorsque l'étape 2 est réussie. Il appelle l'API [send\$1task\$1success](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions/client/send_task_success.html) de Step Functions, qui accepte le jeton transmis par la machine d'état en entrée. | 

**Paramètres du Runbook**

`SfnRunCommandByInstanceIds`carnet de course :


| 
| 
| Nom du paramètre | Type | Facultatif ou obligatoire | Description | 
| --- |--- |--- |--- |
| `shell` | String | Obligatoire | L'interpréteur de commandes des instances permet de décider s'ils `AWS-RunShellScript` doivent être exécutés sous Linux ou `AWS-RunPowerShellScript` sous Windows. | 
| `deliveryTimeout` | Entier | Facultatif | Temps d'attente, en secondes, avant qu'une commande soit délivrée à l'agent SSM sur une instance. Ce paramètre a une valeur minimale de 30 (0,5 minute) et une valeur maximale de 2592000 (720 heures). | 
| `executionTimeout` | String | Facultatif | Durée, en secondes, nécessaire à l'exécution d'une commande avant qu'elle ne soit considérée comme ayant échoué. La valeur par défaut est 3 600 (1 heure). La valeur maximale est 172800 (48 heures). | 
| `workingDirectory` | String | Facultatif | Chemin d'accès au répertoire de travail sur votre instance. | 
| `Commands` | StringList | Obligatoire | Le script ou la commande shell à exécuter. | 
| `InstanceIds` | StringList | Obligatoire | Les IDs instances dans lesquelles vous souhaitez exécuter la commande. | 
| `taskToken` | String | Obligatoire | Le jeton de tâche à utiliser pour les réponses de rappel. | 

`SfnRunCommandByTargets`carnet de course :


| 
| 
| Name | Type | Facultatif ou obligatoire | Description | 
| --- |--- |--- |--- |
| `shell` | String | Obligatoire | L'interpréteur de commandes des instances permet de décider s'ils `AWS-RunShellScript` doivent être exécutés sous Linux ou `AWS-RunPowerShellScript` sous Windows. | 
| `deliveryTimeout` | Entier | Facultatif | Temps d'attente, en secondes, avant qu'une commande soit délivrée à l'agent SSM sur une instance. Ce paramètre a une valeur minimale de 30 (0,5 minute) et une valeur maximale de 2592000 (720 heures). | 
| `executionTimeout` | Entier | Facultatif | Durée, en secondes, nécessaire à l'exécution d'une commande avant qu'elle ne soit considérée comme ayant échoué. La valeur par défaut est 3 600 (1 heure). La valeur maximale est 172800 (48 heures). | 
| `workingDirectory` | String | Facultatif | Chemin d'accès au répertoire de travail sur votre instance. | 
| `Commands` | StringList | Obligatoire | Le script ou la commande shell à exécuter. | 
| `Targets` | MapList | Obligatoire | Tableau de critères de recherche qui identifie les instances à l'aide de paires clé-valeur que vous spécifiez. Par exemple : `[{"Key":"InstanceIds","Values":["i-02573cafcfEXAMPLE","i-0471e04240EXAMPLE"]}]` | 
| `taskToken` | String | Obligatoire | Le jeton de tâche à utiliser pour les réponses de rappel. | 

**Exemple de sortie**

Le tableau suivant fournit un exemple de sortie de la fonction step. Cela montre que le temps d'exécution total est supérieur à 100 secondes entre l'étape 5 (`TaskSubmitted`) et l'étape 6 (`TaskSucceeded`). Cela montre que la fonction step a attendu la fin de la `sleep 100` commande avant de passer à la tâche suivante du flux de travail.


| 
| 
| ID | Type | Step (Étape) | Ressource | Temps écoulé (ms) | Horodatage | 
| --- |--- |--- |--- |--- |--- |
| **1** | `ExecutionStarted` |  | - | 0 | 11 mars 2022 14h50:34 ,303 | 
| **2** | `TaskStateEntered` | `StartAutomationWaitForCallBack` | - | 40 | 11 mars 2022 14 h 50 : 34 .343 | 
| **3** | `TaskScheduled` | `StartAutomationWaitForCallBack` | - | 40 | 11 mars 2022 14 h 50 : 34 .343 | 
| **4** | `TaskStarted` | `StartAutomationWaitForCallBack` | - | 154 | 11 mars 2022 14 h 50 : 34 .457 | 
| **5** | `TaskSubmitted` | `StartAutomationWaitForCallBack` | - | 657 | 11 mars 2022 14 h 50 : 34 960 | 
| **6** | `TaskSucceeded` | `StartAutomationWaitForCallBack` | - | 103835 | 11 mars 2022 14h52:18 138 | 
| **7** | `TaskStateExited` | `StartAutomationWaitForCallBack` | - | 103860 | 11 mars 2022 14h52:18 163 | 
| **8** | `ExecutionSucceeded` |  | - | 103897 | 11 mars 2022 14h52:18 200 | 