

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.

# Tutoriel : tester les interruptions d'une instance Spot à l'aide AWS de FIS
<a name="fis-tutorial-spot-interruptions"></a>

Les instances Spot utilisent la EC2 capacité inutilisée disponible, pour bénéficier d'une réduction allant jusqu'à 90 % par rapport à la tarification à la demande. Amazon EC2 peut toutefois interrompre vos instances Spot lorsqu'il a besoin de récupérer leur capacité. Lorsque vous utilisez des instances Spot, vous devez être prêt à faire face à d'éventuelles interruptions. Pour plus d'informations, consultez la section [Interruptions des instances Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html) dans le *guide de EC2 l'utilisateur Amazon*.

Vous pouvez utiliser le service d'injection de AWS défauts (AWS FIS) pour tester la manière dont vos applications gèrent une interruption d'instance Spot. Utilisez ce didacticiel pour créer un modèle d'expérience qui utilise l'`aws:ec2:send-spot-instance-interruptions`action AWS FIS pour interrompre l'une de vos instances Spot.

Sinon, pour lancer l'expérience à l'aide de la EC2 console Amazon, consultez la section [Initiate a Spot Instance interruption](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/initiate-a-spot-instance-interruption.html) dans le *guide de EC2 l'utilisateur Amazon*.

## Prérequis
<a name="spot-interruptions-prerequisites"></a>

Avant de pouvoir utiliser AWS FIS pour interrompre une instance Spot, vous devez remplir les conditions préalables suivantes.

**1. Créer un rôle IAM**  
Créez un rôle et associez une politique qui permet à AWS FIS d'effectuer l'`aws:ec2:send-spot-instance-interruptions`action en votre nom. Pour de plus amples informations, veuillez consulter [Rôles IAM pour les expériences AWS FIS](getting-started-iam-service-role.md).

**2. Vérifier l'accès au AWS FIS**  
Assurez-vous d'avoir accès au AWS FIS. Pour plus d'informations, consultez les [exemples de politiques AWS FIS](security_iam_id-based-policy-examples.md).

**3. (Facultatif) Créez une demande d'instance Spot**  
Si vous souhaitez utiliser une nouvelle instance Spot pour cette expérience, utilisez la commande [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) pour demander une instance Spot. Par défaut, les instances Spot interrompues sont résiliées. Si vous définissez le comportement d'interruption sur`stop`, vous devez également définir le type sur`persistent`. Pour ce didacticiel, ne définissez pas le comportement d'interruption sur`hibernate`, car le processus d'hibernation commence immédiatement.

```
aws ec2 run-instances \
    --image-id ami-0ab193018fEXAMPLE \
    --instance-type "t2.micro" \
    --count 1 \
    --subnet-id subnet-1234567890abcdef0 \
    --security-group-ids sg-111222333444aaab \
    --instance-market-options file://spot-options.json \
    --query Instances[*].InstanceId
```

Voici un exemple du fichier `spot-options.json`.

```
{
    "MarketType": "spot",
    "SpotOptions": { 
        "SpotInstanceType": "persistent",
        "InstanceInterruptionBehavior": "stop"
    }
}
```

L'`--query`option de l'exemple de commande fait en sorte que la commande renvoie uniquement l'ID d'instance de l'instance Spot. Voici un exemple de sortie.

```
[
    "i-0abcdef1234567890"   
]
```

**4. Ajoutez une balise afin que AWS FIS puisse identifier l'instance Spot cible**  
Utilisez la commande [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) pour ajouter le tag Name=interruptMe vers votre instance Spot cible.

```
aws ec2 create-tags \
    --resources i-0abcdef1234567890 \
    --tags Key=Name,Value=interruptMe
```

## Étape 1 : Création d'un modèle d'expérience
<a name="spot-interruptions-create-template"></a>

Créez le modèle d'expérience à l'aide de la console AWS FIS. Dans le modèle, vous spécifiez l'action qui sera exécutée. L'action interrompt l'instance Spot avec la balise spécifiée. Si le tag est associé à plusieurs instances Spot, le AWS FIS choisit l'une d'entre elles au hasard.

**Pour créer un modèle d'expérience**

1. Ouvrez la console AWS FIS à [https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/)l'adresse.

1. Dans le volet de navigation, sélectionnez **Modèles d'expériences**.

1. Choisissez **Créer un modèle d'expérience**.

1. Pour **l'étape 1, Spécifier les détails du modèle**, procédez comme suit :

   1. Dans **Description et nom**, entrez une description et un nom pour le modèle.

   1. Choisissez **Suivant**, puis passez à l'**étape 2, Spécifier les actions et les cibles**. 

