All Products
Search
Document Center

Elastic Compute Service:Buat custom image dengan Packer

Last Updated:Feb 12, 2026

Packer adalah alat open source ringan yang digunakan untuk membuat image. Packer berjalan di sistem operasi utama seperti Windows, Linux, dan macOS, serta mampu membuat image mesin virtual untuk berbagai platform secara paralel dan efisien. Topik ini menjelaskan cara menginstal Packer pada instance Elastic Compute Service (ECS), mendefinisikan templat Packer, dan menggunakan Packer untuk membuat custom image.

Prasyarat

Anda memiliki pasangan AccessKey, yang terdiri dari ID AccessKey dan Rahasia AccessKey. Untuk informasi selengkapnya, lihat Dapatkan pasangan AccessKey.

Catatan
  • Untuk mencegah kebocoran pasangan AccessKey akun Alibaba Cloud Anda, kami menyarankan agar Anda membuat pengguna Resource Access Management (RAM) dan menggunakan kredensial pengguna RAM tersebut untuk membuat pasangan AccessKey. Untuk informasi tentang cara membuat pengguna RAM, lihat Buat pengguna RAM.

  • Rahasia AccessKey untuk pengguna RAM hanya ditampilkan saat Anda membuat pasangan AccessKey tersebut. Anda tidak dapat mengambil kembali Rahasia AccessKey setelah pasangan tersebut dibuat. Catat dan simpan kerahasiaan Rahasia AccessKey Anda.

Informasi latar belakang

Packer terdiri dari berbagai komponen, seperti Builders, Provisioners, dan Post-Processors. Packer menggunakan templat dalam format Hashicorp Configuration Language (HCL) atau JSON untuk menyederhanakan pembuatan custom image. Packer mengubah proses pembuatan image manual dan ad-hoc menjadi konfigurasi sebagai kode yang mudah dikelola, sehingga menurunkan hambatan migrasi aplikasi ke cloud. Untuk informasi lebih lanjut tentang Packer, lihat dokumentasi resmi Packer.

Prosedur

Langkah 1: Instal Packer

  1. Hubungkan ke instance Linux.

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

    cd /usr/local/bin
    Catatan

    Direktori /usr/local/bin berada dalam PATH sistem. Anda dapat menginstal Packer di direktori ini atau di direktori lain yang sudah termasuk dalam PATH.

  3. Unduh paket instalasi Packer.

    Atau, kunjungi halaman Instal Packer untuk mengunduh paket sesuai OS dan arsitektur instance 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 instalasi Packer:

    unzip packer_1.8.5_linux_amd64.zip
  5. Periksa versi Packer untuk memverifikasi instalasi.

    packer -v
    • Jika perintah mengembalikan nomor versi Packer, berarti Packer telah terinstal.

    • Jika perintah mengembalikan pesan command not found, berarti Packer belum terinstal dengan benar. Pastikan direktori tempat Packer berada termasuk dalam PATH sistem Anda.

Langkah 2: Definisikan templat Packer

