Jalankan perintah saat Anda meluncurkan EC2 instance dengan input data pengguna - Amazon Elastic Compute Cloud

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 EC2 instance dengan input data pengguna

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

Jika Anda tertarik dengan skenario otomatisasi yang lebih kompleks, Anda dapat mempertimbangkan AWS CloudFormation atau AWS OpsWorks. Untuk informasi selengkapnya, lihat berikut ini:

Pada instance Linux, Anda dapat meneruskan dua jenis data pengguna ke AmazonEC2: 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. Bagian berikut mencakup perbedaan dalam bagaimana data pengguna ditangani pada setiap sistem operasi.

Data pengguna di AWS Management Console

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

Tentukan data pengguna instance saat peluncuran dengan Launch Wizard

Anda dapat menentukan data pengguna saat meluncurkan instance dengan Launch Wizard di EC2 konsol. Untuk menentukan data pengguna saat peluncuran, ikuti prosedur untuk meluncurkan instance. Bidang Data pengguna terletak di bagian Detail lanjutan 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, EC2 konsol Amazon melakukan pengkodean base64 untuk Anda.

Bidang teks data pengguna Detail Lanjutan.

Untuk informasi selengkapnya, lihat Tentukan data pengguna instance saat peluncuran dengan Launch Wizard. Untuk contoh Linux yang menggunakan AWS CLI, lihatData pengguna dan AWS CLI. Untuk contoh Windows yang menggunakan Alat untuk Windows PowerShell, lihatData pengguna dan Alat untuk Windows PowerShell.

Lihat dan perbarui data pengguna instans

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 EC2 konsol Amazon di https://console.aws.amazon.com/ec2/.

  2. Di panel navigasi, pilih Instans.

  3. Pilih instans dan pilih Tindakan, status instans, Hentikan instans.

    Awas

    Ketika Anda menghentikan instans, data pada setiap volume penyimpanan instans akan dihapus. Untuk menjaga data dari volume penyimpanan data, pastikan untuk mencadangkannya ke penyimpanan persisten.

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

  5. 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.

  6. 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.
  7. 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.

Bagaimana Amazon EC2 menangani data pengguna untuk instans Linux

Dalam contoh berikut, perintah dari Instal LAMP server di Amazon Linux 2 dikonversi ke skrip shell dan satu set arahan cloud-init yang berjalan saat instance diluncurkan. Dalam setiap contoh, tugas-tugas berikut dijalankan oleh data pengguna:

  • Paket perangkat lunak distribusi diperbarui.

  • Server web yang diperlukan, php dan paket mariadb diinstal.

  • Layanan httpd dimulai dan diaktifkan melalui systemctl.

  • 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 PHP mesin.

Prasyarat

Contoh-contoh dalam topik ini mengasumsikan hal berikut:

  • Instance Anda memiliki DNS nama 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 instance untuk melihat file log keluaran.

  • Instans Anda diluncurkan dengan Amazon Linux 2AMI. Selain itu, instruksi ini dimaksudkan untuk digunakan dengan Amazon Linux 2, dan perintah serta arahan mungkin tidak berfungsi untuk distribusi Linux lainnya. Untuk informasi lebih lanjut tentang distribusi lain, seperti dukungan mereka untuk cloud-init, lihat dokumentasi spesifik mereka.

Data pengguna dan skrip shell

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? 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 di situs web Sistem GNU Operasi.

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 kredensil yang sesuai yang diperlukan oleh skrip data pengguna untuk mengeluarkan panggilan. API Untuk informasi selengkapnya, lihat Menggunakan profil instans di Panduan IAM Pengguna. Izin yang Anda tetapkan ke IAM peran bergantung pada layanan mana yang Anda panggil. API Untuk informasi selengkapnya, lihat IAMperan untuk Amazon EC2.

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 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 /var/lib/cloud/instances/instance-id/ sebelum Anda membuat AMI dari instance. Jika tidak, skrip akan ada di direktori ini pada setiap instance yang diluncurkan dari fileAMI.

Perbarui data pengguna instance

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 instans, data pada setiap volume penyimpanan instans akan dihapus. Untuk menjaga data dari volume penyimpanan data, pastikan untuk mencadangkannya ke penyimpanan persisten.

Untuk mengubah data pengguna instans
  1. Buka EC2 konsol Amazon di https://console.aws.amazon.com/ec2/.

  2. Di panel navigasi, pilih Contoh.

  3. Pilih instans dan pilih Status instans, Hentikan instans. Jika opsi ini dinonaktifkan, baik instans sudah dihentikan maupun perangkat root-nya adalah volume penyimpanan instans.

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

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

  6. Ubah data pengguna sesuai kebutuhan, lalu pilih Simpan.

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