1. Pour **Actions**, procédez comme suit :

   1. Choisissez **Add action**.

   1. Entrez le nom de l'action. Par exemple, saisissez **interruptSpotInstance**.

   1. Pour **Type d'action**, choisissez **aws:ec2 :**. send-spot-instance-interruptions

   1. Pour **Target**, conservez la cible créée par AWS le FIS pour vous.

   1. Pour **Paramètres d'action**, **Durée avant interruption**, spécifiez 2 minutes (PT2M).

   1. Choisissez **Save** (Enregistrer).

1. Pour **Targets (Cibles)**, procédez comme suit :

   1. Choisissez **Modifier** pour la cible que AWS FIS a automatiquement créée pour vous à l'étape précédente.

   1. Remplacez le nom par défaut par un nom plus descriptif. Par exemple, saisissez **oneSpotInstance**.

   1. Vérifiez que le **type de ressource** est **aws:ec2:spot-instance**.

   1. Pour **Méthode cible**, sélectionnez **Balises de ressources, filtres et paramètres**.

   1. Pour les **balises de ressource**, choisissez **Ajouter une nouvelle balise**, puis entrez la clé et la valeur de la balise. Utilisez la balise que vous avez ajoutée à l'instance Spot pour l'interrompre, comme décrit dans les conditions préalables de ce didacticiel.

   1. Pour **les filtres de ressources**, choisissez **Ajouter un nouveau filtre** et entrez **State.Name** le chemin et **running** la valeur.

   1. Pour le **mode de sélection**, choisissez **Count**. Dans le **champ Nombre de ressources**, entrez**1**.

   1. Choisissez **Save** (Enregistrer).

1. Choisissez **Suivant** pour passer à l'**étape 3, Configurer l'accès au service**. 

1. Pour **l'accès aux services**, choisissez **Utiliser un rôle IAM existant**, puis choisissez le rôle IAM que vous avez créé, comme décrit dans les conditions préalables de ce didacticiel. Si votre rôle n'est pas affiché, vérifiez qu'il possède la relation de confiance requise. Pour de plus amples informations, veuillez consulter [Rôles IAM pour les expériences AWS FIS](getting-started-iam-service-role.md).

1. Choisissez **Suivant** pour passer à l'**étape 4, Configurer les paramètres facultatifs**. 

1. (Facultatif) Pour les **balises**, choisissez **Ajouter une nouvelle balise** et spécifiez une clé de balise et une valeur de balise. Les balises que vous ajoutez sont appliquées à votre modèle d'expérience, et non aux expériences exécutées à l'aide du modèle.

1. Choisissez **Suivant** pour passer à l'**étape 5, Réviser et créer**. 

1. Passez en revue le modèle et choisissez **Créer un modèle d'expérience**. Lorsque vous êtes invité à confirmer, entrez`create`, puis choisissez **Créer un modèle d'expérience**. 

**(Facultatif) Pour afficher le modèle d'expérience JSON**  
Cliquez sur l'onglet **Export (Exporter)**. Voici un exemple du JSON créé par la procédure de console précédente.

```
{
    "description": "Test Spot Instance interruptions",
    "targets": {
        "oneSpotInstance": {
            "resourceType": "aws:ec2:spot-instance",
            "resourceTags": {
                "Name": "interruptMe"
            },
            "filters": [
                {
                    "path": "State.Name",
                    "values": [
                        "running"
                    ]
                }
            ],
            "selectionMode": "COUNT(1)"
        }
    },
    "actions": {
        "interruptSpotInstance": {
            "actionId": "aws:ec2:send-spot-instance-interruptions",
            "parameters": {
                "durationBeforeInterruption": "PT2M"
            },
            "targets": {
                "SpotInstances": "oneSpotInstance"
            }
        }
    },
    "stopConditions": [
        {
            "source": "none"
        }
    ],
    "roleArn": "arn:aws:iam::123456789012:role/AllowFISSpotInterruptionActions",
    "tags": {
        "Name": "my-template"
    }
}
```

## Étape 2 : démarrer l'expérience
<a name="spot-interruptions-start-experiment"></a>

Lorsque vous avez fini de créer votre modèle de test, vous pouvez l'utiliser pour démarrer un test.

**Pour démarrer une expérience**

1. Vous devriez être sur la page de détails du modèle d'expérience que vous venez de créer. Sinon, choisissez **Modèles d'expérience**, puis sélectionnez l'ID du modèle d'expérience pour ouvrir la page de détails.

