

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.

# Détecter si un hôte est une EC2 instance
<a name="identify_ec2_instances"></a>

Vous devrez peut-être savoir si votre application ou votre site Web s'exécute sur une EC2 instance, en particulier si vous disposez d'un environnement informatique mixte. Vous pouvez utiliser l'une des options suivantes pour déterminer si l'hôte de votre application ou de votre site Web est une EC2 instance.

**Topics**
+ [Inspecter le Documents d’identité d’instance](#inspect-instance-identity-document)
+ [Inspecter l’UUID du système](#inspect-uuid)
+ [Inspecter l’identificateur de génération de machine virtuelle du système](#vm-generation-id)

## Inspecter le Documents d’identité d’instance
<a name="inspect-instance-identity-document"></a>

Chaque instance possède un document d’identité d’instance signé que vous pouvez vérifier de manière cryptographique. Vous pouvez trouver ces documents en utilisant le service de métadonnées d’instance (IMDS).

Pour de plus amples informations, veuillez consulter [Documents d’identité d’instance](instance-identity-documents.md).

## Inspecter l’UUID du système
<a name="inspect-uuid"></a>

Vous pouvez obtenir l’UUID du système et rechercher l’octet de début de l’UUID pour `EC2` (sous Linux, il peut s’agir de `ec2` en minuscules). Cette méthode est rapide, mais potentiellement imprécise, car il est peu probable qu'un système qui n'est pas une EC2 instance possède un UUID commençant par ces caractères. De plus, certaines versions de SMBIOS utilisent le format *little-endian*, qui n’inclut pas `EC2` au début de l’UUID. Cela peut être le cas pour les EC2 instances qui utilisent SMBIOS 2.4 pour Windows ou pour les distributions Linux autres qu'Amazon Linux qui ont leur propre implémentation de SMBIOS.

**Exemple Linux : obtenir l'UUID depuis DMI (HVM uniquement) AMIs**  
Utilisez la commande suivante pour obtenir l’UUID à l’aide de DMI (Desktop Management Interface) :

```
[ec2-user ~]$ sudo dmidecode --string system-uuid
```

Dans l'exemple de sortie suivant, l'UUID commence par EC2 « », ce qui indique que le système est probablement une EC2 instance.

```
EC2E1916-9099-7CAF-FD21-012345ABCDEF
```

Dans l’exemple de sortie qui suit, l’UUID est représenté au format Little Endian :

```
45E12AEC-DCD1-B213-94ED-012345ABCDEF
```

Sinon, pour les instances construites sur le système Nitro, vous pouvez utiliser la commande suivante :

```
[ec2-user ~]$ cat /sys/devices/virtual/dmi/id/board_asset_tag
```

Si le résultat est un ID d'instance, comme dans l'exemple de sortie suivant, le système est une EC2 instance :

```
i-0af01c0123456789a
```

**Exemple Linux : obtenir l'UUID depuis l'hyperviseur (PV uniquement) AMIs**  
Utilisez la commande suivante pour obtenir l’UUID de l’hyperviseur :

```
[ec2-user ~]$ cat /sys/hypervisor/uuid
```

Dans l'exemple de sortie suivant, l'UUID commence par « ec2 », ce qui indique que le système est probablement une instance. EC2 

```
ec2e1916-9099-7caf-fd21-012345abcdef
```

**Exemple Windows : obtenir l'UUID à l'aide de WMI ou de Windows PowerShell**  
Utilisez l’utilitaire de ligne de commande Windows Management Instrumentation Command Line (WMIC) comme suit :

```
wmic path win32_computersystemproduct get uuid
```

Si vous utilisez Windows PowerShell, vous pouvez également utiliser l'**Get-WmiObject**applet de commande comme suit :

```
PS C:\> Get-WmiObject -query "select uuid from Win32_ComputerSystemProduct" | Select UUID
```

Dans l'exemple de sortie suivant, l'UUID commence par EC2 « », ce qui indique que le système est probablement une EC2 instance.

```
EC2AE145-D1DC-13B2-94ED-012345ABCDEF
```

Pour les instances utilisant SMBIOS 2.4, l’UUID peut être représenté au format Little Endian. Par exemple :

```
45E12AEC-DCD1-B213-94ED-012345ABCDEF
```

## Inspecter l’identificateur de génération de machine virtuelle du système
<a name="vm-generation-id"></a>

Un identificateur de génération de machine virtuelle consiste en un tampon unique de 128 bits interprété comme un entier unique aléatoire cryptographique. Vous pouvez récupérer l’identificateur de génération de machine virtuelle pour identifier votre instance Amazon Elastic Compute Cloud. L’identificateur de génération est exposé dans le système d’exploitation invité de l’instance via une entrée de table ACPI. La valeur change si votre machine est clonée, copiée ou importée dans AWS, par exemple avec [VM Import/Export](https://docs.aws.amazon.com/vm-import/latest/userguide/what-is-vmimport.html).

**Exemple : récupérer l’identifiant de génération de la machine virtuelle sous Linux**  
Vous pouvez utiliser les commandes suivantes pour récupérer l’identifiant de génération de machine virtuelle à partir de vos instances exécutant Linux.

------
#### [ Amazon Linux 2 ]

1. Mettez à jour vos packages logiciels existants, le cas échéant, à l’aide de la commande suivante :

   ```
   sudo yum update
   ```

1. Si nécessaire, créez le package busybox à l’aide de la commande suivante :

   ```
   sudo curl https://www.rpmfind.net/linux/epel/next/8/Everything/x86_64/Packages/b/busybox-1.35.0-2.el8.next.x86_64.rpm --output busybox.rpm
   ```

1. Si nécessaire, installez les packages préalables à l’aide de la commande suivante :

   ```
   sudo yum install busybox.rpm iasl -y
   ```

1. Exécutez la commande `iasl` suivante pour produire une sortie à partir de la table ACPI :

   ```
   sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
   ```

1. Exécutez la commande suivante pour vérifier la sortie de la commande `iasl` :

   ```
   cat SSDT2.dsl
   ```

   La sortie doit fournir l’espace d’adressage requis pour récupérer l’identificateur de génération de machine virtuelle :

   ```
   Intel ACPI Component Architecture
   ASL+ Optimizing Compiler/Disassembler version 20190509
   Copyright (c) 2000 - 2019 Intel Corporation
   
   File appears to be binary: found 32 non-ASCII characters, disassembling
   Binary file appears to be a valid ACPI table, disassembling
   Input file /sys/firmware/acpi/tables/SSDT2, Length 0x7B (123) bytes
   ACPI: SSDT 0x0000000000000000 00007B (v01 AMAZON AMZNSSDT 00000001 AMZN 00000001)
   Pass 1 parse of [SSDT]
   Pass 2 parse of [SSDT]
   Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
   
   Parsing completed
   Disassembly completed
   ASL Output:    ./SSDT2.dsl - 1065 bytes
   $
   /*
   * Intel ACPI Component Architecture
   * AML/ASL+ Disassembler version 20190509 (64-bit version)
   * Copyright (c) 2000 - 2019 Intel Corporation
   *
   * Disassembling to symbolic ASL+ operators
   *
   * Disassembly of /sys/firmware/acpi/tables/SSDT2, Tue Mar 29 16:15:14 2022
   *
   * Original Table Header:
   *     Signature        "SSDT"
   *     Length           0x0000007B (123)
   *     Revision         0x01
   *     Checksum         0xB8
   *     OEM ID           "AMAZON"
   *     OEM Table ID     "AMZNSSDT"
   *     OEM Revision     0x00000001 (1)
   *     Compiler ID      "AMZN"
   *     Compiler Version 0x00000001 (1)
   */
   DefinitionBlock ("", "SSDT", 1, "AMAZON", "AMZNSSDT", 0x00000001)
   {
   Scope (\_SB)
   {
       Device (VMGN)
       {
           Name (_CID, "VM_Gen_Counter")  // _CID: Compatible ID
           Name (_DDN, "VM_Gen_Counter")  // _DDN: DOS Device Name
           Name (_HID, "AMZN0000")  // _HID: Hardware ID
           Name (ADDR, Package (0x02)
           {
               0xFED01000,
               Zero
           })
       }
   }
   }
   ```

1. (Facultatif) Augmentez les autorisations de votre terminal pour les étapes restantes à l’aide de la commande suivante :

   ```
   sudo -s
   ```

1. Utilisez la commande suivante pour stocker l’espace d’adressage précédemment collecté :

   ```
   VMGN_ADDR=0xFED01000
   ```

1. Utilisez la commande suivante pour parcourir l’espace d’adressage et créer l’identificateur de génération de machine virtuelle :

   ```
   for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
   ```

1. Récupérez l’identificateur de génération de machine virtuelle à partir du fichier de sortie à l’aide de la commande suivante :

   ```
   cat vmgenid ; echo
   ```

   Votre sortie doit ressembler à ce qui suit :

   ```
   EC2F335D979132C4165896753E72BD1C
   ```

------
#### [ Ubuntu ]

1. Mettez à jour vos packages logiciels existants, le cas échéant, à l’aide de la commande suivante :

   ```
   sudo apt update
   ```

1. Si nécessaire, installez les packages préalables à l’aide de la commande suivante :

   ```
   sudo apt install busybox iasl -y
   ```

1. Exécutez la commande `iasl` suivante pour produire une sortie à partir de la table ACPI :

   ```
   sudo iasl -p ./SSDT2 -d /sys/firmware/acpi/tables/SSDT2
   ```

1. Exécutez la commande suivante pour vérifier la sortie de la commande `iasl` :

   ```
   cat SSDT2.dsl
   ```

   La sortie doit fournir l’espace d’adressage requis pour récupérer l’identificateur de génération de machine virtuelle :

   ```
   Intel ACPI Component Architecture
   ASL+ Optimizing Compiler/Disassembler version 20190509
   Copyright (c) 2000 - 2019 Intel Corporation
   
   File appears to be binary: found 32 non-ASCII characters, disassembling
   Binary file appears to be a valid ACPI table, disassembling
   Input file /sys/firmware/acpi/tables/SSDT2, Length 0x7B (123) bytes
   ACPI: SSDT 0x0000000000000000 00007B (v01 AMAZON AMZNSSDT 00000001 AMZN 00000001)
   Pass 1 parse of [SSDT]
   Pass 2 parse of [SSDT]
   Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
   
   Parsing completed
   Disassembly completed
   ASL Output:    ./SSDT2.dsl - 1065 bytes
   $
   /*
   * Intel ACPI Component Architecture
   * AML/ASL+ Disassembler version 20190509 (64-bit version)
   * Copyright (c) 2000 - 2019 Intel Corporation
   *
   * Disassembling to symbolic ASL+ operators
   *
   * Disassembly of /sys/firmware/acpi/tables/SSDT2, Tue Mar 29 16:15:14 2022
   *
   * Original Table Header:
   *     Signature        "SSDT"
   *     Length           0x0000007B (123)
   *     Revision         0x01
   *     Checksum         0xB8
   *     OEM ID           "AMAZON"
   *     OEM Table ID     "AMZNSSDT"
   *     OEM Revision     0x00000001 (1)
   *     Compiler ID      "AMZN"
   *     Compiler Version 0x00000001 (1)
   */
   DefinitionBlock ("", "SSDT", 1, "AMAZON", "AMZNSSDT", 0x00000001)
   {
   Scope (\_SB)
   {
       Device (VMGN)
       {
           Name (_CID, "VM_Gen_Counter")  // _CID: Compatible ID
           Name (_DDN, "VM_Gen_Counter")  // _DDN: DOS Device Name
           Name (_HID, "AMZN0000")  // _HID: Hardware ID
           Name (ADDR, Package (0x02)
           {
               0xFED01000,
               Zero
           })
       }
   }
   }
   ```

1. (Facultatif) Augmentez les autorisations de votre terminal pour les étapes restantes à l’aide de la commande suivante :

   ```
   sudo -s
   ```

1. Utilisez les commandes suivantes pour stocker l’espace d’adressage précédemment collecté :

   ```
   VMGN_ADDR=0xFED01000
   ```

1. Utilisez la commande suivante pour parcourir l’espace d’adressage et créer l’identificateur de génération de machine virtuelle :

   ```
   for offset in 0x0 0x4 0x8 0xc; do busybox devmem $(($VMGN_ADDR + $offset)) | sed 's/0x//' | sed -z '$ s/\n$//' >> vmgenid; done
   ```

1. Récupérez l’identificateur de génération de machine virtuelle à partir du fichier de sortie à l’aide de la commande suivante :

   ```
   cat vmgenid ; echo
   ```

   Votre sortie doit ressembler à ce qui suit :

   ```
   EC2F335D979132C4165896753E72BD1C
   ```

------

**Exemple : récupérer l’identifiant de génération de la machine virtuelle à partir de Windows**  


Vous pouvez créer un exemple d’application pour récupérer l’identificateur de génération de machine virtuelle à partir de vos instances exécutant Windows. Pour plus d’informations, consultez [Obtention de l’identificateur de génération de l’ordinateur virtuel](https://learn.microsoft.com/en-us/windows/win32/hyperv_v2/virtual-machine-generation-identifier#obtaining-the-virtual-machine-generation-identifier) dans la documentation Microsoft.