Data pengguna dan arahan cloud-init

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 Menggunakan cloud-init di Amazon Linux 2 di Panduan Pengguna Amazon 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 http://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? 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 sebuah instans dengan data pengguna
  1. Ikuti prosedur untuk meluncurkan instans. Bidang Data pengguna terletak di bagian Detail lanjutan 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 mengonfigurasi server web di Amazon Linux 2. Baris #cloud-config di atas diperlukan untuk mengidentifikasi perintah sebagai arahan cloud-init.

    #cloud-config repo_update: true repo_upgrade: all packages: - httpd - mariadb-server runcmd: - [ sh, -c, "amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2" ] - systemctl start httpd - sudo 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' ]
  2. 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.

    Untuk contoh ini, di browser web, masukkan URL file PHP pengujian arahan yang dibuat. Ini URL adalah DNS alamat publik instance Anda diikuti dengan garis miring dan nama file.

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

    Anda harus melihat halaman PHP informasi. Jika Anda tidak dapat melihat halaman PHP informasi, periksa apakah grup keamanan yang Anda gunakan berisi aturan untuk mengizinkan lalu lintas HTTP (port 80). Untuk informasi selengkapnya, lihat Mengonfigurasi aturan grup keamanan.

  3. (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, 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

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 instance untuk sebuah instance EC2.

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.

Contoh: Tentukan data pengguna saat peluncuran

Untuk menentukan data pengguna saat Anda meluncurkan instans, gunakan perintah run-instances dengan parameter --user-data. Denganrun-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-attributeperintah. Denganmodify-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 (BEGINCERTIFICATE) dan terakhir (ENDCERTIFICATE).

    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-attributeperintah 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-attributeperintah. Dengandescribe-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

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

Pada instance Windows, agen peluncuran melakukan tugas yang terkait dengan data pengguna. Untuk informasi selengkapnya, lihat berikut ini:

Untuk contoh perakitan UserData properti dalam AWS CloudFormation template, lihat Base64 Encoded Property dan Base64 Encoded UserData Property with and. UserData AccessKey SecretKey

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 instance di Panduan Pengguna Penskalaan Otomatis Amazon. EC2

Skrip data pengguna

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 kredensil yang sesuai yang diperlukan oleh skrip data pengguna untuk melakukan panggilan. API Untuk informasi selengkapnya, lihat Profil instans. Izin yang Anda tetapkan ke IAM peran bergantung pada layanan mana yang Anda panggil. API Untuk informasi selengkapnya, lihat IAMperan untuk Amazon EC2.

Sintaks untuk skrip batch

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>
EC2Launchagen v2

Untuk menjalankan skrip data XML pengguna sebagai proses terpisah dengan executeScript tugas EC2Launch 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 Windows PowerShell skrip

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

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

Sebagai 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, EC2Launch dan EC2Launch 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>
EC2Launchagen v2

Untuk menjalankan skrip data XML pengguna sebagai proses terpisah dengan executeScript tugas EC2Launch 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 YAML konfigurasi

Jika Anda menggunakan EC2Launch v2 untuk menjalankan skrip, Anda dapat menggunakan YAML formatnya. Untuk melihat tugas konfigurasi, detail, dan contoh untuk EC2Launch v2, lihatEC2Launchkonfigurasi tugas v2.

Tentukan YAML skrip dengan executeScript tugas.

Contoh YAML sintaks 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 YAML sintaks 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

Jika Anda menggunakan Amazon EC2 API atau alat yang tidak melakukan pengkodean base64 data pengguna, Anda harus menyandikan data pengguna sendiri. Jika tidak, kesalahan akan dicatat tentang tidak dapat menemukan tanda script atau powershell yang akan dijalankan. Berikut ini adalah contoh yang mengkodekan 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 pengodean basis64, lihat https://www.ietf.org/rfc/rfc4648.txt.

Eksekusi data pengguna

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.

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

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 EC2Launch v2,EC2Launch, dan EC2Config berisi output dari output standar dan aliran kesalahan standar.

EC2Launch v2

File log untuk EC2Launch v2 adalahC:\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 XML format

  • 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

EC2Launch

File log untukEC2Launch adalahC:\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 untukEC2Config adalahC:\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

Saat Anda memperbarui data pengguna instans, skrip data pengguna tidak dijalankan secara otomatis saat Anda melakukan boot ulang atau memulai instans. Namun demikian, Anda dapat mengaktifkan eksekusi data pengguna sehingga skrip data pengguna dijalankan satu kali saat Anda melakukan boot ulang atau memulai instans, atau setiap kali Anda melakukan boot ulang atau memulai instans.

Jika Anda memilih opsi Matikan dengan Sysprep, skrip data pengguna akan dijalankan lain waktu saat instans dimulai atau dimulai ulang, meskipun Anda tidak mengaktifkan eksekusi data pengguna untuk boot ulang atau pemulaian berikutnya. Skrip data pengguna tidak akan dijalankan pada boot ulang atau permulaan berikutnya.

Untuk mengaktifkan eksekusi data pengguna dengan EC2Launch v2
  • Untuk menjalankan tugas dalam data pengguna saat boot pertama, atur frequency ke once.

  • Untuk menjalankan tugas dalam data pengguna pada setiap boot, atur frequency ke always.

Untuk mengaktifkan eksekusi data pengguna dengan EC2Launch
  1. Hubungkan ke instans Windows Anda.

  2. Buka jendela PowerShell perintah dan jalankan perintah berikut:

    C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule
  3. Putuskan sambungan dari instans Windows Anda. Untuk menjalankan skrip yang diperbarui saat instans dimulai lagi nanti, hentikan instans dan perbarui data pengguna.

Untuk mengaktifkan eksekusi data pengguna dengan EC2Config
  1. Hubungkan ke instans Windows Anda.

  2. Buka C:\Program Files\Amazon\Ec2ConfigService\Ec2ConfigServiceSetting.exe.

  3. Untuk Data Pengguna, pilih Aktifkan UserData eksekusi untuk memulai layanan berikutnya.

  4. 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

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 instance untuk sebuah instance EC2. Untuk informasi tentang data pengguna dan AWS CLI, lihatData pengguna dan AWS 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, gunakan New-EC2Instanceperintah. 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-EC2InstanceAttributeperintah.

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-EC2InstanceAttributeperintah.

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-EC2Tagperintah 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 ec2:DescribeTags izin yang dilampirkan ke instance karena informasi tag diambil oleh panggilan. API Untuk informasi selengkapnya tentang izin pengaturan menggunakan IAM peran, lihatLampirkan IAM peran ke sebuah instance.

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. Untuk informasi selengkapnya, lihat Lihat tag untuk EC2 instance Anda menggunakan metadata instans.

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>