1. Sélectionnez **Start experiment (Démarrer une expérience)**.

1. (Facultatif) Pour ajouter une balise à votre expérience, choisissez **Ajouter une nouvelle balise** et entrez une clé de balise et une valeur de balise.

1. Sélectionnez **Start experiment (Démarrer une expérience)**. Lorsque vous êtes invité à confirmer, entrez **start** et choisissez **Démarrer l'expérience**.

## Étape 3 : suivre la progression de l'expérience
<a name="spot-interruptions-track-experiment"></a>

Vous pouvez suivre la progression d'une expérience en cours jusqu'à ce qu'elle soit terminée, arrêtée ou échouée.

**Pour suivre la progression d'une expérience**

1. Vous devriez être sur la page de détails de l'expérience que vous venez de commencer. Sinon, choisissez **Expériences**, puis sélectionnez l'ID de l'expérience pour ouvrir la page de détails.

1. Pour voir l'état de l'expérience, cochez la case **État** dans le volet **Détails**. Pour plus d'informations, consultez la section [États de l'expérience](view-experiment-progress.md#experiment-states).

1. Lorsque l'état de l'expérience est **en cours d'exécution**, passez à l'étape suivante.

## Étape 4 : vérifier le résultat de l'expérience
<a name="spot-interruptions-verify-experiment-result"></a>

Lorsque l'action de cette expérience est terminée, les événements suivants se produisent :
+ L'instance Spot cible reçoit une [recommandation de rééquilibrage d'instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/rebalance-recommendations.html).
+ Un [avis d'interruption de l'instance Spot](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html#spot-instance-termination-notices) est émis deux minutes avant qu'Amazon ne EC2 mette fin ou arrête votre instance.
+ Au bout de deux minutes, l'instance Spot est résiliée ou arrêtée.
+ Une instance Spot arrêtée par AWS FIS reste arrêtée jusqu'à ce que vous la redémarriez.

**Pour vérifier que l'instance a été interrompue par l'expérience**

1. Ouvrez la EC2 console Amazon à l'adresse [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Depuis le panneau de navigation, ouvrez **Spot Requests** (Demandes Spot) et **Instances** dans différents onglets ou fenêtres de navigateur.

1. Pour **Spot Requests** (Demandes Spot), sélectionnez la demande d'instance Spot. L’état initial est `fulfilled`. Une fois l'expérience terminée, le statut change comme suit :
   + `terminate`- Le statut passe à`instance-terminated-by-experiment`.
   + `stop`- Le statut passe à `marked-for-stop-by-experiment` et ensuite`instance-stopped-by-experiment`.

1. Pour **Instances**, sélectionnez l’instance Spot. L’état initial est `Running`. Deux minutes après avoir reçu l'avis d'interruption de l'instance Spot, le statut change comme suit :
   + `stop`- Le statut passe à `Stopping` et ensuite`Stopped`.
   + `terminate`- Le statut passe à `Shutting-down` et ensuite`Terminated`.

## Étape 5 : nettoyer
<a name="spot-interruptions-cleanup"></a>

Si vous avez créé l'instance Spot de test pour cette expérience avec un comportement d'interruption de `stop` et que vous n'en avez plus besoin, vous pouvez annuler la demande d'instance Spot et mettre fin à l'instance Spot.

**Pour annuler la demande et mettre fin à l'instance à l'aide du AWS CLI**

1. Utilisez la [cancel-spot-instance-requests](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-spot-instance-requests.html)commande pour annuler la demande d'instance Spot.

   ```
   aws ec2 cancel-spot-instance-requests --spot-instance-request-ids sir-ksie869j
   ```

1. Utilisez la commande [terminate-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html) pour mettre fin à l'instance.

   ```
   aws ec2 terminate-instances --instance-ids i-0abcdef1234567890
   ```

Si vous n'avez plus besoin du modèle d'expérience, vous pouvez le supprimer.

**Pour supprimer un modèle d'expérience à l'aide de la AWS console FIS**

1. Ouvrez la console AWS FIS à [https://console.aws.amazon.com/fis/](https://console.aws.amazon.com/fis/)l'adresse.

1. Dans le volet de navigation, sélectionnez **Modèles d'expériences**.

1. Sélectionnez le modèle d'expérience, puis choisissez **Actions**, **Supprimer le modèle d'expérience**.

1. Lorsque vous êtes invité à confirmer, entrez **delete** puis choisissez **Supprimer le modèle d'expérience**.