Ini merupakan ekstensi artikel Buat Custom Image AlibabaCloud Menggunakan Packer (IaC). Jika pada artikel tersebut hanya menggunakan shell
sebagai provisioner, kali ini saya gabunging shell
dan ansible
sebagai provisioner.
Disini saya hanya memberi contoh dan penjelasan sedikit terkait bagaimana menggunakan Ansible pada Packer. Diharapkan bisa berguna untuk pembelajaran otomatisasi pembuatan custom image pada cloud provider (Alibabacloud/AWS/GCP).
Disini saya hanya membahas Bagaimana mengkonfigurasi custom image menggunakan Ansible?
Sebenarnya pertanyaan tersebut sudah tersedia jawabanya di dokumentasi resminya. Namun, kadang kita butuh referensi lain berupa contoh (example) yang ditulis dalam kode dan cara mengeksekusinya.
Disini saya menggunakan metode menjalankan semua Task
ansible dari dalam server (server yang digunakan untuk proses pembuatan image). Bukan menjalankan ansible dari remote SSH. Jika ingin menggunakan ansible melalui remote SSH bisa baca dokumentasi ini.
File main.pkr.hcl
packer { required_plugins { alicloud = { source = "github.com/hashicorp/alicloud" version = "~> 1" } } } source "alicloud-ecs" "autogenerated_1" { associate_public_ip_address = true image_name = "apache2_php_fpm74" instance_type = "ecs.g6.large" internet_charge_type = "PayByTraffic" io_optimized = true region = "ap-southeast-5" skip_image_validation = true source_image = "ubuntu_20_04_x64_20G_alibase_20230815.vhd" ssh_username = "root" } build { sources = ["source.alicloud-ecs.autogenerated_1"] provisioner "shell" { inline = [ "apt update", "apt install software-properties-common -y", "add-apt-repository --yes --update ppa:ansible/ansible", "apt install ansible -y", ] } provisioner "ansible-local" { playbook_dir = "../base-image" playbook_files = ["playbook.yml"] } }
Struktur direktori:
base-image/ ├── files │ └── say.php ├── main.pkr.hcl ├── playbook.yml └── templates ├── apiservicea.conf.j2 └── apiserviceb.conf.j2
Cara mengekseskusi:
packer build -force main.pkr.hcl
Additional example (playbook.yml
) files:
# playbook.yml - name: 'Provision Image' hosts: localhost become: true tasks: - name: install Apache package: name: - apache2 - git - php-fpm - php-cgi - libapache2-mod-php - php-common - php-pear - php-mbstring - php-gd - php-mysql - php-sqlite3 - php-zip - php-xml - php-json - php-mail - php-curl state: present
Example output:
Admin LUKMANLAB, DevOps Engineer, Site Reliability Engineer, System Administrator.