

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.

# Résoudre les problèmes d'une instance Linux Amazon EC2 défectueuse à l'aide de Rescue EC2
<a name="Linux-Server-EC2Rescue"></a>

*EC2Rescue pour Linux est un easy-to-use outil open source qui peut être exécuté sur une instance Amazon EC2 Linux pour diagnostiquer, dépanner et résoudre les problèmes courants à l'aide de sa bibliothèque de plus de 100 modules.* Les modules sont des fichiers YAML qui contiennent un script BASH ou Python et les métadonnées nécessaires.

Voici quelques cas d'utilisation généralisés des instances EC2 Rescue for Linux :
+ Collecte des journaux syslog et du gestionnaire de packages
+ Collecte de données sur l’utilisation des ressources
+ Diagnostiquer et remédier aux paramètres problématiques connus du noyau et aux problèmes courants d’OpenSSH

**Note**  
Le runbook `AWSSupport-TroubleshootSSH` AWS Systems Manager Automation installe EC2 Rescue pour Linux, puis utilise l'outil pour vérifier ou tenter de résoudre les problèmes courants qui empêchent une connexion SSH à une instance Linux. Pour de plus amples informations, veuillez consulter [AWSSupport-TroubleshootSSH](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootssh.html).

Si vous utilisez une instance Windows, consultez [Résoudre les problèmes d'une instance Windows Amazon EC2 défectueuse à l'aide de Rescue EC2](Windows-Server-EC2Rescue.md).

**Topics**
+ [Installez EC2 Rescue](ec2rl_install.md)
+ [Exécuter les commandes EC2 Rescue](ec2rl_working.md)
+ [Développer des modules EC2 de sauvetage](ec2rl_moduledev.md)

# Installer EC2Rescue sur une instance Amazon EC2 Linux
<a name="ec2rl_install"></a>

L’outil EC2Rescue pour Linux peut être installé sur une instance Amazon EC2 Linux qui satisfait les prérequis suivants.

**Conditions préalables**
+ Systèmes d’exploitation pris en charge :
  + Amazon Linux 2
  + Amazon Linux 2016.09\$1
  + SUSE Linux Enterprise Server 12\$1
  + RHEL 7\$1
  + Ubuntu 16.04\$1
+ Configuration logicielle requise :
  + Python 2.7.9\$1 ou 3.2\$1

## Installez EC2 Rescue
<a name="ec2rl-install"></a>

Le `AWSSupport-TroubleshootSSH` runbook installe EC2 Rescue pour Linux, puis utilise l'outil pour vérifier ou tenter de résoudre les problèmes courants qui empêchent une connexion à distance à une machine Linux via SSH. Pour plus d’informations et pour exécuter cette automatisation, consultez [Support-TroubleshootSSH](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-awssupport-troubleshootssh.html).

Si votre système dispose de la version Python requise, vous pouvez installer la build standard. Dans le cas contraire, vous pouvez installer la build de la solution groupée, qui inclut une copie minimale de Python.

**Pour installer la build standard**

1. À partir d'une instance Linux fonctionnelle, téléchargez l'outil [EC2Rescue for Linux](https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz) :

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz
   ```

1. (*Facultatif*) Vérifiez la signature du fichier d'installation de EC2 Rescue for Linux. Pour de plus amples informations, veuillez consulter [(Facultatif) Vérifiez la signature de EC2 Rescue for Linux](#ec2rl_verify).

1. Téléchargez le fichier de hachage sha256 :

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz.sha256
   ```

1. Vérifiez l’intégrité du tarball :

   ```
   sha256sum -c ec2rl.tgz.sha256
   ```

1. Déballez le tarball :

   ```
   tar -xzvf ec2rl.tgz
   ```

1. Vérifiez l’installation en énumérant le fichier d’aide :

   ```
   cd ec2rl-<version_number>
   ./ec2rl help
   ```

