

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 des commandes lorsque vous lancez une instance EC2 avec des données utilisateur
<a name="user-data"></a>

Lorsque vous lancez une instance Amazon EC2, vous pouvez transmettre à l’instance des données utilisateur utilisées pour effectuer des tâches de configuration automatisées ou pour exécuter des scripts après le démarrage de l’instance.

Si vous êtes intéressé par des scénarios d'automatisation plus complexes, vous pourriez envisager CloudFormation. Pour plus d’informations, consultez la section [Déploiement d’applications sur Amazon EC2 avec CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html) dans le *Guide de l’utilisateur AWS CloudFormation *.

Sur les instances Linux, vous pouvez transmettre deux types de données utilisateur à Amazon EC2 : les scripts shell et les directives cloud-init. Vous pouvez également transmettre ces données à l’assistant de lancement d’instance sous forme de texte brut, de fichier (utile pour lancer des instances avec les outils de ligne de commande) ou de texte codé en base64 (pour les appels d’API).

Sur les instances Windows, les agents de lancement gèrent les scripts de données utilisateur.

**Considérations**
+ Les données utilisateur sont traitées comme des données opaques : ce que vous donnez est ce que vous obtenez en retour. Il appartient à l’instance de l’interpréter.
+ Les données utilisateur doivent être codées en base64. La console Amazon EC2 peut effectuer l’encodage base64 pour vous ou accepter les entrées codées en base64. Si vous récupérez les données utilisateur à l’aide des métadonnées d’instance ou de la console, elles sont automatiquement décodées en base64 pour vous.
+ Les données d’utilisateur sont limitées à 16 Ko en format brut, avant qu’elles soient encodées en base64. La taille d’une chaîne de longueur *n* après l’encodage base64 est ceil(*n*/3)\$14.
+ Les données utilisateur sont un attribut d’instance. Si vous créez une AMI à partir d’une instance, les données utilisateur d’instance ne sont pas incluses dans l’AMI.

## Données utilisateur dans le AWS Management Console
<a name="user-data-console"></a>

Vous pouvez spécifier des données utilisateur d’instance lorsque vous lancez l’instance. Si le volume racine de l’instance est un volume EBS, vous pouvez également arrêter l’instance et mettre à jour ses données utilisateur.

### Indiquer les données de l’utilisateur de l’instance au moment du lancement à l’aide de l’assistant de lancement
<a name="user-data-launch-instance-wizard"></a>

