

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Jalankan perintah saat Anda meluncurkan instans EC2 dengan input data pengguna
<a name="user-data"></a>

Saat meluncurkan instans Amazon EC2, Anda dapat meneruskan data pengguna ke instans yang digunakan untuk melakukan tugas konfigurasi otomatis, atau menjalankan skrip setelah instance dimulai.

Jika Anda tertarik dengan skenario otomatisasi yang lebih kompleks, Anda dapat mempertimbangkannya CloudFormation. Untuk informasi selengkapnya, [lihat Menerapkan aplikasi di Amazon EC2 CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/deploying.applications.html) dengan di Panduan Pengguna *AWS CloudFormation .*

Pada instance Linux, Anda dapat meneruskan dua jenis data pengguna ke Amazon EC2: skrip shell dan direktif cloud-init. Anda juga dapat meneruskan data ini ke wizard instance peluncuran sebagai teks biasa, sebagai file (ini berguna untuk meluncurkan instance dengan alat baris perintah), atau sebagai teks yang disandikan base64 (untuk panggilan API).

Pada instance Windows, agen peluncuran menangani skrip data pengguna Anda.

**Pertimbangan-pertimbangan**
+ Data pengguna diperlakukan sebagai data buram: apa yang Anda berikan adalah apa yang Anda dapatkan kembali. Terserah instans untuk menafsirkannya.
+ Data pengguna harus dienkode base64. Konsol Amazon EC2 dapat melakukan pengkodean base64 untuk input yang disandikan base64 atau menerima input yang disandikan base64. Jika Anda mengambil data pengguna menggunakan metadata instans atau konsol, data base64 diterjemahkan untuk Anda secara otomatis.
+ Data pengguna dibatasi hingga 16 KB, dalam bentuk mentah, sebelum dienkode base64. Ukuran string dengan panjang *n* setelah enkode base64 adalah ceil(*n*/3)\$14.
+ Data pengguna adalah atribut instans. Jika Anda membuat AMI dari instans, data pengguna instans tidak disertakan dalam AMI.

## Data pengguna di Konsol Manajemen AWS
<a name="user-data-console"></a>

Anda dapat menentukan data pengguna instans saat Anda meluncurkan instans. Jika volume root dari instans adalah volume EBS, Anda juga dapat menghentikan instans dan memperbarui data penggunanya.

### Tentukan data pengguna instance saat peluncuran dengan Launch Wizard
<a name="user-data-launch-instance-wizard"></a>

