All Products
Search
Document Center

Elastic Compute Service:Buat gambar kustom dengan Packer

Last Updated:Apr 28, 2026

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.

Catatan
  • 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

  1. Hubungkan ke instance Linux.

  2. Navigasi ke direktori /usr/local/bin:

    cd /usr/local/bin
    Catatan

    /usr/local/bin berada dalam PATH sistem. Anda juga dapat menginstal Packer di direktori lain yang termasuk dalam PATH.

  3. 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
  4. Ekstrak paket:

    unzip packer_1.8.5_linux_amd64.zip
  5. Verifikasi instalasi.

    packer -v
    • Jika nomor versi dikembalikan, Packer telah terinstal.

    • Jika command not found dikembalikan, Packer belum terinstal dengan benar. Pastikan direktori Packer berada dalam PATH sistem Anda.

Langkah 2: Definisikan templat Packer

Buat templat HCL atau JSON yang menentukan Builders dan Provisioners. Contoh ini menggunakan provisioner Shell.

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

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

  3. Buat file bernama alicloud.

    Catatan

    Anda 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.hcl

    File JSON

    vi alicloud.json
  4. Tekan I untuk memasuki mode Insert. Salin salah satu templat berikut ke dalam file alicloud dan 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

    region

    string

    Ya

    Wilayah instance ECS sementara yang digunakan untuk membuat gambar kustom. Contoh: cn-qingdao.

    image_name

    string

    Ya

    Nama gambar kustom. Contoh: packer_basic.

    instance_type

    string

    Ya

    Tipe instans instance ECS sementara. Contoh: ecs.g6.large. Instance sementara secara otomatis dilepas setelah pembuatan gambar.

    Catatan

    Packer 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_username

    string

    Ya

    Username SSH untuk menghubungkan ke instance ECS sementara.

    internet_charge_type

    string

    Tidak

    Metode penagihan jaringan untuk instance ECS sementara. Nilai yang valid:

    • PayByBandwidth: bayar-per-bandwidth.

    • PayByTraffic: bayar-per-lalu-lintas.

    source_image

    string

    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.

    Penting

    Tipe 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_family

    string

    Nama keluarga gambar. Packer menggunakan gambar terbaru yang tersedia dari keluarga ini untuk membuat instance.

    Catatan

    Nama 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_family

    string

    Tidak

    Keluarga gambar dari gambar kustom yang akan dibuat.

    Catatan

    Nama 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_ip

    boolean

    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.

    Catatan

    Untuk koneksi privat, host Packer dan instance yang dibuat harus berada dalam vSwitch yang sama.

    associate_public_ip_address

    boolean

    Menentukan apakah akan menetapkan alamat IP publik ke instance ECS sementara.

    eip_id

    string

    ID EIP yang dikaitkan dengan instance ECS sementara.

    skip_image_validation

    boolean

    Tidak

    Menentukan apakah akan melewati validasi gambar. Nilai default: false.

    system_disk_mapping

    object

    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_mappings

    list

    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_disks

    boolean

    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.

    profile

    string

    Tidak

    File konfigurasi Packer. Jika ditentukan, konfigurasi akan dimuat lebih dulu dari file ini.

    ram_role_name

    string

    Tidak

    Nama peran RAM. Digunakan untuk memperoleh AccessKey sementara bagi peran RAM lokal guna menjalankan templat Packer.

    Catatan

    Hanya berlaku ketika Packer dijalankan pada instance ECS dengan peran RAM yang dilampirkan.

    ram_role_arn

    string

    Tidak

    Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM. Digunakan bersama ram_session_name untuk memungkinkan Akun A mengasumsikan peran Akun B dalam pembuatan gambar.

    ram_session_name

    string

    Tidak

    Nama sesi peran RAM. Digunakan bersama ram_role_arn untuk pembuatan gambar lintas akun.

    ecs_ram_role_name

    string

    Tidak

    Peran RAM instans yang dilampirkan ke instance ECS sementara. Panggil operasi ListRoles untuk menanyakan peran yang tersedia.

    ssh_keypair_name

    string

    Tidak

    Nama pasangan kunci SSH untuk menghubungkan ke instance ECS sementara.

    ssh_private_key_file

    string

    Tidak

    Jalur file kunci privat dari pasangan kunci SSH untuk menghubungkan ke instance ECS sementara.

    custom_endpoint_ecs

    string

    Tidak

    Titik akhir ECS kustom.

    security_group_id

    string

    Tidak

    ID grup keamanan untuk instance ECS sementara.

    security_group_name

    string

    Tidak

    Nama grup keamanan. Jika ID grup keamanan tidak ditentukan, Packer membuat satu dengan nama ini.

    vpc_id

    string

    Tidak

    ID VPC untuk instance ECS sementara.

    vpc_name

    string

    Tidak

    Nama VPC. Jika vpc_id tidak ditentukan, Packer membuat VPC dengan nama ini.

    vswitch_id

    string

    Tidak

    ID vSwitch untuk instance ECS sementara.

    vswitch_name

    string

    Tidak

    Nama vSwitch. Jika vswitch_id tidak ditentukan, Packer membuat vSwitch dengan nama ini.

    user_data

    string

    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.

    Catatan

    Enkripsi data sensitif (password, kunci privat) sebelum pengkodean Base64, lalu dekripsi di dalam instance.

    user_data_file

    string

    Tidak

    Jalur file data pengguna untuk instance ECS sementara.

    boot_mode

    string

    Tidak

    Mode boot gambar kustom. Nilai yang valid: BIOS, UEFI, dan UEFI-Preferred.

    wait_snapshot_ready_timeout

    Integer

    Tidak

    Periode timeout snapshot. Nilai default: 3600. Satuan: detik.

    instance_name

    string

    Tidak

    Nama instance ECS sementara. Default ke InstanceId.

    Catatan

    Nama harus terdiri dari 2 hingga 128 karakter dan dapat berisi huruf, angka, titik dua (:), garis bawah (_), titik (.), dan tanda hubung (-).

    image_force_delete

    boolean

    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_snapshots

    boolean

    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_version

    string

    Tidak

    Versi gambar kustom.

    resource_group_id

    string

    Tidak

    ID kelompok sumber daya untuk gambar kustom.

    force_stop_instance

    boolean

    Tidak

    Menentukan apakah akan memaksa menghentikan instance ECS sementara. Nilai default: false.

    disable_stop_instance

    boolean

    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_tags

    object

    Tidak

    Tag untuk gambar kustom. Contoh: {"key":"value"}.

    image_description

    string

    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"].

    provisioners

    string

    Tidak

    Tipe provisioner. Nilai yang valid:

    • File

    • PowerShell

    • Shell

    • Local Shell

    • Windows Shell

    Lihat Provisioners.

    Konfigurasi disk cloud

    Parameter

    Tipe

    Wajib

    Deskripsi

    disk_name

    string

    Tidak

    Nama disk cloud.

    Catatan

    Nama harus terdiri dari 2 hingga 128 karakter dan dapat berisi huruf, angka, titik dua (:), garis bawah (_), titik (.), dan tanda hubung (-).

    disk_category

    string

    Tidak

    Kategori disk cloud. Nilai yang valid:

    • cloud_efficiency: disk ultra

    • cloud_ssd: SSD standar

    • cloud_essd: SSD Perusahaan (ESSD)

    • cloud: disk dasar

    disk_size

    int

    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_description

    string

    Tidak

    Deskripsi disk cloud. Kosong secara default.

    Catatan

    Deskripsi harus terdiri dari 2 hingga 256 karakter dan tidak boleh dimulai dengan http:// atau https://.

    disk_snapshot_id

    string

    Tidak

    ID snapshot yang digunakan untuk membuat disk data.

    disk_delete_with_instance

    boolean

    Tidak

    Menentukan apakah akan melepas disk data saat instance dilepas. Nilai yang valid:

    • true

    • false

    Nilai default: true.

    disk_device

    string

    Tidak

    Titik pemasangan disk data.

    disk_encrypted

    boolean

    Tidak

    Menentukan apakah akan mengenkripsi disk data. Nilai yang valid:

    • true

    • false

    Nilai default: false.

  5. Tekan Esc, ketik :wq, lalu tekan Enter untuk menyimpan dan keluar.

Langkah 3: Gunakan Packer untuk membuat gambar kustom

Buat gambar kustom dari templat Packer.

  1. Buat gambar kustom.

    File HCL

    packer build alicloud.pkr.hcl

    Output 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.json

    Output 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****
  2. Verifikasi gambar kustom.

    1. Masuk ke Konsol ECS.

    2. Di bilah navigasi kiri, pilih Instances & Images > Image.

    3. Di bilah navigasi atas, pilih wilayah yang ditentukan dalam templat Anda, seperti China (Qingdao).

    4. Di tab Custom Images, temukan gambar bernama packer_basic.