Membawa Chef ke cloud: mengelola instance AWS, GCP, dan Azure lewat recipe atau plugin knife, integrasi dengan Terraform dan cloud-init, bootstrap node otomatis di CI/CD, golden images, dan immutable infrastructure.

Di episode 13 kalian sudah mengamankan komunikasi antar komponen Chef dengan kunci dan sertifikat. Sekarang saatnya membawa arsitektur itu ke cloud. Di episode 14 ini kita membahas integrasi Chef dengan cloud dan IaC — mengelola instance AWS, GCP, dan Azure, menghubungkan Chef dengan Terraform dan cloud-init, serta menerapkan pola bootstrap otomatis, golden images, dan immutable infrastructure.
Tujuan episode ini:
Plugin knife seperti knife-ec2, knife-google, dan knife-azure memungkinkan kalian membuat instance langsung dari CLI, sekaligus me-bootstrap-nya menjadi node Chef:
knife ec2 server create \
-I ami-0abcdef1234567890 \
-f t3.micro \
--ssh-key arman-key --ssh-user ubuntu \
-Z ap-southeast-1a \
--run-list 'role[app-server]' \
--tags Environment=stagingNote
Plugin knife dan Terraform sama-sama menyentuh API cloud; yang berbeda hanya alur kerjanya. Knife plugin cocok untuk bootstrap manual yang cepat, sedangkan Terraform untuk pipeline IaC penuh.
Alternatif lain adalah provisioning langsung dari recipe, misalnya memanggil SDK cloud dalam library Ruby. Namun pola ini jarang dipakai karena mencampur orkestrasi dengan konfigurasi. Pola yang lebih umum dan direkomendasikan: bootstrap di akhir pipeline provisioning — biarkan Terraform yang membuat infrastruktur, lalu node menyambung ke Chef sendiri.
Terraform membangun infrastruktur (network, instance, disk); cloud-init mengeksekusi user-data saat instance pertama kali hidup. Di sinilah Chef di-bootstrap:
#!/bin/bash
set -euxo pipefail
apt-get update -y
curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -v 18.5
sudo mkdir -p /etc/chef/trusted_certs
sudo cp /tmp/chef-server.crt /etc/chef/trusted_certs/
sudo tee /etc/chef/client.rb > /dev/null <<EOF
chef_server_url "https://chef.example.com/organizations/devops"
validation_client_name "devops-validator"
validation_key "/etc/chef/validation.pem"
node_name "web-$(hostname -s)"
environment "staging"
EOF
sudo chef-client -j /tmp/first-boot.jsonFile first-boot.json berisi run list awal:
{
"run_list": ["role[base]", "role[app-server]"]
}Terraform mengirim skrip di atas lewat argumen user_data. Begitu instance hidup, cloud-init menjalankannya, chef-client terinstal, dan node langsung terdaftar di Infra Server tanpa tangan manusia.
Pola bootstrap otomatis dalam pipeline:
terraform apply membuat instance baru.terraform apply -auto-approve
sleep 60
chef-clientTip
Simpan hasil terraform plan sebagai artifact, dan pastikan run chef-client di CI memakai environment yang sesuai dengan diff-nya. Dengan begitu setiap perubahan infrastruktur tercatat dan bisa di-rollback.
Golden image adalah image base yang sudah disiapkan: chef-client terinstal, sertifikat trust siap, tooling dasar terpasang. Node baru hanya perlu user-data tipis untuk menyelesaikan bootstrap.
Immutable infrastructure berarti instance tidak pernah diubah setelah lahir — setiap perubahan menghasilkan image baru, lalu instance lama diganti. Pola ini cocok dipadukan dengan golden image: Chef digunakan saat membangun image, bukan saat instance berjalan.
| Pendekatan | Perubahan | Cocok untuk |
|---|---|---|
| Mutable (konvensional) | chef-client di instance | Server stateful, DB, patch cepat |
| Immutable (golden image) | Image baru + replace | Stateless, web tier, autoscaling |
Tip
Kombinasikan keduanya: immutable untuk lapisan stateless dengan autoscaling, mutable untuk layanan stateful. Chef tetap dipakai di kedua model — yang berbeda hanya kapan dan di mana ia berjalan.
Pada episode 14 ini kalian memahami integrasi Chef dengan cloud dan IaC: pembuatan instance lewat plugin knife, provisioning Terraform yang digabung dengan cloud-init untuk me-bootstrap node otomatis, pipeline bootstrap di CI/CD, serta konsep golden images dan immutable infrastructure.
Inti yang harus dibawa pulang:
Di episode 15 berikutnya kita memoles kebiasaan kerja: Best Practice — desain cookbook yang idempoten dan modular, metadata dependency yang benar, versioning, serta test-driven infrastructure dengan InSpec dan Test Kitchen. Sampai jumpa di episode 15!