**Pour installer la build de la solution groupée**  
Pour un lien vers le téléchargement et une liste des limitations, consultez [EC2Rescue for Linux](https://github.com/awslabs/aws-ec2rescue-linux/blob/master/README.md) sur github.

## (Facultatif) Vérifiez la signature de EC2 Rescue for Linux
<a name="ec2rl_verify"></a>

Voici le processus recommandé pour vérifier la validité du package EC2 Rescue for Linux pour les systèmes d'exploitation basés sur Linux.

Lorsque vous téléchargez une application à partir d’Internet, nous vous recommandons d’authentifier l’identité de l’éditeur du logiciel et de vérifier que l’application n’a pas été modifiée ou corrompue depuis sa publication. Cela vous évitera d’installer une version de l’application contenant un virus ou tout autre code malveillant.

Si, après avoir exécuté les étapes décrites dans cette rubrique, vous constatez que le logiciel de EC2 Rescue for Linux est altéré ou endommagé, n'exécutez pas le fichier d'installation. Contactez plutôt Amazon Web Services.

EC2Les fichiers Rescue for Linux pour les systèmes d'exploitation basés sur Linux sont signés à l'aide de GnuPG, une implémentation open source de la norme Pretty Good Privacy (OpenPGP) pour les signatures numériques sécurisées. GnuPG (également connu sous le nom de GPG) fournit une authentification et un contrôle d'intégrité par le biais d'une signature numérique. AWS publie une clé publique et des signatures que vous pouvez utiliser pour vérifier le package EC2 Rescue for Linux téléchargé. [Pour plus d'informations sur PGP et GnuPG (GPG), consultez https://www.gnupg.org/.](https://www.gnupg.org/)

La première étape consiste à établir une approbation avec l’éditeur du logiciel. Téléchargez la clé publique de l’éditeur du logiciel, vérifiez que le propriétaire de cette clé publique est bien celui qu’il prétend être, puis ajoutez la clé publique à votre porte-clés. Votre porte-clés est un ensemble de clés publiques connues. Après avoir établi l’authenticité de la clé publique, vous pouvez l’utiliser pour vérifier la signature de l’application.

**Topics**
+ [Authentification et importation de la clé publique](#ec2rl_authenticate)
+ [Vérification de la signature du package](#ec2rl_verify_signature)

### Authentification et importation de la clé publique
<a name="ec2rl_authenticate"></a>

L'étape suivante du processus consiste à authentifier la clé publique EC2 Rescue for Linux et à l'ajouter en tant que clé fiable dans votre trousseau de clés GPG.

**Pour authentifier et importer la clé publique EC2 Rescue for Linux**

1. À l’invite de commande, utilisez la commande suivante pour obtenir une copie de votre clé publique GPG :

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.key
   ```

1. À l'invite de commande dans le répertoire où vous avez enregistré`ec2rl.key`, utilisez la commande suivante pour importer la clé publique EC2 Rescue for Linux dans votre jeu de clés :

   ```
   gpg2 --import ec2rl.key
   ```

   La commande renvoie un résultat semblable à ce qui suit :

   ```
   gpg: /home/ec2-user/.gnupg/trustdb.gpg: trustdb created
   gpg: key 2FAE2A1C: public key "ec2autodiag@amazon.com <EC2 Rescue for Linux>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```
**Astuce**  
Si vous voyez une erreur indiquant que la commande est introuvable, installez l’utilitaire GnuPG avec `apt-get install gnupg2` (Linux basé sur Debian) ou `yum install gnupg2` (Linux basé sur Red Hat).

### Vérification de la signature du package
<a name="ec2rl_verify_signature"></a>

Après avoir installé les outils GPG, authentifié et importé la clé publique EC2 Rescue for Linux, et vérifié que la clé publique EC2 Rescue for Linux est fiable, vous êtes prêt à vérifier la signature du script d'installation de EC2 Rescue for Linux.

**Pour vérifier la signature du script d'installation de EC2 Rescue for Linux**

1. À l’invite de commande, exécutez la commande suivante pour télécharger le fichier signature du script d’installation :

   ```
   curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz.sig
   ```

1. Vérifiez la signature en exécutant la commande suivante à l'invite de commande dans le répertoire où vous l'avez enregistrée `ec2rl.tgz.sig` et dans le fichier d'installation de EC2 Rescue for Linux. Ces deux fichiers doivent être présents.

   ```
   gpg2 --verify ./ec2rl.tgz.sig
   ```

   Le résultat doit ressembler à ce qui suit :

   ```
   gpg: Signature made Thu 12 Jul 2018 01:57:51 AM UTC using RSA key ID 6991ED45
   gpg: Good signature from "ec2autodiag@amazon.com <EC2 Rescue for Linux>"
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: E528 BCC9 0DBF 5AFA 0F6C  C36A F780 4843 2FAE 2A1C
        Subkey fingerprint: 966B 0D27 85E9 AEEC 1146  7A9D 8851 1153 6991 ED45
   ```

   Si la sortie contient cette phrase`Good signature from "ec2autodiag@amazon.com <EC2 Rescue for Linux>"`, cela signifie que la signature a été vérifiée avec succès et que vous pouvez exécuter le script d'installation de EC2 Rescue for Linux.

   Si le résultat inclut l’expression `BAD signature`, vérifiez si vous avez effectué la procédure correctement. Si vous continuez à obtenir cette réponse, contactez Amazon Web Services et n’exécutez pas le fichier d’installation que vous avez précédemment téléchargé.

Voici les informations détaillées sur les avertissements qui peuvent s’afficher :
+ **WARNING: This key is not certified with a trusted signature\$1 There is no indication that the signature belongs to the owner.**Cela fait référence à votre niveau de confiance personnel dans votre conviction que vous possédez une clé publique authentique pour EC2 Rescue for Linux. Dans un monde idéal, vous visiteriez un bureau Amazon Web Services et recevriez la clé en personne. Cependant, vous la téléchargez le plus souvent à partir d’un site Web. Dans le cas présent, le site Web est un site Amazon Web Services.
+ **gpg2: no ultimately trusted keys found.** Cela signifie que la clé spécifique n’est pas « approuvée en dernier lieu » par vous-même (ou par d’autres personnes de confiance).

Pour plus d'informations, consultez [https://www.gnupg.org/](https://www.gnupg.org/).

# Exécuter les commandes EC2Rescue sur une instance Amazon EC2 Linux
<a name="ec2rl_working"></a>

EC2Rescue est un outil en ligne de commande. Après avoir installé EC2 Rescue sur votre instance Linux, vous pouvez obtenir de l'aide générale sur l'utilisation de l'outil en exécutant`./ec2rl help`. Vous pouvez consulter les modules disponibles en exécutant`./ec2rl list`, et vous pouvez obtenir de l’aide sur un module spécifique en exécutant `./ec2rl help module_name`.

Les tâches suivantes sont des tâches courantes que vous pouvez effectuer pour commencer à utiliser cet outil.

**Topics**
+ [Exécuter les modules EC2 Rescue](#ec2rl_running_module)
+ [Téléchargez les résultats du module EC2 Rescue](#ec2rl_uploading_results)
+ [Créer des sauvegardes d’une instance Linux Amazon EC2](#ec2rl_creating_backups)

## Exécuter les modules EC2 Rescue
<a name="ec2rl_running_module"></a>

**Pour exécuter tous les modules EC2 Rescue**  
Utilisez la commande **./ec2rl run** sans indiquer de paramètres supplémentaires. Certains modules nécessitent un accès racine. Si vous n’êtes pas un utilisateur racine, utilisez **sudo** lorsque vous exécutez la commande.

```
./ec2rl run
```

**Pour exécuter un module EC2 Rescue spécifique**  
Utilisez la commande **./ec2rl run** et pour `--only-modules`, indiquez le nom du module à exécuter. Certains modules nécessitent des *arguments* pour être utilisés.

```
./ec2rl run --only-modules=module_name --arguments
```

Par exemple, pour exécuter le module **dig** afin d’interroger le domaine `amazon.com`, utilisez la commande suivante.

```
./ec2rl run --only-modules=dig --domain=amazon.com
```

**Pour consulter les résultats d'un module EC2 Rescue**  
Exécutez le module et consultez le fichier journal dans `cat /var/tmp/ec2rl/logfile_location`. Par exemple, le fichier journal du module **dig** se trouve à l’emplacement suivant :

```
cat /var/tmp/ec2rl/timestamp/mod_out/run/dig.log
```

## Téléchargez les résultats du module EC2 Rescue
<a name="ec2rl_uploading_results"></a>

Si vous avez Support demandé les résultats d'un module EC2 Rescue, vous pouvez télécharger le fichier journal à l'aide de l'outil EC2 Rescue. Vous pouvez télécharger les résultats soit vers un emplacement fourni par, Support soit vers un compartiment Amazon S3 dont vous êtes le propriétaire.

**Pour télécharger les résultats vers un emplacement fourni par Support**  
Utilisez la commande **./ec2rl upload**. Pour`--upload-directory`, indiquez l’emplacement du fichier journal. Pour`--support-url`, indiquez l’URL fournie par Support.

```
./ec2rl upload --upload-directory=/var/tmp/ec2rl/logfile_location --support-url="url_provided_by_aws_support"
```

**Pour télécharger les résultats vers un compartiment Amazon S3**  
Utilisez la commande **./ec2rl upload**. Pour`--upload-directory`, indiquez l’emplacement du fichier journal. Pour`--presigned-url`, indiquez une URL pré-signée pour le compartiment S3. Pour plus d'informations sur la génération de documents pré-signés URLs pour Amazon S3, consultez [Uploading objects using](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PresignedUrlUploadObject.html) Pre-Signed. URLs

```
./ec2rl upload --upload-directory=/var/tmp/ec2rl/logfile_location --presigned-url="presigned_s3_url"
```

## Créer des sauvegardes d’une instance Linux Amazon EC2
<a name="ec2rl_creating_backups"></a>

Vous pouvez utiliser EC2 Rescue pour sauvegarder votre instance Linux en créant une AMI ou en créant des instantanés de ses volumes attachés.

**Pour créer une AMI**  
Utilisez la commande `./ec2rl run` et pour : `backup`, indiquez `ami`.

```
./ec2rl run --backup=ami
```

**Pour créer des instantanés multi-volumes de tous les volumes associés**  
Utilisez la commande `./ec2rl run` et pour : `backup`, indiquez `allvolumes`.

```
./ec2rl run --backup=allvolumes
```

**Pour créer un instantané d’un volume associé spécifique**  
Utilisez la commande `./ec2rl run` et pour : `backup`, indiquez l’ID du volume à sauvegarder.

```
./ec2rl run --backup=vol-01234567890abcdef
```

# Développer des modules EC2Rescue pour les instances Linux Amazon EC2
<a name="ec2rl_moduledev"></a>

Les modules sont écrits en YAML, une norme de sérialisation des données. Le fichier YAML d’un module se compose d’un document unique, qui représente le module et ses attributs.

## Ajouter des attributs de module
<a name="ec2rl-adding-modules"></a>

Le tableau suivant répertorie les attributs de module disponibles.


| Attribut | Description | 
| --- | --- | 
| name | Nom du module. La longueur du nom doit être inférieure ou égale à 18 caractères. | 
| Version | Numéro de version du module. | 
| title | Titre court et descriptif du module. La longueur de cette valeur doit être inférieure ou égale à 50 caractères. | 
| helptext |  Description étendue du module. La longueur de chaque ligne doit être inférieure ou égale à 75 caractères. Si le module consomme des arguments, obligatoires ou facultatifs, incluez-les dans la valeur helptext. Exemples : <pre>helptext: !!str |<br />  Collect output from ps for system analysis<br />  Consumes --times= for number of times to repeat<br />  Consumes --period= for time period between repetition</pre> | 
| placement | Étape dans laquelle le module doit être exécuté. Valeurs prises en charge : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
| langage | Langage dans lequel le code du module est écrit. Valeurs prises en charge : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  Le code Python doit être compatible avec Python 2.7.9\$1 et Python 3.2\$1.   | 
| remediation |  Indique si le module prend en charge la correction. Les valeurs prises en charge sont `True` ou `False`. Le module utilise par défaut `False` si aucune valeur n’est indiquée. Il s’agit donc d’un attribut facultatif pour les modules qui ne prennent pas en charge la correction.  | 
| content | Intégralité du code de script. | 
| contrainte | Nom de l’objet contenant les valeurs de contrainte. | 
| domaine | Descripteur de la façon dont le module est regroupé ou classé. L’ensemble de modules inclus utilise les domaines suivants :  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| class | Descripteur du type de tâche effectué par le module. L’ensemble de modules inclus utilise les classes suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| distro | Liste des distributions Linux que ce module prend en charge. L’ensemble de modules inclus utilise les distributions suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html) | 
| obligatoire | Arguments obligatoires que le module consomme à partir des options de la CLI. | 
| facultatif | Arguments facultatifs que le module peut utiliser. | 
| logiciel | Exécutables logiciels utilisés dans le module. Cet attribut a pour but de spécifier un logiciel qui n’est pas installé par défaut. La logique EC2 Rescue for Linux garantit que ces programmes sont présents et exécutables avant d'exécuter le module. | 
| package | Package logiciel source pour un exécutable. Cet attribut a pour but de fournir des détails étendus sur le package avec le logiciel, y compris une URL pour le téléchargement ou pour obtenir de plus amples informations. | 
| sudo | Indique si l’accès racine est obligatoire pour exécuter le module.  Vous n’avez pas besoin d’implémenter des vérifications sudo dans le script du module. Si la valeur est vraie, la logique EC2 Rescue for Linux n'exécute le module que lorsque l'utilisateur exécutant dispose d'un accès root. | 
| perfimpact | Indique si le module peut avoir un impact important sur les performances qui affecte l’environnement dans lequel il est exécuté. Si la valeur est true et que l’argument `--perfimpact=true` n’est pas présent, le module est ignoré. | 
| parallelexclusive | Spécifie un programme qui requiert une exclusivité mutuelle. Par exemple, tous les modules qui spécifient « bpf » sont exécutés en série. | 

## Ajouter des variables d’environnement
<a name="ec2rl_adding_envvars"></a>

Le tableau suivant répertorie les variables d’environnement disponibles.


| Variable d’environnement | Description | 
| --- | --- | 
|  `EC2RL_CALLPATH`  | Chemin vers ec2rl.py. Ce chemin peut être utilisé pour localiser le répertoire lib et utiliser les modules Python fournis. | 
|  `EC2RL_WORKDIR`  |  Répertoire tmp principal pour l’outil de diagnostic. Valeur par défaut: `/var/tmp/ec2rl`. | 
|  `EC2RL_RUNDIR`  |  Répertoire dans lequel toutes les sorties sont stockées. Valeur par défaut: `/var/tmp/ec2rl/<date&timestamp>`.  | 
|  `EC2RL_GATHEREDDIR`  |  Répertoire racine dans lequel placer les données collectées sur le module. Valeur par défaut:`/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/`.  | 
|  `EC2RL_NET_DRIVER`  |  Pilote utilisé pour la première interface réseau non virtuelle, triée par ordre alphabétique, de l’instance. Exemples : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_SUDO`  |  True si EC2 Rescue for Linux est exécuté en tant que root ; sinon, faux.  | 
|  `EC2RL_VIRT_TYPE`  |  Type de virtualisation, tel que fourni par les métadonnées d’instance. Exemples : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/ec2rl_moduledev.html)  | 
|  `EC2RL_INTERFACES`  |  Liste énumérée des interfaces du système. La valeur est une chaîne contenant des noms, tels que `eth0`, `eth1`, etc. Elle est générée via `functions.bash` et est disponible uniquement pour les modules dont elle provient.  | 

## Utiliser la syntaxe YAML
<a name="ec2rl_yamlsyntax"></a>

Tenez compte des points suivants lorsque vous créez vos fichiers YAML de module :
+ Le triple trait d’union (`---`) indique le début explicite d’un document.
+ La balise `!ec2rlcore.module.Module` indique à l’analyseur YAML le constructeur à appeler lors de la création de l’objet à partir du flux de données. Vous trouverez le constructeur dans le fichier `module.py`.
+ La balise `!!str` indique à l’analyseur YAML de ne pas tenter de déterminer le type des données, et d’interpréter plutôt le contenu comme un littéral de chaîne.
+ Le caractère pipe (`|`) indique à l’analyseur YAML que la valeur est une scalaire littérale. Dans ce cas, l’analyseur inclut tous les espaces. C’est important pour les modules car les caractères de mise en retrait et de saut de ligne sont conservés.
+ La mise en retrait standard YAML correspond à deux espaces, comme illustré dans les deux exemples suivants. Veillez à conserver la mise en retrait standard (par exemple, quatre espaces pour Python) pour votre script, puis mettez en retrait l’intégralité du contenu à l’aide de deux espaces dans le fichier du module.

## Exemples de modules
<a name="ec2rl_example"></a>

Example un (`mod.d/ps.yaml`):

```
--- !ec2rlcore.module.Module
# Module document. Translates directly into an almost-complete Module object
name: !!str ps
path: !!str
version: !!str 1.0
title: !!str Collect output from ps for system analysis
helptext: !!str |
  Collect output from ps for system analysis
  Requires --times= for number of times to repeat
  Requires --period= for time period between repetition
placement: !!str run
package: 
  - !!str
language: !!str bash
content: !!str |
  #!/bin/bash
  error_trap()
  {
      printf "%0.s=" {1..80}
      echo -e "\nERROR:	"$BASH_COMMAND" exited with an error on line ${BASH_LINENO[0]}"
      exit 0
  }
  trap error_trap ERR

  # read-in shared function
  source functions.bash
  echo "I will collect ps output from this $EC2RL_DISTRO box for $times times every $period seconds."
  for i in $(seq 1 $times); do
      ps auxww
      sleep $period
  done
constraint:
  requires_ec2: !!str False
  domain: !!str performance
  class: !!str collect
  distro: !!str alami ubuntu rhel suse
  required: !!str period times
  optional: !!str
  software: !!str
  sudo: !!str False
  perfimpact: !!str False
  parallelexclusive: !!str
```