Untuk membuat custom image dengan Packer, buat file templat dalam format HCL atau JSON. Dalam templat ini, Anda harus menentukan Builders dan Provisioners untuk membuat custom image tersebut. Packer menyediakan berbagai jenis provisioner untuk mengonfigurasi konten image. Topik ini menggunakan provisioner Shell sebagai contoh untuk mendefinisikan templat Packer.

  1. Impor ID AccessKey Anda.

    export ALICLOUD_ACCESS_KEY=<AccessKey ID>

    Ganti <AccessKey ID> dengan ID AccessKey aktual Anda. Untuk menemukan ID AccessKey pengguna RAM, lihat Lihat informasi pasangan AccessKey pengguna RAM.

  2. Impor Rahasia AccessKey Anda.

    export ALICLOUD_SECRET_KEY=<AccessKey Secret>

    Ganti <AccessKey Secret> dengan Rahasia AccessKey aktual Anda. Rahasia AccessKey pengguna RAM hanya ditampilkan saat dibuat dan tidak dapat diambil kembali nanti. Untuk informasi selengkapnya, lihat Dapatkan pasangan AccessKey.

  3. Buat file bernama alicloud.

    Catatan

    Anda dapat menggunakan salah satu format file berikut untuk membuat file alicloud. Jika Anda membuat file HCL, pastikan Anda menggunakan contoh dan perintah HCL pada langkah-langkah selanjutnya.

    File HCL

    vi alicloud.pkr.hcl

    File JSON

    vi alicloud.json
  4. Tekan tombol I untuk masuk ke 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 dalam templat Packer. Untuk informasi selengkapnya, lihat dokumentasi resmi Packer.

    Parameter

    Tipe

    Wajib

    Deskripsi

    region

    string

    Ya

    Wilayah tempat instance ECS sementara yang digunakan untuk membuat custom image berada. Contoh: cn-qingdao.

    image_name

    string

    Ya

    Nama custom image. Contoh: packer_basic.

    instance_type

    string

    Ya

    Tipe instance dari instance ECS sementara yang digunakan untuk membuat custom image. Contoh: ecs.g6.large. Setelah custom image dibuat, instance ECS sementara akan dilepas secara otomatis.

    Catatan

    Saat Anda menggunakan Packer untuk membuat custom image, operasi CreateInstance dipanggil untuk membuat instance ECS sementara. Instance ini berisi sistem operasi dan perangkat lunak yang diperlukan untuk pembuatan image. Instance berbayar sesuai penggunaan ini dikenai biaya.

    ssh_username

    string

    Ya

    Username yang digunakan untuk menghubungkan ke instance ECS sementara melalui SSH.

    internet_charge_type

    string

    Tidak

    Metode penagihan penggunaan jaringan untuk instance ECS sementara yang digunakan untuk membuat custom image. Nilai yang valid:

    • PayByBandwidth: bayar-per-bandwidth.

    • PayByTraffic: bayar-per-lalu-lintas.

    source_image

    string

    Anda harus menentukan salah satu parameter.

    ID image dasar yang digunakan untuk membuat instance ECS sementara. Anda dapat memperoleh ID image dasar dari daftar image publik di Konsol ECS atau dengan memanggil operasi DescribeImages.

    Penting

    Saat mengonfigurasi parameter ini, pastikan tipe image yang dipilih kompatibel dengan tipe instance yang ditentukan. Misalnya, image Arm (yang ID imagenya mengandung _arm64_) harus digunakan dengan tipe instance berbasis Arm. Jika tidak, pembuatan image akan gagal.

    image_family

    string

    Nama family image. Packer menggunakan image terbaru yang tersedia dari family 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

    Family image dari custom image 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 menghubungkan ke instance melalui koneksi SSH pribadi. Nilai default: false. Nilai yang valid:

    • false: Alamat IP ditetapkan untuk koneksi melalui internet.

    • true: Alamat IP elastis (EIP) atau alamat IP publik tidak ditetapkan. Instance dihubungkan melalui alamat IP pribadinya.

    Catatan

    Untuk menggunakan koneksi pribadi, mesin tempat Packer dijalankan dan mesin yang dibuat oleh Packer harus berada dalam lingkungan jaringan yang sama, artinya keduanya 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 pemeriksaan image. 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
    }

    Untuk informasi selengkapnya, lihat bagian Konfigurasi disk cloud dalam topik ini.

    image_disk_mappings

    list

    Tidak

    Konfigurasi disk data dalam custom image. Contoh:

    "image_disk_mappings": {
     "disk_name": "datadisk",
     "disk_snapshot_id": "s-bp1xxxxxx",
     "disk_device": "dev/xvdb"
    }

    Untuk informasi selengkapnya, lihat bagian Konfigurasi disk cloud dalam topik ini.

    image_ignore_data_disks

    boolean

    Tidak

    Menentukan apakah image yang dibuat mencakup snapshot disk data. Nilai default: false. Nilai yang valid:

    • false: Image yang dibuat mencakup disk data.

    • true: Image yang dibuat hanya berdasarkan disk sistem dan tidak mencakup disk data.

    profile

    string

    Tidak

    File konfigurasi untuk menjalankan Packer. Jika parameter ini ditentukan, konfigurasi akan diambil terlebih dahulu dari file ini.

    ram_role_name

    string

    Tidak

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

    Catatan

    Parameter ini hanya berlaku ketika Packer dijalankan pada instance ECS yang telah dilengkapi peran RAM.

    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 guna membuat image.

    ram_session_name

    string

    Tidak

    Nama sesi peran RAM. Digunakan bersama ram_role_arn untuk memungkinkan Akun A mengasumsikan peran Akun B guna membuat image.

    ecs_ram_role_name

    string

    Tidak

    Nama peran RAM instans yang dilampirkan ke instance ECS sementara. Anda dapat memanggil operasi ListRoles yang disediakan oleh RAM untuk mengkueri daftar peran RAM instans yang tersedia.

    ssh_keypair_name

    string

    Tidak

    Nama pasangan kunci SSH yang digunakan untuk menghubungkan ke instance ECS sementara.

    ssh_private_key_file

    string

    Tidak

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

    custom_endpoint_ecs

    string

    Tidak

    Titik akhir kustom dari instance ECS sementara.

    security_group_id

    string

    Tidak

    ID grup keamanan tempat instance ECS sementara ditempatkan.

    security_group_name

    string

    Tidak

    Nama grup keamanan tempat instance ECS sementara ditempatkan. Jika Anda tidak menentukan ID grup keamanan, Packer akan membuat grup keamanan dengan nama yang ditentukan.

    vpc_id

    string

    Tidak

    ID virtual private cloud (VPC) tempat instance ECS sementara dibuat.

    vpc_name

    string

    Tidak

    Nama VPC tempat instance ECS sementara dibuat. Jika Anda tidak menentukan parameter vpc_id, Packer akan membuat VPC dengan nama yang ditentukan.

    vswitch_id

    string

    Tidak

    ID vSwitch tempat instance ECS sementara dihubungkan.

    vswitch_name

    string

    Tidak

    Nama vSwitch tempat instance ECS sementara dihubungkan. Jika Anda tidak menentukan parameter vswitch_id, Packer akan membuat vSwitch dengan nama yang ditentukan.

    user_data

    string

    Tidak

    Data pengguna instance. Data harus dienkode Base64, dan data mentah tidak boleh melebihi ukuran 32 KB. Untuk informasi selengkapnya tentang batasan, format, dan frekuensi eksekusi user data, lihat Kustomisasi konfigurasi inisialisasi untuk instance.

    Catatan

    Untuk melindungi data sensitif seperti password dan kunci privat selama transmisi, enkripsi data tersebut sebelum melakukan enkode Base64, lalu dekripsi data di dalam instance.

    user_data_file

    string

    Tidak

    File data pengguna instance ECS sementara.

    boot_mode

    string

    Tidak

    Mode boot custom image. 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. Nilai default adalah nilai InstanceId instance tersebut.

    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 image yang sudah ada dengan nama yang sama seperti custom image yang ingin Anda buat. Nilai default: false. Nilai yang valid:

    • true: menghapus image yang sudah ada dengan nama yang sama seperti custom image yang ingin Anda buat, lalu membuat custom image tersebut.

    • false: tidak menghapus image yang sudah ada dengan nama yang sama seperti custom image yang ingin Anda buat. Dalam kasus ini, pembuatan image gagal.

    image_force_delete_snapshots

    boolean

    Tidak

    Menentukan apakah akan menghapus snapshot yang terkait dengan image yang sudah ada dengan nama yang sama seperti custom image yang ingin Anda buat. Nilai default: false. Nilai yang valid:

    • true: menghapus image yang sudah ada dengan nama yang sama seperti custom image yang ingin Anda buat beserta snapshot yang terkait dengannya, lalu membuat custom image tersebut.

    • false: tidak menghapus image yang sudah ada dengan nama yang sama seperti custom image yang ingin Anda buat atau snapshot yang terkait dengannya. Dalam kasus ini, pembuatan image gagal.

    image_version

    string

    Tidak

    Versi custom image.

    resource_group_id

    string

    Tidak

    ID kelompok sumber daya tempat custom image ditempatkan.

    force_stop_instance

    boolean

    Tidak

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

    disable_stop_instance

    boolean

    Tidak

    Secara default, setelah Packer menjalankan provisioner, Packer akan menghentikan instance ECS sementara lalu membuat custom image dari instance tersebut. Namun, instance harus dalam status Berjalan dalam skenario tertentu, seperti saat Anda menjalankan Sysprep pada instance Windows. Nilai default: false.

    run_tags

    object

    Tidak

    Tag custom image. Contoh: {"key":"value"}.

    image_description

    string

    Tidak

    Deskripsi custom image.

    image_share_account

    []string

    Tidak

    Pengguna yang akan menerima sharing custom image. Contoh: ["123456"].

    image_copy_regions

    []string

    Tidak

    Wilayah tempat Anda ingin menyalin custom image. Contoh: ["cn-beijing"].

    provisioners

    string

    Tidak

    Jenis provisioner yang digunakan untuk membuat custom image. Nilai yang valid:

    • File

    • PowerShell

    • Shell

    • Local Shell

    • Windows Shell

    Untuk informasi selengkapnya, 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. Nilai parameter ini minimal 20 dan harus lebih besar atau sama dengan ukuran image. Nilai default: 40 atau ukuran image, mana yang lebih besar.

    disk_description

    string

    Tidak

    Deskripsi disk cloud. Parameter ini 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 ingin Anda gunakan untuk membuat disk data.

    disk_delete_with_instance

    boolean

    Tidak

    Menentukan apakah disk data akan dilepas saat instans terkait dilepas. Nilai yang valid:

    • true

    • false

    Nilai default: true.

    disk_device

    string

    Tidak

    Titik pemasangan disk data.

    disk_encrypted

    boolean

    Tidak

    Menentukan apakah disk data dienkripsi. Nilai yang valid:

    • true

    • false

    Nilai default: false.

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

Langkah 3: Gunakan Packer untuk membuat custom image

Ikuti langkah-langkah berikut untuk membuat custom image dari file templat Packer.

  1. Buat custom image.

    File HCL

    packer build alicloud.pkr.hcl

    Output berikut menunjukkan bahwa image dengan ID 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 image dengan ID 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 custom image yang telah dibuat.

    1. Masuk ke Konsol ECS.

    2. Di panel navigasi sebelah kiri, pilih Instances & Images > Images.

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

    4. Di tab Custom Images, cari image bernama packer_basic.