Instal Packer pada instance ECS, definisikan templat HCL atau JSON, lalu buat gambar kustom untuk penerapan batch.
Prasyarat
Pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) telah diperoleh. Lihat Peroleh pasangan AccessKey.
-
Untuk mencegah kebocoran AccessKey, buat pengguna RAM dan gunakan kredensial pengguna RAM tersebut. Lihat Buat pengguna RAM.
-
Rahasia AccessKey hanya ditampilkan saat pasangan AccessKey dibuat. Catat dan simpan kerahasiaannya.
Latar Belakang
Packer menggunakan Builders, Provisioners, dan Post-Processors untuk mengubah templat HCL atau JSON menjadi gambar kustom, menggantikan pembuatan gambar manual dengan pendekatan konfigurasi sebagai kode. Lihat dokumentasi Packer untuk informasi selengkapnya.
Prosedur
Langkah 1: Instal Packer
-
Hubungkan ke instance Linux.
-
Navigasi ke direktori
/usr/local/bin:cd /usr/local/binCatatan/usr/local/binberada dalamPATHsistem. Anda juga dapat menginstal Packer di direktori lain yang termasuk dalamPATH. -
Unduh paket instalasi Packer.
Anda juga dapat mengunjungi halaman Instal Packer untuk mengunduh paket sesuai OS dan arsitektur Anda. Contoh ini menggunakan packer_1.8.5_linux_amd64.zip.
wget https://releases.hashicorp.com/packer/1.8.5/packer_1.8.5_linux_amd64.zip -
Ekstrak paket:
unzip packer_1.8.5_linux_amd64.zip -
Verifikasi instalasi.
packer -v-
Jika nomor versi dikembalikan, Packer telah terinstal.
-
Jika
command not founddikembalikan, Packer belum terinstal dengan benar. Pastikan direktori Packer berada dalamPATHsistem Anda.
-
Langkah 2: Definisikan templat Packer
Buat templat HCL atau JSON yang menentukan Builders dan Provisioners. Contoh ini menggunakan provisioner Shell.
-
Ekspor ID AccessKey Anda.
export ALICLOUD_ACCESS_KEY=<AccessKey ID>Ganti
<AccessKey ID>dengan ID AccessKey aktual Anda. Lihat Lihat informasi pasangan AccessKey pengguna RAM. -
Ekspor rahasia AccessKey Anda.
export ALICLOUD_SECRET_KEY=<AccessKey Secret>Ganti
<AccessKey Secret>dengan rahasia AccessKey aktual Anda. Rahasia AccessKey hanya ditampilkan saat pembuatan dan tidak dapat diambil kembali nanti. Lihat Peroleh pasangan AccessKey. -
Buat file bernama
alicloud.CatatanAnda dapat menggunakan format mana pun untuk membuat file
alicloud. Jika Anda membuat file HCL, gunakan contoh dan perintah HCL pada langkah-langkah berikutnya.File HCL
vi alicloud.pkr.hclFile JSON
vi alicloud.json -
Tekan
Iuntuk memasuki mode Insert. Salin salah satu templat berikut ke dalam filealiclouddan sesuaikan parameter sesuai kebutuhan.File HCL
variable "access_key" { type = string default = "${env("ALICLOUD_ACCESS_KEY")}" } variable "secret_key" { type = string default = "${env("ALICLOUD_SECRET_KEY")}" } source "alicloud-ecs" "autogenerated_1" { associate_public_ip_address = true image_name = "packer_basic" instance_type = "ecs.g6.large" internet_charge_type = "PayByTraffic" io_optimized = true region = "cn-qingdao" skip_image_validation = true source_image = "aliyun_3_x64_20G_alibase_20220907.vhd" ssh_username = "root" } build { sources = ["source.alicloud-ecs.autogenerated_1"] provisioner "shell" { inline = ["sleep 30", "yum install redis.x86_64 -y"] } }File JSON
{ "variables": { "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}", "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}" }, "builders": [{ "type":"alicloud-ecs", "region":"cn-qingdao", "image_name":"packer_basic", "source_image":"aliyun_3_x64_20G_alibase_20220907.vhd", "associate_public_ip_address":true, "ssh_username":"root", "instance_type":"ecs.g6.large", "internet_charge_type":"PayByTraffic", "io_optimized":true, "skip_image_validation":true }], "provisioners": [{ "type": "shell", "inline": [ "sleep 30", "yum install redis.x86_64 -y" ] }] }Tabel berikut menjelaskan parameter yang didukung. Lihat dokumentasi Packer untuk referensi parameter lengkap.
Parameter
Tipe
Wajib
Deskripsi
regionstring
Ya
Wilayah instance ECS sementara yang digunakan untuk membuat gambar kustom. Contoh:
cn-qingdao.image_namestring
Ya
Nama gambar kustom. Contoh:
packer_basic.instance_typestring
Ya
Tipe instans instance ECS sementara. Contoh:
ecs.g6.large. Instance sementara secara otomatis dilepas setelah pembuatan gambar.CatatanPacker memanggil operasi CreateInstance untuk membuat instance ECS pay-as-you-go sementara dengan sistem operasi dan perangkat lunak yang diperlukan. Instance ini dikenai biaya.
ssh_usernamestring
Ya
Username SSH untuk menghubungkan ke instance ECS sementara.
internet_charge_typestring
Tidak
Metode penagihan jaringan untuk instance ECS sementara. Nilai yang valid:
-
PayByBandwidth: bayar-per-bandwidth.
-
PayByTraffic: bayar-per-lalu-lintas.
source_imagestring
Anda harus menentukan salah satu parameter.
ID gambar dasar untuk instance ECS sementara. Peroleh ID dari daftar gambar publik di Konsol ECS atau dengan memanggil operasi DescribeImages.
PentingTipe gambar yang dipilih harus kompatibel dengan tipe instans yang ditentukan. Misalnya, gambar Arm (yang ID-nya mengandung
_arm64_) harus digunakan dengan tipe instans berbasis Arm. Jika tidak, proses build gagal.image_familystring
Nama keluarga gambar. Packer menggunakan gambar terbaru yang tersedia dari keluarga ini untuk membuat instance.
CatatanNama harus terdiri dari 2 hingga 128 karakter. Nama tidak boleh dimulai dengan angka, karakter khusus, http://, atau https://. Nama dapat berisi huruf, angka, titik (.), garis bawah (_), tanda hubung (-), dan titik dua (:).
target_image_familystring
Tidak
Keluarga gambar dari gambar kustom yang akan dibuat.
CatatanNama harus terdiri dari 2 hingga 128 karakter. Nama tidak boleh dimulai dengan angka, karakter khusus, http://, atau https://. Nama dapat berisi huruf, angka, titik (.), garis bawah (_), tanda hubung (-), dan titik dua (:).
ssh_private_ipboolean
Anda harus menentukan salah satu parameter.
Menentukan apakah akan menggunakan koneksi SSH privat. Nilai default: false. Nilai yang valid:
-
false: Alamat IP publik ditetapkan untuk koneksi internet.
-
true: Tidak ada EIP atau alamat IP publik yang ditetapkan. Instance dihubungkan melalui alamat IP pribadinya.
CatatanUntuk koneksi privat, host Packer dan instance yang dibuat harus berada dalam vSwitch yang sama.
associate_public_ip_addressboolean
Menentukan apakah akan menetapkan alamat IP publik ke instance ECS sementara.
eip_idstring
ID EIP yang dikaitkan dengan instance ECS sementara.
skip_image_validationboolean
Tidak
Menentukan apakah akan melewati validasi gambar. Nilai default: false.
system_disk_mappingobject
Tidak
Konfigurasi disk sistem. Contoh:
"system_disk_mapping": { "disk_name": "sysdisk", "disk_category": "cloud_essd", "disk_size": 40 }Lihat bagian Konfigurasi disk cloud.
image_disk_mappingslist
Tidak
Konfigurasi disk data dalam gambar kustom. Contoh:
"image_disk_mappings": { "disk_name": "datadisk", "disk_snapshot_id": "s-bp1xxxxxx", "disk_device": "dev/xvdb" }Lihat bagian Konfigurasi disk cloud.
image_ignore_data_disksboolean
Tidak
Menentukan apakah gambar yang dibuat menyertakan snapshot disk data. Nilai default: false. Nilai yang valid:
-
false: Gambar yang dibuat menyertakan disk data.
-
true: Gambar yang dibuat hanya menyertakan disk sistem.
profilestring
Tidak
File konfigurasi Packer. Jika ditentukan, konfigurasi akan dimuat lebih dulu dari file ini.
ram_role_namestring
Tidak
Nama peran RAM. Digunakan untuk memperoleh AccessKey sementara bagi peran RAM lokal guna menjalankan templat Packer.
CatatanHanya berlaku ketika Packer dijalankan pada instance ECS dengan peran RAM yang dilampirkan.
ram_role_arnstring
Tidak
Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM. Digunakan bersama
ram_session_nameuntuk memungkinkan Akun A mengasumsikan peran Akun B dalam pembuatan gambar.ram_session_namestring
Tidak
Nama sesi peran RAM. Digunakan bersama
ram_role_arnuntuk pembuatan gambar lintas akun.ecs_ram_role_namestring
Tidak
Peran RAM instans yang dilampirkan ke instance ECS sementara. Panggil operasi ListRoles untuk menanyakan peran yang tersedia.
ssh_keypair_namestring
Tidak
Nama pasangan kunci SSH untuk menghubungkan ke instance ECS sementara.
ssh_private_key_filestring
Tidak
Jalur file kunci privat dari pasangan kunci SSH untuk menghubungkan ke instance ECS sementara.
custom_endpoint_ecsstring
Tidak
Titik akhir ECS kustom.
security_group_idstring
Tidak
ID grup keamanan untuk instance ECS sementara.
security_group_namestring
Tidak
Nama grup keamanan. Jika ID grup keamanan tidak ditentukan, Packer membuat satu dengan nama ini.
vpc_idstring
Tidak
ID VPC untuk instance ECS sementara.
vpc_namestring
Tidak
Nama VPC. Jika
vpc_idtidak ditentukan, Packer membuat VPC dengan nama ini.vswitch_idstring
Tidak
ID vSwitch untuk instance ECS sementara.
vswitch_namestring
Tidak
Nama vSwitch. Jika
vswitch_idtidak ditentukan, Packer membuat vSwitch dengan nama ini.user_datastring
Tidak
Data pengguna instans. Harus dienkode Base64, dengan data mentah tidak melebihi 32 KB. Lihat Sesuaikan konfigurasi inisialisasi untuk instance untuk batasan, format, dan frekuensi eksekusi.
CatatanEnkripsi data sensitif (password, kunci privat) sebelum pengkodean Base64, lalu dekripsi di dalam instance.
user_data_filestring
Tidak
Jalur file data pengguna untuk instance ECS sementara.
boot_modestring
Tidak
Mode boot gambar kustom. Nilai yang valid: BIOS, UEFI, dan UEFI-Preferred.
wait_snapshot_ready_timeoutInteger
Tidak
Periode timeout snapshot. Nilai default: 3600. Satuan: detik.
instance_namestring
Tidak
Nama instance ECS sementara. Default ke
InstanceId.CatatanNama harus terdiri dari 2 hingga 128 karakter dan dapat berisi huruf, angka, titik dua (:), garis bawah (_), titik (.), dan tanda hubung (-).
image_force_deleteboolean
Tidak
Menentukan apakah akan menghapus gambar yang sudah ada dengan nama yang sama sebelum membuat gambar baru. Nilai default: false. Nilai yang valid:
-
true: Menghapus gambar dengan nama yang sama yang sudah ada, lalu membuat gambar baru.
-
false: Tidak menghapus gambar dengan nama yang sama yang sudah ada. Pembuatan gambar gagal.
image_force_delete_snapshotsboolean
Tidak
Menentukan apakah akan menghapus snapshot dari gambar dengan nama yang sama yang sudah ada. Nilai default: false. Nilai yang valid:
-
true: Menghapus gambar dengan nama yang sama yang sudah ada beserta snapshot-nya, lalu membuat gambar baru.
-
false: Tidak menghapus gambar dengan nama yang sama yang sudah ada atau snapshot-nya. Pembuatan gambar gagal.
image_versionstring
Tidak
Versi gambar kustom.
resource_group_idstring
Tidak
ID kelompok sumber daya untuk gambar kustom.
force_stop_instanceboolean
Tidak
Menentukan apakah akan memaksa menghentikan instance ECS sementara. Nilai default: false.
disable_stop_instanceboolean
Tidak
Menentukan apakah akan melewati penghentian instance setelah provisioner dijalankan. Atur ke true jika instance harus tetap berjalan, misalnya saat menjalankan Sysprep pada Windows. Nilai default: false.
run_tagsobject
Tidak
Tag untuk gambar kustom. Contoh:
{"key":"value"}.image_descriptionstring
Tidak
Deskripsi gambar kustom.
image_share_account[]string
Tidak
Akun yang akan berbagi gambar kustom. Contoh:
["123456"].image_copy_regions[]string
Tidak
Wilayah tempat menyalin gambar kustom. Contoh:
["cn-beijing"].provisionersstring
Tidak
Tipe provisioner. Nilai yang valid:
-
File
-
PowerShell
-
Shell
-
Local Shell
-
Windows Shell
Lihat Provisioners.
Konfigurasi disk cloud
Parameter
Tipe
Wajib
Deskripsi
disk_namestring
Tidak
Nama disk cloud.
CatatanNama harus terdiri dari 2 hingga 128 karakter dan dapat berisi huruf, angka, titik dua (:), garis bawah (_), titik (.), dan tanda hubung (-).
disk_categorystring
Tidak
Kategori disk cloud. Nilai yang valid:
-
cloud_efficiency: disk ultra
-
cloud_ssd: SSD standar
-
cloud_essd: SSD Perusahaan (ESSD)
-
cloud: disk dasar
disk_sizeint
Tidak
Ukuran disk cloud. Satuan: GiB. Minimal 20 dan tidak kurang dari ukuran gambar. Nilai default: 40 atau ukuran gambar, mana yang lebih besar.
disk_descriptionstring
Tidak
Deskripsi disk cloud. Kosong secara default.
CatatanDeskripsi harus terdiri dari 2 hingga 256 karakter dan tidak boleh dimulai dengan
http://atauhttps://.disk_snapshot_idstring
Tidak
ID snapshot yang digunakan untuk membuat disk data.
disk_delete_with_instanceboolean
Tidak
Menentukan apakah akan melepas disk data saat instance dilepas. Nilai yang valid:
-
true
-
false
Nilai default: true.
disk_devicestring
Tidak
Titik pemasangan disk data.
disk_encryptedboolean
Tidak
Menentukan apakah akan mengenkripsi disk data. Nilai yang valid:
-
true
-
false
Nilai default: false.
-
-
Tekan
Esc, ketik:wq, lalu tekanEnteruntuk menyimpan dan keluar.
Langkah 3: Gunakan Packer untuk membuat gambar kustom
Buat gambar kustom dari templat Packer.
-
Buat gambar kustom.
File HCL
packer build alicloud.pkr.hclOutput berikut menunjukkan bahwa gambar
m-m5e3f0gu2dxs4z0s****telah dibuat di wilayah China (Qingdao).alicloud-ecs.autogenerated_1: output will be in this color. ==> alicloud-ecs.autogenerated_1: Prevalidating source region and copied regions... ==> alicloud-ecs.autogenerated_1: Prevalidating image name... alicloud-ecs.autogenerated_1: Found image ID: aliyun_3_x64_20G_alibase_20220907.vhd ==> alicloud-ecs.autogenerated_1: Creating temporary keypair: packer_64bf3d40-2fe7-8251-276d-df59a0bb**** --------------------------- ==> alicloud-ecs.autogenerated_1: Provisioning with shell script: /tmp/packer-shell3356722207 alicloud-ecs.autogenerated_1: Last metadata expiration check: 0:00:11 ago on Tue 25 Jul 2023 11:12:18 AM CST. --------------------------- alicloud-ecs.autogenerated_1: Complete! ==> alicloud-ecs.autogenerated_1: Stopping instance: i-m5e87pt498pr8zv0**** ==> alicloud-ecs.autogenerated_1: Waiting instance stopped: i-m5e87pt498pr8zv0**** ==> alicloud-ecs.autogenerated_1: Creating image: packer_basic alicloud-ecs.autogenerated_1: Detach keypair packer_64bf3d40-2fe7-8251-276d-df59a0bb**** from instance: i-m5e87pt498pr8zv0**** ==> alicloud-ecs.autogenerated_1: Cleaning up 'EIP' ==> alicloud-ecs.autogenerated_1: Cleaning up 'instance' ==> alicloud-ecs.autogenerated_1: Cleaning up 'security group' ==> alicloud-ecs.autogenerated_1: Cleaning up 'vSwitch' ==> alicloud-ecs.autogenerated_1: Cleaning up 'VPC' ==> alicloud-ecs.autogenerated_1: Deleting temporary keypair... Build 'alicloud-ecs.autogenerated_1' finished after 4 minutes 32 seconds. ==> Wait completed after 4 minutes 32 seconds ==> Builds finished. The artifacts of successful builds are: --> alicloud-ecs.autogenerated_1: Alicloud images were created: cn-qingdao: m-m5e3f0gu2dxs4z0s****File JSON
packer build alicloud.jsonOutput berikut menunjukkan bahwa gambar
m-m5e3f0gu2dxs4z0s****telah dibuat di wilayah China (Qingdao).alicloud-ecs output will be in this color. ==> alicloud-ecs: Prevalidating image name... alicloud-ecs: Found image ID: aliyun_3_x64_20G_alibase_20220907.vhd ==> alicloud-ecs: Creating temporary keypair: packer_6345090e-ec1f-8ea0-348c-f85ba047**** ==> alicloud-ecs: Creating vpc --------------------------- ==> alicloud-ecs: Provisioning with shell script: /tmp/packer-shell090019677 alicloud-ecs: Last metadata expiration check: 0:00:15 ago on Tue 11 Oct 2022 02:12:51 PM CST. --------------------------- alicloud-ecs: Complete! ==> alicloud-ecs: Deleting image snapshots. ==> alicloud-ecs: Creating image: packer_basic alicloud-ecs: Detach keypair packer_6345090e-ec1f-8ea0-348c-f85ba047**** from instance: i-m5e7it5p4dpwetfr**** ==> alicloud-ecs: Cleaning up 'EIP' ==> alicloud-ecs: Cleaning up 'instance' ==> alicloud-ecs: Cleaning up 'security group' ==> alicloud-ecs: Cleaning up 'vSwitch' ==> alicloud-ecs: Cleaning up 'VPC' ==> alicloud-ecs: Deleting temporary keypair... Build 'alicloud-ecs' finished. ==> Builds finished. The artifacts of successful builds are: --> alicloud-ecs: Alicloud images were created: cn-qingdao: m-m5e3f0gu2dxs4z0s**** -
Verifikasi gambar kustom.
Masuk ke Konsol ECS.
Di bilah navigasi kiri, pilih .
-
Di bilah navigasi atas, pilih wilayah yang ditentukan dalam templat Anda, seperti China (Qingdao).
-
Di tab Custom Images, temukan gambar bernama packer_basic.