Anda dapat menentukan data pengguna saat meluncurkan instance dengan Launch Wizard di konsol EC2. Untuk menentukan data pengguna saat peluncuran, ikuti prosedur untuk [meluncurkan instance](ec2-launch-instance-wizard.md). Bidang **Data pengguna** terletak di bagian [Detail lanjutan](ec2-instance-launch-parameters.md#liw-advanced-details) wizard peluncuran instans. Masukkan PowerShell skrip Anda di bidang **Data pengguna**, dan kemudian selesaikan prosedur peluncuran instance.

Pada tangkapan layar dari bidang **Data pengguna** berikut, skrip contoh membuat file di folder sementara Windows, dengan menggunakan tanggal dan waktu saat ini di nama file. Saat Anda memasukkan `<persist>true</persist>`, skrip akan dijalankan setiap kali Anda melakukan boot ulang atau memulai instans. Jika Anda membiarkan kotak centang **data Pengguna telah dikodekan base64** kosong, konsol Amazon EC2 melakukan pengkodean base64 untuk Anda.

![\[Bidang teks data pengguna Detail Lanjutan.\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/images/configure_ec2config_userdata.png)


Untuk informasi selengkapnya, lihat [Tentukan data pengguna instance saat peluncuran dengan Launch Wizard](#user-data-launch-instance-wizard). Untuk contoh Linux yang menggunakan AWS CLI, lihat[Data pengguna dan AWS CLI](#user-data-api-cli). Untuk contoh Windows yang menggunakan Alat untuk Windows PowerShell, lihat[Data pengguna dan Alat untuk Windows PowerShell](#user-data-powershell).

### Lihat dan perbarui data pengguna instans
<a name="user-data-view-change"></a>

Anda dapat melihat data pengguna instans untuk semua instans, dan Anda dapat memperbarui data pengguna instans untuk instans yang dihentikan.

**Untuk memperbarui data pengguna untuk sebuah instans dengan menggunakan konsol**

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Di panel navigasi, pilih **Instans**.

1. Pilih instans dan pilih **Tindakan**, **status instans**, **Hentikan instans**.
**Awas**  
Ketika Anda menghentikan sebuah instance, data pada volume penyimpanan instans akan hilang. Untuk menyimpan data ini, buat cadangan ke penyimpanan persisten.

1. Ketika diminta konfirmasi, pilih **Berhenti**. Hal ini dapat memerlukan waktu beberapa menit sampai instans berhenti.

1. Dengan instans yang masih dipilih, pilih **Tindakan**, **Pengaturan instans**, **Edit data pengguna**. Anda tidak dapat mengubah data pengguna jika instans sedang berjalan, tetapi Anda dapat melihatnya.

1. Dalam kotak dialog **Edit data pengguna**, perbarui data pengguna, lalu pilih **Simpan**. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>`, seperti yang ditunjukkan pada contoh berikut:  
![\[Kotak dialog Edit Data Pengguna.\]](http://docs.aws.amazon.com/id_id/AWSEC2/latest/UserGuide/images/view-change-user-data.png)

1. Mulai instans. Jika Anda mengaktifkan eksekusi data pengguna untuk boot ulang atau permulaan berikutnya, skrip data pengguna yang diperbarui akan dijalankan sebagai bagian dari proses mulai instans.

## Cara Amazon EC2 menangani data pengguna untuk instans Linux
<a name="userdata-linux"></a>

Contoh berikut menggunakan data pengguna untuk menjalankan perintah yang mengatur server LAMP saat instance diluncurkan. Dalam setiap contoh, tugas-tugas berikut dilakukan:
+ Paket perangkat lunak distribusi diperbarui.
+ Server web,`php`, dan `mariadb` paket diinstal.
+ `httpd`Layanan dimulai dan dihidupkan.
+ Pengguna `ec2-user` ditambahkan ke grup apache.
+ Kepemilikan yang sesuai dan izin file ditetapkan untuk direktori web dan file yang ada di dalamnya.
+ Halaman web sederhana dibuat untuk menguji server web dan mesin PHP.

**Topics**
+ [Prasyarat](#user-data-requirements)
+ [Data pengguna dan skrip shell](#user-data-shell-scripts)
+ [Perbarui data pengguna instance](#user-data-modify)
+ [Data pengguna dan arahan cloud-init](#user-data-cloud-init)
+ [Data pengguna dan AWS CLI](#user-data-api-cli)
+ [Menggabungkan skrip shell dan arahan cloud-init](#user-data-mime-multi)

### Prasyarat
<a name="user-data-requirements"></a>

Contoh-contoh dalam topik ini mengasumsikan hal berikut:
+ Instans Anda memiliki nama DNS publik yang dapat dijangkau dari internet.
+ Grup keamanan yang terkait dengan instans Anda dikonfigurasi untuk mengizinkan lalu lintas SSH (port 22) sehingga Anda dapat terhubung ke instans untuk melihat file log keluaran.
+ Instans Anda diluncurkan menggunakan AMI Amazon Linux. Perintah dan arahan mungkin tidak berfungsi untuk distribusi Linux lainnya. Untuk informasi selengkapnya tentang distribusi lain, seperti dukungannya untuk cloud-init, lihat dokumentasi untuk distribusi tertentu.

### Data pengguna dan skrip shell
<a name="user-data-shell-scripts"></a>

Jika Anda terbiasa dengan skrip shell, ini adalah cara termudah dan terlengkap untuk mengirim instruksi ke sebuah instans saat peluncuran. Menambahkan tugas ini pada waktu boot akan menambah jumlah waktu yang dibutuhkan untuk booting sebuah instans. Anda harus memberikan waktu tambahan beberapa menit untuk penyelesaian tugas sebelum menguji apakah skrip pengguna telah berhasil diselesaikan.

**penting**  
Secara default, skrip data pengguna dan arahan cloud-init hanya berjalan selama siklus boot saat Anda pertama kali meluncurkan sebuah instans. Anda dapat memperbarui konfigurasi untuk memastikan bahwa skrip data pengguna dan arahan cloud-init Anda berjalan setiap kali Anda memulai ulang instans. Untuk informasi selengkapnya, [lihat Bagaimana cara menggunakan data pengguna untuk menjalankan skrip secara otomatis dengan setiap restart instans Amazon EC2 Linux saya](https://repost.aws/knowledge-center/execute-user-data-ec2)? di pusat AWS pengetahuan.

Skrip shell data pengguna harus dimulai dengan `#!` karakter dan jalur ke penerjemah yang ingin Anda baca skrip (umumnya. **/bin/bash)** Untuk pengenalan tentang skrip shell, lihat [Manual Referensi Bash](https://www.gnu.org/software/bash/manual/bash.html) di situs web *Sistem Operasi GNU*.

Skrip yang dimasukkan sebagai data pengguna dijalankan sebagai pengguna root pengguna, jadi jangan gunakan perintah **sudo** dalam skrip. Ingatlah bahwa file apa pun yang Anda buat akan menjadi milik pengguna root; jika Anda membutuhkan pengguna non-root untuk memiliki akses file, Anda harus mengubah izin yang sesuai dalam skrip. Selain itu, karena skrip tidak dijalankan secara interaktif, Anda tidak dapat menyertakan perintah yang memerlukan umpan balik pengguna (seperti **yum update** tanpa bendera `-y`).

Jika Anda menggunakan AWS API, termasuk AWS CLI, dalam skrip data pengguna, Anda harus menggunakan profil instance saat meluncurkan instance. Profil instance menyediakan AWS kredensi yang sesuai yang diperlukan oleh skrip data pengguna untuk mengeluarkan panggilan API. Untuk informasi selengkapnya, lihat [Menggunakan profil instans](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) di Panduan Pengguna IAM. Izin yang Anda tetapkan ke peran IAM bergantung pada layanan mana yang Anda panggil dengan API. Untuk informasi selengkapnya, lihat [IAM role untuk Amazon EC2](iam-roles-for-amazon-ec2.md).

File log keluaran cloud-init () menangkap keluaran konsol sehingga mudah untuk men-debug skrip Anda setelah peluncuran jika instans tidak berperilaku seperti yang Anda inginkan. Untuk melihat file log, [hubungkan ke instans](connect-to-linux-instance.md) dan buka `/var/log/cloud-init-output.log`.

Ketika skrip data pengguna diproses, skrip itu akan disalin dan dijalankan dari `/var/lib/cloud/instances/instance-id/`. Skrip tidak dihapus setelah dijalankan. Pastikan untuk menghapus skrip data pengguna dari `/var/lib/cloud/instances/instance-id/` sebelum Anda membuat AMI dari instans. Jika tidak, skrip akan ada di direktori ini pada setiap instans yang diluncurkan dari AMI.

### Perbarui data pengguna instance
<a name="user-data-modify"></a>

Untuk memperbarui data pengguna instans, Anda harus menghentikan instans tersebut terlebih dahulu. Jika instans sedang berjalan, Anda dapat melihat data pengguna tetapi Anda tidak dapat mengubahnya.

**Awas**  
Ketika Anda menghentikan sebuah instance, data pada volume penyimpanan instans akan hilang. Untuk menyimpan data ini, buat cadangan ke penyimpanan persisten.

**Untuk mengubah data pengguna instans**

1. Buka konsol Amazon EC2 di. [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)

1. Di panel navigasi, pilih **Instans**.

1. Pilih instans dan pilih **Status instans**, **Hentikan instans**. Jika opsi ini dinonaktifkan, instance sudah dihentikan atau volume rootnya adalah volume penyimpanan instance.

1. Ketika diminta konfirmasi, pilih **Berhenti**. Hal ini dapat memerlukan waktu beberapa menit sampai instans berhenti.

1. Dengan instans yang masih dipilih, pilih **Tindakan**, **Pengaturan instans**, **Edit data pengguna**.

1. Ubah data pengguna sesuai kebutuhan, lalu pilih **Simpan**.

1. Mulai instans. Data pengguna baru terlihat di instans Anda setelah Anda memulainya; namun, skrip data pengguna tidak dijalankan.

### Data pengguna dan arahan cloud-init
<a name="user-data-cloud-init"></a>

Paket cloud-init mengonfigurasi aspek spesifik dari instans Amazon Linux baru saat diluncurkan; paket ini terutama mengonfigurasi file `.ssh/authorized_keys` untuk ec2-user sehingga Anda dapat masuk dengan kunci privat Anda sendiri. Untuk informasi selengkapnya tentang tugas konfigurasi yang dilakukan paket cloud-init untuk instans Amazon Linux, lihat dokumentasi berikut:
+ **Amazon Linux 2023 - Cloud-init** [yang disesuaikan](https://docs.aws.amazon.com/linux/al2023/ug/cloud-init.html)
+ **Amazon Linux 2** - [Menggunakan cloud-init di Amazon](https://docs.aws.amazon.com/linux/al2/ug/amazon-linux-cloud-init.html) Linux 2

Arahan pengguna cloud-init dapat diteruskan ke instans saat peluncuran dengan cara yang sama seperti skrip diteruskan, meskipun sintaksnya berbeda. Untuk informasi selengkapnya tentang cloud-init, lihat. [https://cloudinit.readthedocs.org/en/latest/index.html](https://cloudinit.readthedocs.org/en/latest/index.html)

**penting**  
Secara default, skrip data pengguna dan arahan cloud-init hanya berjalan selama siklus boot saat Anda pertama kali meluncurkan sebuah instans. Anda dapat memperbarui konfigurasi untuk memastikan bahwa skrip data pengguna dan arahan cloud-init Anda berjalan setiap kali Anda memulai ulang instans. Untuk informasi selengkapnya, [lihat Bagaimana cara menggunakan data pengguna untuk menjalankan skrip secara otomatis dengan setiap restart instans Amazon EC2 Linux saya](https://repost.aws/knowledge-center/execute-user-data-ec2)? di pusat AWS pengetahuan.

Menambahkan tugas ini pada waktu boot akan menambah jumlah waktu yang dibutuhkan untuk booting sebuah instans. Anda harus memberikan waktu tambahan beberapa menit untuk penyelesaian tugas sebelum menguji apakah arahan data pengguna Anda telah selesai.

**Untuk meneruskan arahan cloud-init ke instans Amazon Linux**

1. Ikuti prosedur untuk [meluncurkan instans](ec2-launch-instance-wizard.md). Bidang **Data pengguna** terletak di bagian [Detail lanjutan](ec2-instance-launch-parameters.md#liw-advanced-details) wizard peluncuran instans. Masukkan teks arahan cloud-init Anda di bidang **Data pengguna**, lalu selesaikan prosedur peluncuran instans.

   Dalam contoh di bawah ini, arahan membuat dan mengkonfigurasi server web di Amazon Linux. Baris `#cloud-config` di atas diperlukan untuk mengidentifikasi perintah sebagai arahan 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. Berikan waktu yang cukup bagi instans untuk meluncurkan dan menjalankan arahan di data pengguna Anda, lalu periksa untuk melihat apakah arahan Anda telah menyelesaikan tugas yang Anda maksudkan.

   Misalnya, di peramban web, masukkan URL file pengujian PHP yang dibuat arahan tersebut. URL ini adalah alamat DNS publik dari instans Anda yang diikuti dengan garis miring ke depan dan nama file.

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

   Anda akan melihat halaman informasi PHP: Jika Anda tidak dapat melihat halaman informasi PHP, periksa apakah grup keamanan yang Anda gunakan berisi aturan yang mengizinkan lalu lintas HTTP (port 80). Untuk informasi selengkapnya, lihat [Mengonfigurasi aturan grup keamanan](changing-security-group.md#add-remove-security-group-rules).

1. (Opsional) Jika arahan Anda tidak menyelesaikan tugas yang Anda harapkan, atau jika Anda hanya ingin memverifikasi bahwa arahan Anda selesai tanpa kesalahan, [hubungkan ke instans](connect-to-linux-instance.md), periksa file log output (`/var/log/cloud-init-output.log`), dan cari pesan kesalahan di output. Untuk informasi debugging tambahan, Anda dapat menambahkan baris berikut ke arahan Anda:

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

   Arahan ini mengirimkan output **runcmd** ke `/var/log/cloud-init-output.log`.

### Data pengguna dan AWS CLI
<a name="user-data-api-cli"></a>

Anda dapat menggunakan AWS CLI untuk menentukan, memodifikasi, dan melihat data pengguna untuk instance Anda. Untuk informasi tentang melihat data pengguna dari instans Anda menggunakan metadata instans, lihat [Akses metadata instans untuk instans EC2](instancedata-data-retrieval.md).

Di Windows, Anda dapat menggunakan AWS Tools for Windows PowerShell alih-alih menggunakan file AWS CLI. Untuk informasi selengkapnya, lihat [Data pengguna dan Alat untuk Windows PowerShell](#user-data-powershell).

**Contoh: Tentukan data pengguna saat peluncuran**  
Untuk menentukan data pengguna saat Anda meluncurkan instans, gunakan perintah [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) dengan parameter `--user-data`. Dengan**run-instances**, AWS CLI melakukan pengkodean base64 dari data pengguna untuk Anda.

Contoh berikut menunjukkan cara menentukan skrip sebagai string pada baris perintah:

```
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
```

Contoh berikut menunjukkan cara menentukan skrip menggunakan file teks. Pastikan untuk menggunakan awalan `file://` untuk menentukan file.

```
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
```

Berikut ini adalah contoh file teks dengan skrip shell.

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

**Contoh: Modifikasi data pengguna dari instans yang dihentikan**  
Anda dapat memodifikasi data pengguna dari instance yang dihentikan menggunakan [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html)perintah. Dengan**modify-instance-attribute**, AWS CLI tidak melakukan pengkodean base64 dari data pengguna untuk Anda.
+ Di komputer **Linux**, gunakan perintah base64 untuk mengenkode data pengguna.

  ```
  base64 my_script.txt >my_script_base64.txt
  ```
+ Di komputer **Windows**, gunakan perintah certutil untuk mengenkode data pengguna. Sebelum Anda dapat menggunakan file ini dengan AWS CLI, Anda harus menghapus baris pertama (BEGIN CERTIFICATE) dan terakhir (END CERTIFICATE).

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

Menggunakan parameter `--attribute` dan `--value` untuk menggunakan file teks yang dienkode untuk menentukan data pengguna. Pastikan untuk menggunakan awalan `file://` untuk menentukan file.

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

**Contoh: Hapus data pengguna dari instans yang dihentikan**  
Untuk menghapus data pengguna yang ada, gunakan [modify-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-instance-attribute.html)perintah sebagai berikut:

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

**Contoh: Lihat data pengguna**  
Untuk mengambil data pengguna untuk sebuah contoh, gunakan [describe-instance-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-attribute.html)perintah. Dengan**describe-instance-attribute**, AWS CLI tidak melakukan decoding base64 dari data pengguna untuk Anda.

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

Berikut ini adalah contoh output dengan data pengguna berenkode base64.

```
{
    "UserData": {
        "Value": "IyEvYmluL2Jhc2gKeXVtIHVwZGF0ZSAteQpzZXJ2aWNlIGh0dHBkIHN0YXJ0CmNoa2NvbmZpZyBodHRwZCBvbg=="
    },
    "InstanceId": "i-1234567890abcdef0"
}
```
+ Di komputer **Linux**, gunakan`--query` opsi untuk mendapatkan data pengguna yang disandikan dan perintah base64 untuk mendekodekannya.

  ```
  aws ec2 describe-instance-attribute --instance-id i-1234567890abcdef0 --attribute userData --output text --query "UserData.Value" | base64 --decode
  ```
+ Di komputer **Windows**, gunakan`--query` opsi untuk mendapatkan data pengguna yang dikodekan dan perintah certutil untuk mendekodekannya. Perhatikan bahwa output dienkode disimpan dalam suatu file dan output yang didekode disimpan di file lain.

  ```
  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
  ```

Berikut ini adalah output contoh.

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

### Menggabungkan skrip shell dan arahan cloud-init
<a name="user-data-mime-multi"></a>

Secara default, Anda hanya dapat menyertakan satu tipe konten dalam data pengguna pada satu waktu. Namun, Anda dapat menggunakan tipe konten `text/cloud-config` dan `text/x-shellscript` dalam file bagian mime-multi untuk menyertakan skrip shell dan arahan cloud-init dalam data pengguna Anda.

Berikut ini menunjukkan format bagian mime-multi.

```
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
--//--
```

Misalnya, data pengguna berikut menyertakan arahan cloud-init dan skrip bash shell. Arahan cloud-init membuat file (`/test-cloudinit/cloud-init.txt`), dan menulis `Created by cloud-init` ke file itu. Skrip bash shell membuat file (`/test-userscript/userscript.txt`) dan menulis `Created by bash shell script` ke file itu.

```
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
--//--
```

## Bagaimana Amazon EC2 menangani data pengguna untuk instans Windows
<a name="ec2-windows-user-data"></a>

Pada instance Windows, agen peluncuran melakukan tugas yang terkait dengan data pengguna. Untuk informasi selengkapnya, lihat berikut ini:
+ [EC2Luncurkan v2](ec2launch-v2.md) 
+ [EC2Peluncuran](ec2launch.md) 
+ [EC2Layanan Config](ec2config-service.md)

[Untuk contoh perakitan `UserData` properti dalam CloudFormation template, lihat [Base64 Encoded Property dan Base64 Encoded UserData Property](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html#scenario-userdata-base64) dengan dan. UserData AccessKey SecretKey](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/quickref-general.html#scenario-userdata-base64-with-keys)

*Untuk contoh menjalankan perintah pada instance dalam grup Auto Scaling yang bekerja dengan kait siklus hidup, lihat [Tutorial: Mengonfigurasi data pengguna untuk mengambil status siklus hidup target melalui metadata instans di](https://docs.aws.amazon.com/autoscaling/ec2/userguide/tutorial-lifecycle-hook-instance-metadata.html) Panduan Pengguna Amazon EC2 Auto Scaling.*

**Topics**
+ [Skrip data pengguna](#user-data-scripts)
+ [Data pengguna terkompresi](#user-data-compressed)
+ [Eksekusi data pengguna](#user-data-execution)
+ [Data pengguna dan Alat untuk Windows PowerShell](#user-data-powershell)

### Skrip data pengguna
<a name="user-data-scripts"></a>

Untuk `EC2Config` atau `EC2Launch` untuk menjalankan skrip, Anda harus melampirkan skrip dalam tag khusus saat Anda menambahkannya ke data pengguna. Tag yang Anda gunakan tergantung pada apakah perintah berjalan di jendela Command Prompt (perintah batch) atau menggunakan WindowsPowerShell.

Jika Anda menentukan skrip batch dan skrip Windows, PowerShell skrip batch berjalan terlebih dahulu dan PowerShell skrip Windows berjalan berikutnya, terlepas dari urutan kemunculannya dalam data pengguna instance.

Jika Anda menggunakan AWS API, termasuk AWS CLI, dalam skrip data pengguna, Anda harus menggunakan profil instance saat meluncurkan instance. Profil instance menyediakan AWS kredensi yang sesuai yang diperlukan oleh skrip data pengguna untuk melakukan panggilan API. Untuk informasi selengkapnya, lihat [Profil instans](iam-roles-for-amazon-ec2.md#ec2-instance-profile). Izin yang Anda tetapkan ke peran IAM bergantung pada layanan mana yang Anda panggil dengan API. Untuk informasi selengkapnya, lihat [IAM role untuk Amazon EC2](iam-roles-for-amazon-ec2.md).

**Topics**
+ [Sintaks untuk skrip batch](#user-data-batch-scripts)
+ [Sintaks untuk skrip Windows PowerShell](#user-data-powershell-scripts)
+ [Sintaks untuk skrip konfigurasi YAML](#user-data-yaml-scripts)
+ [Enkode Base64](#user-data-base64-encoding)

#### Sintaks untuk skrip batch
<a name="user-data-batch-scripts"></a>

Tentukan skrip batch menggunakan tanda `script`. Pisahkan perintah menggunakan jeda baris seperti yang ditunjukkan dalam contoh berikut.

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

Secara default, skrip data pengguna dijalankan satu kali saat Anda meluncurkan instans. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>` ke data pengguna.

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

**EC2Luncurkan agen v2**  
Untuk menjalankan skrip data pengguna XMLsebagai proses terpisah dengan **executeScript** tugas EC2 Launch v2 di `UserData` panggung, tambahkan `<detach>true</detach>` ke data pengguna.

**catatan**  
detachTag tidak didukung oleh agen peluncuran sebelumnya.

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

#### Sintaks untuk skrip Windows PowerShell
<a name="user-data-powershell-scripts"></a>

 AWS Windows AMIs menyertakan [AWS Tools for Windows PowerShell](https://aws.amazon.com/powershell/), sehingga Anda dapat menentukan cmdlet ini dalam data pengguna. Jika Anda mengaitkan peran IAM dengan instans, Anda tidak perlu menentukan kredensil ke cmdlet, karena aplikasi yang berjalan pada instance menggunakan kredenal peran untuk mengakses sumber daya ( AWS misalnya, bucket Amazon S3).

Tentukan PowerShell skrip Windows menggunakan `<powershell>` tag. Pisahkan perintah menggunakan jeda baris. Tag `<powershell>` tidak peka huruf besar/kecil.

Contoh:

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

Secara default, skrip data pengguna berjalan satu kali saat Anda meluncurkan instance. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>` ke data pengguna.

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

Anda dapat menentukan satu atau lebih PowerShell argumen dengan `<powershellArguments>` tag. Jika tidak ada argumen yang diteruskan, EC2 EC2 Launch dan Launch v2 tambahkan argumen berikut secara default:`-ExecutionPolicy Unrestricted`.

**Contoh:**

```
<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>
```

**EC2Luncurkan agen v2**  
Untuk menjalankan skrip data pengguna XMLsebagai proses terpisah dengan **executeScript** tugas EC2 Launch v2 di `UserData` panggung, tambahkan `<detach>true</detach>` ke data pengguna.

**catatan**  
detachTag tidak didukung oleh agen peluncuran sebelumnya.

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

#### Sintaks untuk skrip konfigurasi YAML
<a name="user-data-yaml-scripts"></a>

Jika Anda menggunakan EC2 Launch v2 untuk menjalankan skrip, Anda dapat menggunakan format YAMAL. Untuk melihat tugas konfigurasi, detail, dan contoh untuk EC2 Launch v2, lihat[EC2Luncurkan konfigurasi tugas v2](ec2launch-v2-settings.md#ec2launch-v2-task-configuration).

Tentukan skrip YAML dengan tugas `executeScript`.

**Contoh sintaks YAMG untuk menjalankan skrip 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
```

**Contoh sintaks YAML untuk menjalankan skrip 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
```

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

Jika Anda menggunakan API Amazon EC2 atau alat yang tidak melakukan enkode base64 pada data pengguna, Anda harus mengenkode sendiri data pengguna. Jika tidak, kesalahan akan dicatat tentang tidak dapat menemukan tanda `script` atau `powershell` yang akan dijalankan. Berikut ini adalah contoh yang menyandikan menggunakan Windows PowerShell .

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

Berikut ini adalah contoh yang menerjemahkan menggunakan PowerShell .

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

[Untuk informasi lebih lanjut tentang pengkodean base64, lihat https://www.ietf. org/rfc/rfc](https://www.ietf.org/rfc/rfc4648.txt)4648.txt.

### Data pengguna terkompresi
<a name="user-data-compressed"></a>

EC2Launch v2 mendukung data pengguna zip sebagai metode untuk mengirimkan data pengguna yang lebih besar dari batas 16 KB yang diberlakukan oleh IMDS. Untuk menggunakan fitur ini, kompres skrip data pengguna Anda ke dalam `.zip` arsip dan teruskan ke instans EC2 Anda. Ketika EC2 Launch v2 mendeteksi data pengguna terkompresi, secara otomatis membuka ritsleting skrip data pengguna terkompresi dan menjalankannya.

Seperti halnya data pengguna standar, jika Anda menggunakan Amazon EC2 API atau alat yang tidak melakukan pengkodean base64 data pengguna, Anda harus menyandikan sendiri data pengguna yang dikompresi. Untuk informasi selengkapnya tentang batas ukuran data pengguna dan pengkodean base64, lihat. [Akses metadata instans untuk instans EC2](instancedata-data-retrieval.md)

### Eksekusi data pengguna
<a name="user-data-execution"></a>

Secara default, semua AWS Windows AMIs memiliki eksekusi data pengguna yang diaktifkan untuk peluncuran awal. Anda dapat menentukan bahwa skrip data pengguna dijalankan setiap kali instans di-boot ulang atau dimulai ulang. Atau, Anda dapat menentukan bahwa skrip data pengguna dijalankan setiap kali instans di-boot ulang atau dimulai ulang.

**catatan**  
Data pengguna tidak diaktifkan untuk dijalankan secara default setelah peluncuran awal. Agar data pengguna dapat dijalankan saat Anda melakukan boot ulang atau memulai instans, lihat [Jalankan skrip selama reboot atau mulai berikutnya](#user-data-scripts-subsequent).

Skrip data pengguna dijalankan dari akun administrator lokal ketika kata sandi acak dibuat. Jika tidak, skrip data pengguna dijalankan dari akun Sistem.

#### Skrip peluncuran instance
<a name="user-data-scripts-launch"></a>

Skrip dalam data pengguna instans dijalankan selama peluncuran awal instans. Jika tanda `persist` ditemukan, eksekusi data pengguna diaktifkan untuk boot ulang atau pemulaian berikutnya. File log untuk EC2 Launch v2, EC2 Launch, dan EC2 Config berisi output dari output standar dan aliran kesalahan standar.

**EC2Luncurkan v2**  
File log untuk EC2 Launch v2 adalah`C:\ProgramData\Amazon\EC2Launch\log\agent.log`.

**catatan**  
Folder `C:\ProgramData` mungkin tersembunyi. Untuk melihat folder, Anda harus menampilkan file dan folder yang tersembunyi.

Informasi berikut dicatat ketika data pengguna dijalankan:
+ `Info: Converting user-data to yaml format` – Jika data pengguna disediakan dalam format XML
+ `Info: Initialize user-data state` – Awal eksekusi data pengguna
+ `Info: Frequency is: always` – Jika tugas data pengguna berjalan di setiap boot
+ `Info: Frequency is: once` – Jika tugas data pengguna berjalan hanya sekali
+ `Stage: postReadyUserData execution completed` – Akhir eksekusi data pengguna

**EC2Peluncuran**  
File log untuk EC2 Launch adalah`C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log`.

Folder `C:\ProgramData` mungkin tersembunyi. Untuk melihat folder, Anda harus menampilkan file dan folder yang tersembunyi.

Informasi berikut dicatat ketika data pengguna dijalankan:
+ `Userdata execution begins` – Awal eksekusi data pengguna
+ `<persist> tag was provided: true` – Jika tanda yang masih ada ditemukan
+ `Running userdata on every boot` – Jika tanda yang masih ada ditemukan
+ `<powershell> tag was provided.. running powershell content` – Jika tanda powershell ditemukan
+ `<script> tag was provided.. running script content` – Jika tanda skrip ditemukan
+ `Message: The output from user scripts` – Jika skrip data pengguna dijalankan, maka outputnya dicatat

**EC2Config**  
File log untuk EC2 Config adalah. `C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2Config.log` Informasi berikut dicatat ketika data pengguna dijalankan:
+ `Ec2HandleUserData: Message: Start running user scripts` – Awal eksekusi data pengguna
+ `Ec2HandleUserData: Message: Re-enabled userdata execution` – Jika tanda yang masih ada ditemukan
+ `Ec2HandleUserData: Message: Could not find <persist> and </persist>` – Jika tanda yang masih ada tidak ditemukan
+ `Ec2HandleUserData: Message: The output from user scripts` – Jika skrip data pengguna dijalankan, maka outputnya dicatat

#### Jalankan skrip selama reboot atau mulai berikutnya
<a name="user-data-scripts-subsequent"></a>

Saat Anda memperbarui data pengguna instans, konten data pengguna yang diperbarui secara otomatis tercermin dalam metadata instans saat berikutnya Anda me-reboot atau memulai instance. Namun, tergantung pada agen peluncuran yang diinstal, konfigurasi tambahan mungkin diperlukan untuk mengonfigurasi skrip data pengguna agar berjalan pada reboot atau mulai berikutnya.

Jika Anda memilih opsi **Shutdown with Sysprep**, skrip data pengguna berjalan saat instance dimulai atau reboot berikutnya, bahkan jika Anda tidak mengaktifkan eksekusi data pengguna untuk reboot atau memulai berikutnya.

Untuk instruksi untuk mengaktifkan eksekusi data pengguna, pilih tab yang cocok dengan agen peluncuran Anda.

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

Tidak seperti EC2 Launch v1, EC2 Launch v2 mengevaluasi tugas data pengguna pada setiap boot. Tidak perlu menjadwalkan tugas data pengguna secara manual. Data pengguna berjalan berdasarkan frekuensi yang disertakan atau opsi bertahan.

Untuk skrip data pengguna XHTML  
Untuk menjalankan skrip data pengguna pada setiap boot, tambahkan `<persist>true</persist>` bendera ke data pengguna. Jika flag persisten tidak disertakan, skrip data pengguna hanya berjalan pada boot awal.

Untuk data pengguna YAMG  
+ Untuk menjalankan tugas dalam data pengguna pada boot awal, atur tugas `frequency` ke`once`.
+ Untuk menjalankan tugas dalam data pengguna pada setiap boot, atur tugas `frequency` ke`always`.

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

1. Hubungkan ke instans Windows Anda.

1. Buka jendela PowerShell perintah dan jalankan salah satu perintah berikut:

**Jalankan sekali**  
Untuk menjalankan data pengguna sekali pada boot berikutnya, gunakan `-Schedule` bendera.

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

**Jalankan pada semua sepatu bot berikutnya**  
Untuk menjalankan data pengguna pada semua boot berikutnya, gunakan `-SchedulePerBoot` bendera.

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

1. Putuskan sambungan dari instans Windows Anda. Untuk menjalankan skrip yang diperbarui saat instans dimulai lagi nanti, hentikan instans dan perbarui data pengguna.

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

1. Hubungkan ke instans Windows Anda.

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

1. Untuk **Data Pengguna** , pilih **Aktifkan UserData eksekusi untuk layanan berikutnya dimulai** .

1. Putuskan sambungan dari instans Windows Anda. Untuk menjalankan skrip yang diperbarui saat instans dimulai lagi nanti, hentikan instans dan perbarui data pengguna.

------

### Data pengguna dan Alat untuk Windows PowerShell
<a name="user-data-powershell"></a>

Anda dapat menggunakan Alat untuk Windows PowerShell untuk menentukan, memodifikasi, dan melihat data pengguna untuk instance Anda. Untuk informasi tentang melihat data pengguna dari instans Anda menggunakan metadata instans, lihat [Akses metadata instans untuk instans EC2](instancedata-data-retrieval.md). Untuk informasi tentang data pengguna dan AWS CLI, lihat[Data pengguna dan AWS CLI](#user-data-api-cli).

**Contoh: Tentukan data pengguna instans saat peluncuran**  
Buat file teks dengan data pengguna instans. Untuk menjalankan skrip data pengguna setiap kali Anda melakukan boot ulang atau memulai instans, tambahkan `<persist>true</persist>`, seperti yang ditunjukkan pada contoh berikut.

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

Untuk menentukan data pengguna instance saat Anda meluncurkan instance Anda, gunakan [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html)perintah. Perintah ini tidak melakukan enkode base64 pada data pengguna untuk Anda. Gunakan perintah berikut untuk menyandikan data pengguna dalam file teks bernama.`script.txt`

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

Gunakan parameter `-UserData` untuk meneruskan data pengguna ke perintah **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
```

**Contoh: Perbarui data pengguna instans untuk instans yang dihentikan**  
Anda dapat memodifikasi data pengguna dari instance yang dihentikan menggunakan [Edit-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2InstanceAttribute.html)perintah.

Buat file teks dengan skrip baru. Gunakan perintah berikut untuk menyandikan data pengguna dalam file teks bernama.`new-script.txt`

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

Gunakan parameter `-UserData` dan `-Value` untuk menentukan data pengguna.

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

**Contoh: Lihat data pengguna instans**  
Untuk mengambil data pengguna untuk sebuah contoh, gunakan [Get-EC2InstanceAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceAttribute.html)perintah.

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

Berikut ini adalah output contoh. Perhatikan bahwa data pengguna dienkode.

```
PHBvd2Vyc2hlbGw+DQpSZW5hbWUtQ29tcHV0ZXIgLU5ld05hbWUgdXNlci1kYXRhLXRlc3QNCjwvcG93ZXJzaGVsbD4=
```

Gunakan perintah berikut untuk menyimpan data pengguna yang dienkode dalam variabel dan kemudian mendekodekannya.

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

Berikut ini adalah contoh output.

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

**Contoh: Ubah nama instans agar sesuai dengan nilai tanda**  
Anda dapat menggunakan [Get-EC2Tag](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Tag.html)perintah untuk membaca nilai tag, mengganti nama instance pada boot pertama agar sesuai dengan nilai tag, dan reboot. Untuk menjalankan perintah ini dengan sukses, Anda harus memiliki peran dengan izin `ec2:DescribeTags` yang dilampirkan ke instans karena informasi tag diambil dengan panggilan API. Untuk informasi selengkapnya tentang izin pengaturan menggunakan peran IAM, lihat. [Melampirkan IAM role ke instans](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>
```

------

Anda juga dapat mengganti nama instans menggunakan tanda dalam metadata instans, jika instans Anda dikonfigurasi untuk mengakses tanda dari metadata instans. Lihat informasi yang lebih lengkap di [Lihat tag untuk instans EC2 Anda menggunakan metadata instans](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>
```

------