Vous pouvez indiquer les données de l’utilisateur lorsque vous lancez une instance à l’aide de l’assistant de lancement dans la console EC2. Pour indiquer les données de l’utilisateur au moment du lancement, suivez la procédure de [lancement d’une instance](ec2-launch-instance-wizard.md). Le champ **User data** (Données utilisateur) se trouve dans la section [Détails avancés](ec2-instance-launch-parameters.md#liw-advanced-details) de l’assistant de lancement d’instance. Entrez votre PowerShell script dans le champ **Données utilisateur**, puis terminez la procédure de lancement de l'instance.

Dans la capture d’écran suivante du champ **Données utilisateur**, l’exemple de script crée un fichier dans le dossier temporaire Windows, en utilisant la date et l’heure actuelles dans le nom de fichier. Lorsque vous incluez `<persist>true</persist>`, le script est exécuté chaque fois que vous redémarrez ou démarrez l’instance. Si vous ne cochez pas la case **Les données de l’utilisateur ont déjà été encodées en base64**, la console Amazon EC2 effectue l’encodage en base64 pour vous.

![\[Champ de texte des données utilisateur Advance Details (Détails avancés).\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/images/configure_ec2config_userdata.png)


Pour de plus amples informations, veuillez consulter [Indiquer les données de l’utilisateur de l’instance au moment du lancement à l’aide de l’assistant de lancement](#user-data-launch-instance-wizard). Pour un exemple de Linux utilisant le AWS CLI, voir[Les données utilisateur et le AWS CLI](#user-data-api-cli). Pour un exemple de Windows utilisant les outils pour Windows PowerShell, voir[Données utilisateur et outils pour Windows PowerShell](#user-data-powershell).

### Affichage et mise à jour des données utilisateur d’instance
<a name="user-data-view-change"></a>

Vous pouvez afficher les données utilisateur d’instance pour n’importe quelle instance, et vous pouvez mettre à jour les données utilisateur d’instance pour une instance arrêtée.

**Pour mettre à jour les données utilisateur pour une instance à l’aide de la console**

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

1. Dans le panneau de navigation, choisissez **Instances**.

1. Sélectionnez l’instance et choisissez **Actions**, **État de l’instance**, **Arrêter l’instance**.
**Avertissement**  
Lorsque vous arrêtez une instance, les données relatives aux volumes de stockage de l'instance sont perdues. Pour conserver ces données, sauvegardez-les dans un espace de stockage permanent.

1. Lorsque vous êtes invité à confirmer l’opération, choisissez **Arrêter**. L’arrêt de l’instance peut prendre quelques minutes.

1. Alors que l’instance est toujours sélectionnée, choisissez **Actions**, **Instance settings (Paramètres de l’instance)**, **Edit user data (Modifier les données utilisateur)**. Vous ne pouvez changer les données utilisateur si l’instance est en cours d’exécution, mais vous pouvez les voir.

1. Dans la boîte de dialogue **Modifier les données utilisateur**, mettez à jour les données utilisateur, puis cliquez sur **Enregistrer**. Pour exécuter des scripts de données utilisateur chaque fois que vous redémarrez ou démarrez l’instance, ajoutez `<persist>true</persist>`, comme illustré dans l’exemple suivant.  
![\[Boîte de dialogue Edit User Data (Modifier les données utilisateur).\]](http://docs.aws.amazon.com/fr_fr/AWSEC2/latest/UserGuide/images/view-change-user-data.png)

1. Démarrez l’instance. Si vous avez activé l’exécution des données utilisateur pour les redémarrages ou démarrages suivants, les scripts de données utilisateur mis à jour sont exécutés dans le cadre du processus de démarrage de l’instance.

## Comment Amazon EC2 gère les données utilisateur pour les instances Linux
<a name="userdata-linux"></a>

Les exemples suivants utilisent les données utilisateur pour exécuter des commandes qui configurent un serveur LAMP au lancement de l’instance. Dans chaque exemple, les tâches suivantes sont exécutées :
+ Les packages logiciels de distribution sont mis à jour.
+ Les packages de serveur Web, `php` et `mariadb` sont installés.
+ Le service `httpd` est démarré et activé.
+ L’utilisateur `ec2-user` est ajouté au groupe Apache.
+ La propriété et les autorisations sur les fichiers appropriées sont définies pour le répertoire web et les fichiers qu’il contient.
+ Une page Web simple est créée pour tester le serveur Web et le moteur PHP.

**Topics**
+ [

### Conditions préalables
](#user-data-requirements)
+ [

### Données utilisateur et scripts shell
](#user-data-shell-scripts)
+ [

### Mettre à jour les données de l’utilisateur de l’instance
](#user-data-modify)
+ [

### Directives sur les données utilisateur et Cloud-Init
](#user-data-cloud-init)
+ [

### Les données utilisateur et le AWS CLI
](#user-data-api-cli)
+ [

### Combiner des scripts shell et des directives cloud-init
](#user-data-mime-multi)

### Conditions préalables
<a name="user-data-requirements"></a>

Les exemples de cette rubrique supposent ce qui suit :
+ Votre instance possède un nom DNS public auquel on peut accéder à partir d’Internet.
+ Le groupe de sécurité associé à votre instance est configuré pour autoriser le trafic SSH (port 22) afin de vous permettre de vous connecter à ladite instance pour afficher les fichiers journaux de sortie.
+ Votre instance est lancée avec une AMI Amazon Linux. Les commandes et directives peuvent ne pas fonctionner pour les autres distributions Linux. Pour plus d’informations sur les autres distributions, telles que leur prise en charge de cloud-init, consultez la documentation relative à la distribution spécifique.

### Données utilisateur et scripts shell
<a name="user-data-shell-scripts"></a>

Si vous connaissez le scripting de shell, il s’agit de la méthode la plus simple et la plus complète pour envoyer des instructions à une instance lors du lancement. L’ajout de ces tâches au moment du démarrage augmente le temps que cela prend pour démarrer l’instance. Vous devriez laisser s’écouler quelques minutes supplémentaires pour que les tâches s’effectuent avant de vérifier que le script utilisateur a fini avec succès.

**Important**  
Par défaut, les scripts de données utilisateur et les directives cloud init s’exécutent uniquement pendant le cycle de démarrage lorsque vous lancez une instance pour la première fois. Vous pouvez mettre à jour votre configuration pour vous assurer que vos scripts de données utilisateur et vos directives cloud-init s’exécutent chaque fois que vous redémarrez votre instance. Pour plus d'informations, consultez [Comment utiliser les données utilisateur pour exécuter automatiquement un script à chaque redémarrage de mon instance Linux Amazon EC2 ?](https://repost.aws/knowledge-center/execute-user-data-ec2) dans le AWS Knowledge Center.

Les scripts shell de données utilisateur doivent commencer par les caractères `#!` et le chemin vers interpréteur que vous avez choisi pour la lecture du script (généralement **/bin/bash)**). Pour obtenir une présentation des scripts shell, consultez le [manuel de référence Bash](https://www.gnu.org/software/bash/manual/bash.html) sur le site web du *système d’exploitation GNU*.

Les scripts entrés en tant que données utilisateur sont exécutés en tant qu’utilisateur root, donc n’utilisez pas la commande **sudo** dans le script. N’oubliez pas que tous les fichiers que vous créez seront la propriété de l’utilisateur root. Si vous avez besoin qu’un utilisateur non root ait accès aux fichiers, vous devez modifier les autorisations en conséquence dans le script. Par ailleurs, étant donné que le script n’est pas exécuté de façon interactive, vous ne pouvez pas inclure des commandes qui nécessitent les réactions de l’utilisateur (comme **yum update** sans l’indicateur `-y`).

Si vous utilisez une AWS API, y compris la AWS CLI, dans un script de données utilisateur, vous devez utiliser un profil d'instance lors du lancement de l'instance. Un profil d'instance fournit les AWS informations d'identification appropriées requises par le script de données utilisateur pour émettre l'appel d'API. Pour plus d’informations, consultez la section [Utilisation de profils d’instance](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) dans le Guide de l’utilisateur IAM. Les autorisations que vous attribuez au rôle IAM dépendent des services que vous appelez avec l’API. Pour de plus amples informations, veuillez consulter [Rôles IAM pour Amazon EC2](iam-roles-for-amazon-ec2.md).

Le fichier journal de sortie cloud-init () capture la sortie de la console, si bien que vous pouvez facilement déboguer vos scripts après un lancement si l’instance ne se comporte pas comme vous le vouliez. Pour afficher le fichier journal,[connexion à l’instance](connect-to-linux-instance.md)et ouvrez`/var/log/cloud-init-output.log`.

Lorsqu’un script de données utilisateur est traité, il est copié dans et exécuté à partir de l `/var/lib/cloud/instances/instance-id/`. Le script n’est pas supprimé après son exécution. Veillez à supprimer les scripts de données utilisateur dans `/var/lib/cloud/instances/instance-id/` avant de créer une AMI à partir de l’instance. Dans le cas contraire, le script figurera dans ce répertoire sur toute instance lancée à partir de l’AMI.

### Mettre à jour les données de l’utilisateur de l’instance
<a name="user-data-modify"></a>

Pour mettre à jour les données de l’utilisateur de l’instance, vous devez d’abord arrêter l’instance. Si l’instance est en cours d’exécution, vous pouvez afficher les données utilisateur, mais vous ne pouvez pas les modifier.

**Avertissement**  
Lorsque vous arrêtez une instance, les données relatives aux volumes de stockage de l'instance sont perdues. Pour conserver ces données, sauvegardez-les dans un espace de stockage permanent.

**Pour modifier les données utilisateur d’instance**

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

1. Dans le panneau de navigation, choisissez **Instances**.

1. Sélectionnez l’instance et choisissez **État de l’instance**, **Arrêter l’instance**. Si cette option est désactivée, l’instance est déjà arrêtée ou son volume racine est un volume de stockage d’instances.

1. Lorsque vous êtes invité à confirmer l’opération, choisissez **Arrêter**. L’arrêt de l’instance peut prendre quelques minutes.

1. Alors que l’instance est toujours sélectionnée, choisissez **Actions**, **Instance settings (Paramètres de l’instance)**, **Edit user data (Modifier les données utilisateur)**.

1. Modifiez les données utilisateur selon vos besoins, puis choisissez **Save (Enregistrer)**.

1. Démarrez l’instance. Les nouvelles données utilisateur sont visibles sur votre instance, après son démarrage. Par contre, les scripts des données utilisateur ne sont pas exécutés.

### Directives sur les données utilisateur et Cloud-Init
<a name="user-data-cloud-init"></a>

Le package cloud-init configure les aspects spécifiques d’une nouvelle instance Amazon Linux lorsqu’elle est lancée. Il configure plus particulièrement le fichier `.ssh/authorized_keys` pour l’utilisateur ec2 afin que vous puissiez vous connecter avec votre clé privée. Pour plus d’informations sur les tâches de configuration exécutées par le package cloud init pour les instances Amazon Linux, consultez la documentation suivante :
+ **Amazon Linux 2023** : [cloud-init personnalisé](https://docs.aws.amazon.com/linux/al2023/ug/cloud-init.html)
+ **Amazon Linux 2** : [utilisation de cloud-init sur Amazon Linux 2](https://docs.aws.amazon.com/linux/al2/ug/amazon-linux-cloud-init.html)

Les directives d’utilisateur cloud-init peuvent être transférées vers une instance au moment du lancement tout comme un script, même si la syntaxe est différente. Pour plus d'informations sur cloud-init, consultez. [https://cloudinit.readthedocs.org/en/latest/index.html](https://cloudinit.readthedocs.org/en/latest/index.html)

**Important**  
Par défaut, les scripts de données utilisateur et les directives cloud init s’exécutent uniquement pendant le cycle de démarrage lorsque vous lancez une instance pour la première fois. Vous pouvez mettre à jour votre configuration pour vous assurer que vos scripts de données utilisateur et vos directives cloud-init s’exécutent chaque fois que vous redémarrez votre instance. Pour plus d'informations, consultez [Comment utiliser les données utilisateur pour exécuter automatiquement un script à chaque redémarrage de mon instance Linux Amazon EC2 ?](https://repost.aws/knowledge-center/execute-user-data-ec2) dans le AWS Knowledge Center.

L’ajout de ces tâches au moment du démarrage augmente le temps que cela prend pour démarrer une instance. Vous devriez laisser s’écouler quelques minutes supplémentaires pour que les tâches s’effectuent avant de vérifier que vos directives sur les données utilisateur sont terminées.

**Pour transmettre les directives cloud-init à une instance Amazon Linux**

1. Suivez la procédure pour [lancer une instance](ec2-launch-instance-wizard.md). Le champ **User data** (Données utilisateur) se trouve dans la section [Détails avancés](ec2-instance-launch-parameters.md#liw-advanced-details) de l’assistant de lancement d’instance. Saisissez le texte de la directive cloud-init dans le champ **User data** (Données utilisateur), puis terminez la procédure de lancement de l’instance.

   Dans les exemples ci-dessous, les directives créent et configurent un serveur Web sur Amazon Linux. La ligne `#cloud-config` en haut est requise pour identifier les commandes en tant que directives cloud-init.

------
#### [ AL2023 ]

   ```
   #cloud-config
   package_update: true
   package_upgrade: all
   	
   packages:
   - httpd
   - mariadb105-server
   - php8.1
   - php8.1-mysqlnd
   
   runcmd:
   - systemctl start httpd
   - systemctl enable httpd
   - [ sh, -c, "usermod -a -G apache ec2-user" ]
   - [ sh, -c, "chown -R ec2-user:apache /var/www" ]
   - chmod 2775 /var/www
   - [ find, /var/www, -type, d, -exec, chmod, 2775, {}, \; ]
   - [ find, /var/www, -type, f, -exec, chmod, 0664, {}, \; ]
   - [ sh, -c, 'echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php' ]
   ```

------
#### [ AL2 ]

   ```
   #cloud-config
   package_update: true
   package_upgrade: all
   	
   packages:
   - httpd
   - mariadb-server
   	
   runcmd:
   - [ sh, -c, "amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2" ]
   - systemctl start httpd
   - systemctl enable httpd
   - [ sh, -c, "usermod -a -G apache ec2-user" ]
   - [ sh, -c, "chown -R ec2-user:apache /var/www" ]
   - chmod 2775 /var/www
   - [ find, /var/www, -type, d, -exec, chmod, 2775, {}, \; ]
   - [ find, /var/www, -type, f, -exec, chmod, 0664, {}, \; ]
   - [ sh, -c, 'echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php' ]
   ```

------

1. Laissez assez de temps à l’instance pour lancer et exécuter les directives dans vos données utilisateur, puis vérifiez que vos directives ont terminé les tâches que vous souhaitiez.

   Pour notre exemple, dans un navigateur Web, saisissez l’URL du fichier test PHP que les directives ont créé. Cette URL est l’adresse DNS publique de votre instance suivie par une barre oblique et le nom du fichier.

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   Vous devriez voir la page d’informations PHP. Si vous ne pouvez pas voir la page d’informations PHP, vérifiez que le groupe de sécurité que vous utilisez contient une règle pour permettre le trafic HTTP (port 80). Pour de plus amples informations, veuillez consulter [Configurer les règles des groupes de sécurité](changing-security-group.md#add-remove-security-group-rules).

1. (Facultatif) Si vos directives n’ont pas accompli les tâches que vous attendiez ou si vous voulez uniquement vérifier que vos directives se sont terminées sans erreur, [connectez-vous à l’instance](connect-to-linux-instance.md), examinez le fichier journal de sortie (`/var/log/cloud-init-output.log`) et recherchez les messages erronés dans les résultats. Pour plus d’informations sur le débogage, vous pouvez ajouter la ligne suivante à vos directives :

   ```
   output : { all : '| tee -a /var/log/cloud-init-output.log' }
   ```

   Cette directive envoie le résultat **runcmd** à `/var/log/cloud-init-output.log`.

### Les données utilisateur et le AWS CLI
<a name="user-data-api-cli"></a>

Vous pouvez utiliser le AWS CLI pour spécifier, modifier et afficher les données utilisateur de votre instance. Pour plus d’informations sur l’affichage des données utilisateur de votre instance à l’aide des métadonnées d’instance, consultez [Accéder aux métadonnées d’une instance EC2](instancedata-data-retrieval.md).

Sous Windows, vous pouvez utiliser le AWS Tools for Windows PowerShell au lieu du AWS CLI. Pour plus d’informations, consultez [Données utilisateur et outils pour Windows PowerShell](#user-data-powershell).

**Exemple : spécification des données utilisateur au moment du lancement**  
Pour spécifier les données utilisateur lorsque vous lancez l’instance, utilisez la commande [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) avec le paramètre `--user-data`. Avec**run-instances**, il AWS CLI effectue le codage base64 des données utilisateur pour vous.

L’exemple suivant montre comment définir un script en tant que chaîne sur la ligne de commande :

```
aws ec2 run-instances --image-id ami-abcd1234 --count 1 --instance-type m3.medium \
    --key-name my-key-pair --subnet-id subnet-abcd1234 --security-group-ids sg-abcd1234 \
    --user-data echo user data
```

L’exemple suivant montre comment définir un script en utilisant un fichier texte. Assurez-vous d’utiliser le préfixe `file://` pour spécifier le fichier.

```
aws ec2 run-instances --image-id ami-abcd1234 --count 1 --instance-type m3.medium \
    --key-name my-key-pair --subnet-id subnet-abcd1234 --security-group-ids sg-abcd1234 \
    --user-data file://my_script.txt
```

L’exemple suivant est celui d’un fichier texte avec un script shell.

```
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
```

**Exemple : Modification des données utilisateur d’une instance arrêtée**  
Vous pouvez modifier les données utilisateur d'une instance arrêtée à l'aide de la [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html)commande. Avec**modify-instance-attribute**, le AWS CLI n'effectue pas le codage base64 des données utilisateur pour vous.
+ Sur un ordinateur **Linux** utilisez la commande base64 pour encoder les données utilisateur.

  ```
  base64 my_script.txt >my_script_base64.txt
  ```
+ Sur un ordinateur **Windows**, utilisez la commande certutil pour encoder les données utilisateur. Avant de pouvoir utiliser ce fichier avec le AWS CLI, vous devez supprimer la première ligne (CERTIFICAT DE DÉBUT) et la dernière (CERTIFICAT DE FIN).

  ```
  certutil -encode my_script.txt my_script_base64.txt
  notepad my_script_base64.txt
  ```

Utilisez les paramètres `--attribute` et `--value` afin d’utiliser le fichier texte encodé pour spécifier les données utilisateur. Assurez-vous d’utiliser le préfixe `file://` pour spécifier le fichier.

```
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --value file://my_script_base64.txt
```

**Exemple : Effacer les données utilisateur d’une instance arrêtée**  
Pour supprimer les données utilisateur existantes, utilisez la [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html)commande suivante :

```
aws ec2 modify-instance-attribute --instance-id i-1234567890abcdef0 --user-data Value=
```

**Exemple : Affichage des données utilisateur**  
Pour récupérer les données utilisateur d'une instance, utilisez la [describe-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-attribute.html)commande. Avec**describe-instance-attribute**, le AWS CLI n'effectue pas de décodage base64 des données utilisateur pour vous.

```
aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData
```

Voici un exemple de sortie avec les données utilisateur base64 encodées.

```
{
    "UserData": {
        "Value": "IyEvYmluL2Jhc2gKeXVtIHVwZGF0ZSAteQpzZXJ2aWNlIGh0dHBkIHN0YXJ0CmNoa2NvbmZpZyBodHRwZCBvbg=="
    },
    "InstanceId": "i-1234567890abcdef0"
}
```
+ Sur un ordinateur **Linux**, utilisez l’option `--query` pour obtenir les données utilisateur encodées et la commande base64 pour les décoder.

  ```
  aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --output text --query "UserData.Value" | base64 --decode
  ```
+ Sur un ordinateur **Windows**, utilisez l’option `--query` pour obtenir les données utilisateur codées et la commande certutil pour les décoder. Notez que la sortie encodée est stockée dans un fichier et que la sortie décodée est stockée dans un autre fichier.

  ```
  aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --output text --query "UserData.Value" >my_output.txt
  certutil -decode my_output.txt my_output_decoded.txt
  type my_output_decoded.txt
  ```

Voici un exemple de sortie.

```
#!/bin/bash
yum update -y
service httpd start
chkconfig httpd on
```

### Combiner des scripts shell et des directives cloud-init
<a name="user-data-mime-multi"></a>

Par défaut, vous ne pouvez inclure qu’un seul type de contenu à la fois dans les données utilisateur. Toutefois, vous pouvez utiliser les types de contenu `text/cloud-config` et `text/x-shellscript` dans un fichier MIME en plusieurs parties pour inclure à la fois un script shell et des directives cloud-init dans vos données utilisateur.

Le format MIME en plusieurs parties est représenté ci-dessous.

```
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
	
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
	
#cloud-config
cloud-init directives
	
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
	
#!/bin/bash
shell script commands
--//--
```

Par exemple, les données utilisateur suivantes incluent des directives cloud-init et un script shell bash. Les directives cloud-init créent un fichier (`/test-cloudinit/cloud-init.txt`) et y écrivent `Created by cloud-init`. Le script shell bash crée un fichier (`/test-userscript/userscript.txt`) et y écrit `Created by bash shell script`.

```
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
	
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
	
#cloud-config
runcmd:
- [ mkdir, /test-cloudinit ]
write_files:
- path: /test-cloudinit/cloud-init.txt
content: Created by cloud-init
	
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
	
#!/bin/bash
mkdir test-userscript
touch /test-userscript/userscript.txt
echo "Created by bash shell script" >> /test-userscript/userscript.txt
--//--
```

## Comment Amazon EC2 gère les données utilisateur pour les instances Windows
<a name="ec2-windows-user-data"></a>

Sur les instances Windows, l’agent de lancement effectue les tâches liées aux données de l’utilisateur. Pour plus d’informations, consultez les ressources suivantes :
+ [EC2Lancer la v2](ec2launch-v2.md) 
+ [EC2Lancement](ec2launch.md) 
+ [EC2Service de configuration](ec2config-service.md)

Pour des exemples d'assemblage d'une `UserData` propriété dans un CloudFormation modèle, voir Propriété codée en [Base64 et UserData Propriété codée](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html#scenario-userdata-base64) en [Base64 avec AccessKey ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html#scenario-userdata-base64-with-keys) et. UserData SecretKey

Pour un exemple d’exécution de commandes sur une instance au sein d’un groupe Auto Scaling qui fonctionne avec des hooks de cycle de vie, veuillez consulter [Didacticiel : configurer les données utilisateur pour récupérer l’état du cycle de vie cible via les métadonnées de l’instance](https://docs.aws.amazon.com/autoscaling/ec2/userguide/tutorial-lifecycle-hook-instance-metadata.html) dans le *Guide de l’utilisateur d’Amazon EC2 Auto Scaling*.

**Topics**
+ [

### Scripts de données utilisateur
](#user-data-scripts)
+ [

### Données utilisateur compressées
](#user-data-compressed)
+ [

### Exécution de données utilisateur
](#user-data-execution)
+ [

### Données utilisateur et outils pour Windows PowerShell
](#user-data-powershell)

### Scripts de données utilisateur
<a name="user-data-scripts"></a>

Pour que `EC2Config` ou `EC2Launch` puisse exécuter des scripts, vous devez inclure le script dans une balise spéciale lorsque vous l’ajoutez aux données utilisateur. La balise que vous utilisez varie selon que les commandes sont exécutées dans une fenêtre d'invite de commandes (commandes par lots) ou qu'elles utilisent WindowsPowerShell.

Si vous spécifiez à la fois un script batch et un PowerShell script Windows, le script batch s'exécute en premier et le PowerShell script Windows s'exécute ensuite, quel que soit l'ordre dans lequel ils apparaissent dans les données utilisateur de l'instance.

Si vous utilisez une AWS API, y compris le AWS CLI, dans un script de données utilisateur, vous devez utiliser un profil d'instance lors du lancement de l'instance. Un profil d'instance fournit les AWS informations d'identification appropriées requises par le script de données utilisateur pour effectuer l'appel d'API. Pour de plus amples informations, veuillez consulter [Profils d’instance](iam-roles-for-amazon-ec2.md#ec2-instance-profile). Les autorisations que vous attribuez au rôle IAM dépendent des services que vous appelez avec l’API. Pour de plus amples informations, veuillez consulter [Rôles IAM pour Amazon EC2](iam-roles-for-amazon-ec2.md).

**Topics**
+ [

#### Syntaxe des scripts par lots
](#user-data-batch-scripts)
+ [

#### Syntaxe des PowerShell scripts Windows
](#user-data-powershell-scripts)
+ [

#### Syntaxe pour les scripts de configuration YAML
](#user-data-yaml-scripts)
+ [

#### Encodage Base64
](#user-data-base64-encoding)

#### Syntaxe des scripts par lots
<a name="user-data-batch-scripts"></a>

Spécifiez un script par lots à l’aide de la balise `script`. Séparez les commandes à l’aide de sauts de ligne, comme indiqué dans l’exemple suivant.

```
<script>
    echo Current date and time >> %SystemRoot%\Temp\test.log
    echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>
```

Par défaut, les scripts de données utilisateur s’exécutent une seule fois, lorsque vous lancez l’instance. Pour exécuter des scripts de données utilisateur chaque fois que vous redémarrez ou démarrez l’instance, ajoutez `<persist>true</persist>` aux données utilisateur.

```
<script>
    echo Current date and time >> %SystemRoot%\Temp\test.log
    echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>
<persist>true</persist>
```

**EC2Lancer l'agent v2**  
Pour exécuter un script de données utilisateur XML en tant que processus détaché avec la **executeScript** tâche EC2 Launch v2 dans l'`UserData`étape, ajoutez `<detach>true</detach>` les données utilisateur.

**Note**  
La balise detach n’est pas prise en charge par les agents de lancement précédents.

```
<script>
    echo Current date and time >> %SystemRoot%\Temp\test.log
    echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>
<detach>true</detach>
```

#### Syntaxe des PowerShell scripts Windows
<a name="user-data-powershell-scripts"></a>

 AWS Windows AMIs inclut le [AWS Tools for Windows PowerShell](https://aws.amazon.com/powershell/), afin que vous puissiez spécifier ces applets de commande dans les données utilisateur. Si vous associez un rôle IAM à votre instance, vous n'avez pas besoin de spécifier les informations d'identification pour les applets de commande, car les applications qui s'exécutent sur l'instance utilisent les informations d'identification du rôle pour accéder aux AWS ressources (par exemple, les compartiments Amazon S3).

Spécifiez un PowerShell script Windows à l'aide de la `<powershell>` balise. Séparez les commandes à l’aide de sauts de ligne. La balise `<powershell>` est sensible à la casse.

Par exemple :

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
```

Par défaut, les scripts de données utilisateur sont exécutés une seule fois lorsque vous lancez l’instance. Pour exécuter des scripts de données utilisateur chaque fois que vous redémarrez ou démarrez l’instance, ajoutez `<persist>true</persist>` aux données utilisateur.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

Vous pouvez spécifier un ou plusieurs PowerShell arguments à l'aide de la `<powershellArguments>` balise. Si aucun argument n'est transmis, EC2 Launch et EC2 Launch v2 ajoutent l'argument suivant par défaut :`-ExecutionPolicy Unrestricted`.

**Exemple :**

```
<powershell>
    $file = $env:SystemRoot + "\Temp" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<powershellArguments>-ExecutionPolicy Unrestricted -NoProfile -NonInteractive</powershellArguments>
```

**EC2Lancer l'agent v2**  
Pour exécuter un script de données utilisateur XML en tant que processus détaché avec la **executeScript** tâche EC2 Launch v2 dans l'`UserData`étape, ajoutez `<detach>true</detach>` les données utilisateur.

**Note**  
La balise detach n’est pas prise en charge par les agents de lancement précédents.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<detach>true</detach>
```

#### Syntaxe pour les scripts de configuration YAML
<a name="user-data-yaml-scripts"></a>

Si vous utilisez EC2 Launch v2 pour exécuter des scripts, vous pouvez utiliser le format YAML. Pour consulter les tâches de configuration, les détails et les exemples relatifs à EC2 Launch v2, consultez[EC2Configuration des tâches de lancement de la version 2](ec2launch-v2-settings.md#ec2launch-v2-task-configuration).

Spécifiez un script YAML avec la tâche `executeScript`.

**Exemple de syntaxe YAML pour exécuter un script PowerShell ** 

```
version: 1.0
tasks:
- task: executeScript
  inputs:
  - frequency: always
    type: powershell
    runAs: localSystem
    content: |-
      $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
      New-Item $file -ItemType file
```

**Exemple de syntaxe YAML pour exécuter un script Batch**

```
version: 1.1
tasks:
- task: executeScript
  inputs:
  - frequency: always
    type: batch
    runAs: localSystem
    content: |-
      echo Current date and time >> %SystemRoot%\Temp\test.log
      echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
```

#### Encodage Base64
<a name="user-data-base64-encoding"></a>

Si vous utilisez l’API Amazon EC2 ou un outil qui n’effectue pas l’encodage base64 des données utilisateur, vous devez encoder les données utilisateur. Si ce n’est pas le cas, une erreur indiquant qu’aucune balise `script` ou `powershell` à exécuter n’a été trouvée est consignée. Voici un exemple d'encodage à l'aide de Windows PowerShell.

```
$UserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Script))
```

Voici un exemple de décodage à l'aide PowerShell de.

```
$Script = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($UserData))
```

Pour plus d'informations sur le codage base64, consultez [https://www.ietf. org/rfc/rfc](https://www.ietf.org/rfc/rfc4648.txt)4648.txt.

### Données utilisateur compressées
<a name="user-data-compressed"></a>

EC2Launch v2 prend en charge les données utilisateur compressées comme méthode pour soumettre des données utilisateur supérieures à la limite de 16 Ko imposée par l'IMDS. Pour utiliser cette fonctionnalité, compressez votre script de données utilisateur dans une archive `.zip` et transmettez-la à votre instance EC2. Lorsque EC2 Launch v2 détecte des données utilisateur compressées, il décompresse automatiquement le script de données utilisateur compressées et l'exécute.

Comme pour les données utilisateur standard, si vous utilisez l’API Amazon EC2 ou un outil qui n’effectue pas de codage base64 des données utilisateur, vous devez encoder vous-même les données utilisateur compressées. Pour plus d’informations sur la limite de taille des données utilisateur et l’encodage base64, consultez la section [Accéder aux métadonnées d’une instance EC2](instancedata-data-retrieval.md).

### Exécution de données utilisateur
<a name="user-data-execution"></a>

Par défaut, l'exécution AMIs des données utilisateur est activée sur tous les systèmes AWS Windows lors du lancement initial. Vous pouvez spécifier que les scripts de données utilisateur doivent être exécutés au prochain réamorçage ou redémarrage de l’instance. Vous pouvez également spécifier que les scripts de données utilisateur doivent être exécutés chaque fois que l’instance est réamorcée ou redémarre.

**Note**  
Les données utilisateur ne sont pas activées pour être exécutées par défaut après le lancement initial. Pour activer l’exécution des données utilisateur lorsque vous redémarrez ou démarrez l’instance, consultez [Exécuter des scripts lors des redémarrages ou démarrages suivants](#user-data-scripts-subsequent).

Les scripts de données utilisateur sont exécutés depuis le compte de l’administrateur local quand un mot de passe aléatoire est généré. Sinon, les scripts de données utilisateur sont exécutés depuis le compte système.

#### Scripts de lancement de l’instance
<a name="user-data-scripts-launch"></a>

Les scripts figurant dans les données utilisateur d’instance sont exécutés lors du lancement initial de l’instance. Si la balise `persist` est trouvée, l’exécution des données utilisateur est activée pour les réamorçages ou démarrages suivants. Les fichiers journaux de EC2 Launch v2, EC2 Launch et EC2 Config contiennent le résultat de la sortie standard et des flux d'erreurs standard.

**EC2Lancer la v2**  
Le fichier journal de EC2 Launch v2 est`C:\ProgramData\Amazon\EC2Launch\log\agent.log`.

**Note**  
Le dossier `C:\ProgramData` peut être masqué. Pour afficher le dossier, vous devez afficher les fichiers et les dossiers masqués.

Les informations suivantes sont enregistrées lorsque les données utilisateur sont exécutées :
+ `Info: Converting user-data to yaml format` – Si les données utilisateur ont été fournies au format XML
+ `Info: Initialize user-data state` – Début de l’exécution des données utilisateur
+ `Info: Frequency is: always` – Si la tâche de données utilisateur est en cours d’exécution à chaque démarrage
+ `Info: Frequency is: once` – Si la tâche de données utilisateur est exécutée une seule fois
+ `Stage: postReadyUserData execution completed` – Fin de l’exécution des données utilisateur

**EC2Lancement**  
Le fichier journal de EC2 Launch est`C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log`.

Le dossier `C:\ProgramData` peut être masqué. Pour afficher le dossier, vous devez afficher les fichiers et les dossiers masqués.

Les informations suivantes sont enregistrées lorsque les données utilisateur sont exécutées :
+ `Userdata execution begins` – Début de l’exécution des données utilisateur
+ `<persist> tag was provided: true` – Si l’identification persist est trouvée
+ `Running userdata on every boot` – Si l’identification persist est trouvée
+ `<powershell> tag was provided.. running powershell content` – Si la balise powershell est trouvée
+ `<script> tag was provided.. running script content` – Si l’identification script est trouvée
+ `Message: The output from user scripts` – Si des scripts de données utilisateur sont exécutés, leur sortie est journalisée

**EC2Config**  
Le fichier journal de EC2 Config est`C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log`. Les informations suivantes sont enregistrées lorsque les données utilisateur sont exécutées :
+ `Ec2HandleUserData: Message: Start running user scripts` – Début de l’exécution des données utilisateur
+ `Ec2HandleUserData: Message: Re-enabled userdata execution` – Si l’identification persist est trouvée
+ `Ec2HandleUserData: Message: Could not find <persist> and </persist>` – Si la balise persist n’est pas trouvée
+ `Ec2HandleUserData: Message: The output from user scripts` – Si des scripts de données utilisateur sont exécutés, leur sortie est journalisée

#### Exécuter des scripts lors des redémarrages ou démarrages suivants
<a name="user-data-scripts-subsequent"></a>

Lorsque vous mettez à jour les données utilisateur d’une instance, le contenu mis à jour est automatiquement répercuté dans les métadonnées de l’instance lors du prochain redémarrage ou démarrage de l’instance. Toutefois, en fonction de l’agent de lancement installé, une configuration supplémentaire peut être nécessaire pour configurer les scripts de données utilisateur à exécuter lors des redémarrages ou démarrages suivants.

Si vous choisissez l’option **Arrêter avec Sysprep**, les scripts de données utilisateur sont exécutés quand l’instance est redémarrée ou démarrée, même si vous n’avez pas activé l’exécution des données utilisateur pour les redémarrages ou démarrages suivants.

Pour plus d’instructions pour activer l’exécution des données utilisateur, sélectionnez l’onglet correspondant à votre agent de lancement.

------
#### [ EC2Launch v2 ]

Contrairement à EC2 Launch v1, EC2 Launch v2 évalue la tâche de données utilisateur à chaque démarrage. Il n’est pas nécessaire de planifier manuellement la tâche relative aux données utilisateur. Les données utilisateur sont exécutées en fonction de la fréquence ou des options de persistance incluses.

Pour les scripts de données utilisateur XML  
Pour exécuter des scripts de données utilisateur à chaque démarrage, ajoutez l’indicateur `<persist>true</persist>` aux données utilisateur. Si l’indicateur de persistance n’est pas inclus, le script de données utilisateur ne s’exécute qu’au démarrage initial.

Pour les données utilisateur YAML  
+ Pour exécuter une tâche dans les données utilisateur au démarrage initial, définissez la valeur `frequency` de la tâche sur `once`.
+ Pour exécuter une tâche dans les données utilisateur à chaque démarrage, définissez la valeur `frequency` de la tâche sur `always`.

------
#### [ EC2Launch ]

1. Connectez-vous à votre instance Windows.

1. Ouvrez une fenêtre de PowerShell commande et exécutez l'une des commandes suivantes :

**Exécuter une fois**  
Pour exécuter les données utilisateur une seule fois lors du prochain démarrage, utilisez l’indicateur `-Schedule`.

   ```
   C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
   ```

**Exécuter lors de tous les démarrages suivants**  
Pour exécuter les données utilisateur lors de tous les démarrages suivants, utilisez l’indicateur `-SchedulePerBoot`.

   ```
   C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -SchedulePerBoot
   ```

1. Déconnectez-vous de votre instance Windows. Pour exécuter les scripts mis à jour au démarrage suivant de l’instance, arrêtez l’instance et mettez à jour les données utilisateur.

------
#### [ EC2Config ]

1. Connectez-vous à votre instance Windows.

1. Ouvrir `C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSetting.exe`.

1. Pour les **données utilisateur**, sélectionnez **Activer UserData l'exécution pour le prochain démarrage du service**.

1. Déconnectez-vous de votre instance Windows. Pour exécuter les scripts mis à jour au démarrage suivant de l’instance, arrêtez l’instance et mettez à jour les données utilisateur.

------

### Données utilisateur et outils pour Windows PowerShell
<a name="user-data-powershell"></a>

Vous pouvez utiliser les Outils pour Windows PowerShell pour spécifier, modifier et afficher les données utilisateur de votre instance. Pour plus d’informations sur l’affichage des données utilisateur de votre instance à l’aide des métadonnées d’instance, consultez [Accéder aux métadonnées d’une instance EC2](instancedata-data-retrieval.md). Pour plus d'informations sur les données utilisateur et le AWS CLI, voir[Les données utilisateur et le AWS CLI](#user-data-api-cli).

**Exemple : Spécification des données utilisateur d’instance au moment du lancement**  
Créez un fichier texte avec les données utilisateur d’instance. Pour exécuter des scripts de données utilisateur chaque fois que vous redémarrez ou démarrez l’instance, ajoutez `<persist>true</persist>`, comme illustré dans l’exemple suivant.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

Pour spécifier les données utilisateur de l'instance lorsque vous lancez votre instance, utilisez la [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html)commande. Cette commande n’effectue pas l’encodage base64 des données utilisateur pour vous. Utilisez les commandes suivantes pour encoder les données utilisateur dans un fichier texte nommé `script.txt`.

```
PS C:\> $Script = Get-Content -Raw script.txt
PS C:\> $UserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Script))
```

Utilisez le paramètre `-UserData` pour transmettre les données utilisateur à la commande **New-EC2Instance**.

```
PS C:\> New-EC2Instance -ImageId ami-abcd1234 -MinCount 1 -MaxCount 1 -InstanceType m3.medium \
    -KeyName my-key-pair -SubnetId subnet-12345678 -SecurityGroupIds sg-1a2b3c4d \
    -UserData $UserData
```

**Exemple : Mise à jour des données utilisateur d’instance pour une instance arrêtée**  
Vous pouvez modifier les données utilisateur d'une instance arrêtée à l'aide de la [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html)commande.

Créez un fichier texte contenant le nouveau script. Utilisez les commandes suivantes pour encoder les données utilisateur dans le fichier texte nommé `new-script.txt`.

```
PS C:\> $NewScript = Get-Content -Raw new-script.txt
PS C:\> $NewUserData = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($NewScript))
```

Utilisez les paramètres `-UserData` et `-Value` pour spécifier les données utilisateur.

```
PS C:\> Edit-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData -Value $NewUserData
```

**Exemple : Affichage des données utilisateur d’instance**  
Pour récupérer les données utilisateur d'une instance, utilisez la [Get-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceAttribute.html)commande.

```
PS C:\> (Get-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData).UserData
```

Voici un exemple de sortie. Notez que les données utilisateur sont encodées.

```
PHBvd2Vyc2hlbGw+DQpSZW5hbWUtQ29tcHV0ZXIgLU5ld05hbWUgdXNlci1kYXRhLXRlc3QNCjwvcG93ZXJzaGVsbD4=
```

Utilisez les commandes suivantes pour stocker les données utilisateur encodées dans une variable, puis les décoder.

```
PS C:\> $UserData_encoded = (Get-EC2InstanceAttribute -InstanceId i-1234567890abcdef0 -Attribute userData).UserData
PS C:\> [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($UserData_encoded))
```

Voici un exemple de sortie.

```
<powershell>
    $file = $env:SystemRoot + "\Temp\" + (Get-Date).ToString("MM-dd-yy-hh-mm")
    New-Item $file -ItemType file
</powershell>
<persist>true</persist>
```

**Exemple : Attribution d’un nouveau nom à l’instance pour correspondre à la valeur de la balise**  
Vous pouvez utiliser la [Get-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Tag.html)commande pour lire la valeur de la balise, renommer l'instance au premier démarrage pour qu'elle corresponde à la valeur de la balise, puis redémarrer. Pour exécuter cette commande avec succès, vous devez avoir un rôle avec les autorisations `ec2:DescribeTags` attachées à l’instance, car les informations sur les identifications sont extraites par l’appel d’API. Pour plus d’informations sur la définition des autorisations à l’aide des rôles IAM, consultez [Attacher un rôle IAM à une instance](attach-iam-role.md).

------
#### [ IMDSv2 ]

```
<powershell>
    [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri 'http://169.254.169.254/latest/api/token' -UseBasicParsing
    $instanceId = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri 'http://169.254.169.254/latest/meta-data/instance-id' -UseBasicParsing
	$nameValue = (Get-EC2Tag -Filter @{Name="resource-id";Value=$instanceid},@{Name="key";Value="Name"}).Value
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------
#### [ IMDSv1 ]

```
<powershell>
	$instanceId = (Invoke-WebRequest http://169.254.169.254/latest/meta-data/instance-id -UseBasicParsing).content
	$nameValue = (Get-EC2Tag -Filter @{Name="resource-id";Value=$instanceid},@{Name="key";Value="Name"}).Value
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------

Vous pouvez également renommer l’instance à l’aide d’identifications dans les métadonnées d’instance si votre instance est configurée pour accéder aux identifications à partir des métadonnées d’instance. Pour de plus amples informations, veuillez consulter [Affichez les balises pour vos instances EC2 à l'aide des métadonnées d'instance](work-with-tags-in-IMDS.md).

------
#### [ IMDSv2 ]

```
<powershell>
    [string]$token = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token-ttl-seconds" = "21600"} -Method PUT -Uri 'http://169.254.169.254/latest/api/token' -UseBasicParsing
	$nameValue = Invoke-RestMethod -Headers @{"X-aws-ec2-metadata-token" = $token} -Method GET -Uri 'http://169.254.169.254/latest/meta-data/tags/instance/Name' -UseBasicParsing
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------
#### [ IMDSv1 ]

```
<powershell>
	$nameValue = Get-EC2InstanceMetadata -Path /tags/instance/Name
	$pattern = "^(?![0-9]{1,15}$)[a-zA-Z0-9-]{1,15}$"
	#Verify Name Value satisfies best practices for Windows hostnames
	If ($nameValue -match $pattern) 
	    {Try
	        {Rename-Computer -NewName $nameValue -Restart -ErrorAction Stop} 
	    Catch
	        {$ErrorMessage = $_.Exception.Message
	        Write-Output "Rename failed: $ErrorMessage"}}
	Else
	    {Throw "Provided name not a valid hostname. Please ensure Name value is between 1 and 15 characters in length and contains only alphanumeric or hyphen characters"}
</powershell>
```

------