arrow_back

Infrastructure as Code dengan Terraform

Login Gabung
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Infrastructure as Code dengan Terraform

Lab 1 jam universal_currency_alt 5 Kredit show_chart Menengah
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Lab ini dikembangkan dengan partner kami, Hashicorp. Informasi pribadi Anda mungkin akan dibagikan kepada Hashicorp, sponsor lab ini, jika Anda memilih untuk menerima info terbaru terkait produk, pengumuman, dan penawaran di Profil Akun Anda.

GSP750

Lab Mandiri Google Cloud

Ringkasan

Terraform adalah penawaran infrastructure as code dari HashiCorp. Ini adalah alat untuk membangun, mengubah, dan mengelola infrastruktur dengan cara yang aman dan berulang. Tim operator dan infrastruktur dapat menggunakan Terraform untuk mengelola lingkungan dengan bahasa konfigurasi yang disebut dengan Hashicorp Configuration Language (HCL) untuk deployment otomatis yang dapat dibaca manusia.

Infrastructure as code adalah proses pengelolaan infrastruktur dalam satu atau beberapa file alih-alih pengonfigurasian resource secara manual dalam suatu antarmuka pengguna. Resource dalam instance ini adalah infrastruktur apa pun di lingkungan tertentu, seperti virtual machine, grup keamanan, antarmuka jaringan, dll. Pada tingkat tinggi, Terraform memungkinkan operator menggunakan HCL untuk membuat file yang berisi definisi resource yang diinginkan pada hampir semua penyedia (AWS, Google Cloud, GitHub, Docker, dll.) dan mengotomatiskan pembuatan resource tersebut pada saat diterapkan.

Alur kerja yang sederhana untuk deployment akan sangat mengikuti langkah-langkah berikut ini:

  • Scope - Konfirmasi resource yang diperlukan untuk dibuat dalam project tertentu.
  • Author - Buat file konfigurasi di HCL berdasarkan parameter yang tercakup.
  • Initialize - Jalankan terraform init dalam direktori project dengan file konfigurasi. Tindakan ini akan mendownload plugin penyedia yang sesuai untuk project.
  • Plan & Apply - Jalankan terraform plan untuk memverifikasi proses pembuatan, kemudian terraform apply untuk membuat resource yang sesungguhnya beserta file state yang membandingkan perubahan mendatang di file konfigurasi Anda dengan apa yang sebenarnya ada di lingkungan deployment Anda.

Tujuan

Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:

  • Membangun, mengubah, dan menghancurkan infrastruktur dengan Terraform
  • Membuat Dependensi Resource dengan Terraform
  • Menyediakan infrastruktur dengan Terraform

Penyiapan dan persyaratan

Sebelum mengklik tombol Mulai Lab

Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer, yang dimulai saat Anda mengklik Start Lab, akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.

Lab praktik ini dapat Anda gunakan untuk melakukan sendiri aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.

Untuk menyelesaikan lab ini, Anda memerlukan:

  • Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
  • Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Jika Anda sudah memiliki project atau akun pribadi Google Cloud, jangan menggunakannya untuk lab ini agar terhindar dari tagihan ekstra pada akun Anda.

Cara memulai lab dan login ke Google Cloud Console

  1. Klik tombol Start Lab. Jika Anda perlu membayar lab, jendela pop-up akan terbuka untuk memilih metode pembayaran. Di sebelah kiri adalah panel Lab Details dengan berikut ini:

    • Tombol Open Google Console
    • Waktu tersisa
    • Kredensial sementara yang harus Anda gunakan untuk lab ini
    • Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
  2. Klik Open Google Console. Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Login.

    Tips: Atur tab di jendela terpisah secara berdampingan.

    Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
  3. Jika perlu, salin Username dari panel Lab Details dan tempel ke dialog Sign in. Klik Next.

  4. Salin Password dari panel Lab Details dan tempel ke dialog Welcome. Klik Next.

    Penting: Anda harus menggunakan kredensial dari panel sebelah kiri. Jangan menggunakan kredensial Google Cloud Skills Boost. Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
  5. Klik halaman berikutnya:

    • Setujui persyaratan dan ketentuan.
    • Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
    • Jangan daftar uji coba gratis.

Setelah beberapa saat, Cloud Console akan terbuka di tab ini.

Catatan: Anda dapat melihat menu dengan daftar Produk dan Layanan Google Cloud dengan mengklik Menu navigasi di kiri atas. Ikon menu navigasi

Mengaktifkan Cloud Shell

Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.

  1. Klik Activate Cloud Shell Ikon Activate Cloud Shell di bagian atas konsol Google Cloud.

Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke PROJECT_ID Anda. Output berisi baris yang mendeklarasikan PROJECT_ID untuk sesi ini:

Project Cloud Platform Anda dalam sesi ini disetel ke YOUR_PROJECT_ID

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.

  1. (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
  1. Klik Authorize.

  2. Output Anda sekarang akan terlihat seperti ini:

Output:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net Untuk menyetel akun aktif, jalankan: $ gcloud config set account `ACCOUNT`
  1. (Opsional) Anda dapat menampilkan daftar project ID dengan perintah ini:
gcloud config list project

Output:

[core] project = <project_ID>

Contoh output:

[core] project = qwiklabs-gcp-44776a13dea667a6 Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.

Tugas 1. Membangun infrastruktur

Terraform sudah terinstal di Cloud Shell. Dengan Terraform yang sudah terinstal, Anda dapat langsung mengaksesnya dan membuat beberapa infrastruktur.

Mulai dengan membuat konfigurasi contoh Anda ke file bernama main.tf. Terraform mengenali file dengan akhiran .tf atau .tf.json sebagai file konfigurasi dan akan memuat file tersebut saat dijalankan.

  1. Buat file main.tf:
touch main.tf
  1. Klik tombol Open Editor di toolbar Cloud Shell. (Anda dapat beralih di antara Cloud Shell dan editor kode dengan menggunakan ikon Open Editor dan Open Terminal sesuai yang diperlukan, atau klik tombol Open in new window agar Editor terbuka di tab terpisah).

  2. Di Editor, tambahkan konten berikut ke file main.tf.

terraform { required_providers { google = { source = "hashicorp/google" version = "3.5.0" } } } provider "google" { project = "{{{project_0.project_id | PROJECT ID}}}" region = "{{{project_0.default_region | REGION}}}" zone = "{{{project_0.default_zone | ZONE}}}" } resource "google_compute_network" "vpc_network" { name = "terraform-network" } Catatan: Untuk menggunakan cuplikan ini dengan Terraform 0.12, hapus block terraform {}.

Blok Terraform

Blok terraform {} diperlukan agar Terraform tahu penyedia mana yang harus didownload dari Terraform Registry. Pada konfigurasi di atas, sumber penyedia google didefinisikan sebagai hashicorp/google yang merupakan singkatan dari registry.terraform.io/hashicorp/google.

Anda juga dapat menetapkan versi ke setiap penyedia yang ditentukan di blok required_providers. Argumen version bersifat opsional, tetapi direkomendasikan. Ini digunakan untuk membatasi penyedia ke versi tertentu atau serangkaian versi untuk mencegah mendownload penyedia baru yang mungkin berisi perubahan yang dapat menyebabkan gangguan. Jika versinya tidak ditentukan, Terraform akan secara otomatis mendownload penyedia terbaru selama inisialisasi.

Untuk mempelajari lebih lanjut, di situs HashiCorp Terraform, lihat Provider Requirements.

Penyedia

Blok provider digunakan untuk mengonfigurasi penyedia bernama, dalam kasus ini google. Penyedia bertanggung jawab untuk membuat dan mengelola resource. Beberapa blok penyedia dapat muncul jika konfigurasi Terraform mengelola resource dari penyedia yang berbeda.

Inisialisasi

Perintah pertama yang dijalankan untuk konfigurasi baru -- atau setelah memeriksa konfigurasi yang ada dari kontrol versi -- adalah terraform init, yang melakukan inisialisasi pada berbagai setelan lokal dan data yang akan digunakan oleh perintah berikutnya.

  • Lakukan inisialisasi pada konfigurasi Terraform baru Anda dengan menjalankan perintah terraform init di direktori yang sama dengan file main.tf Anda:
terraform init

Membuat resource

  1. Terapkan konfigurasi Anda sekarang dengan menjalankan perintah terraform apply:
terraform apply

Outputnya memiliki tanda + di samping resource "google_compute_network" "vpc_network", yang artinya Terraform akan membuat resource ini. Selain itu, outputnya menampilkan atribut yang akan ditetapkan. Jika nilai yang ditampilkan adalah (known after apply), artinya nilainya belum diketahui hingga resource dibuat.

Jika rencana berhasil dibuat, Terraform sekarang akan menjeda dan menunggu persetujuan sebelum melanjutkan. Jika ada yang terlihat salah atau berbahaya dalam rencana, Anda bisa membatalkan di titik ini tanpa adanya perubahan pada infrastruktur Anda.

Jika terraform apply gagal dengan menampilkan error, baca pesan error dan perbaiki error yang terjadi.

  1. Rencana ini kelihatannya dapat diterima sejauh ini, sehingga ketikkan yes pada prompt konfirmasi untuk memproses.

Mengeksekusi rencana akan memerlukan waktu beberapa menit karena Terraform menunggu jaringan berhasil dibuat:

# ... Enter a value: yes google_compute_network.vpc_network: Creating... google_compute_network.vpc_network: Still creating... [10s elapsed] google_compute_network.vpc_network: Still creating... [20s elapsed] google_compute_network.vpc_network: Still creating... [30s elapsed] google_compute_network.vpc_network: Still creating... [40s elapsed] google_compute_network.vpc_network: Still creating... [50s elapsed] google_compute_network.vpc_network: Creation complete after 58s [id=terraform-network] Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Setelah itu, semua proses di Terraform selesai. Anda dapat membuka Konsol Cloud untuk melihat jaringan yang telah Anda sediakan.

  1. Di Konsol, dari Navigation menu, buka VPC network. Anda akan melihat terraform-network sudah tersedia.

Halaman jaringan VPC

  1. Di Cloud Shell, jalankan perintah terraform show untuk memeriksa status saat ini:
terraform show

Nilai ini dapat direferensikan untuk mengonfigurasi resource atau output lain, yang akan dibahas nanti di lab ini.

Klik Check my progress untuk memverifikasi tujuan. Membuat Resource di terraform

Tugas 2. Mengubah infrastruktur

Pada bagian sebelumnya, Anda membuat infrastruktur dasar dengan Terraform: jaringan VPC. Pada bagian ini, Anda akan memodifikasi konfigurasi, dan lihat cara Terraform menangani perubahan.

Infrastruktur terus berkembang, dan Terraform dibangun untuk membantu mengelola dan menerapkan perubahan tersebut. Saat Anda mengubah konfigurasi Terraform, Terraform membuat rencana eksekusi yang hanya mengubah apa yang diperlukan untuk mencapai status yang Anda inginkan.

Dengan menggunakan Terraform untuk mengubah infrastruktur, Anda tidak hanya dapat mengontrol versi konfigurasi, tetapi juga statusnya sehingga Anda dapat melihat bagaimana infrastruktur berkembang seiring waktu.

Menambahkan resource

Anda dapat menambahkan resource baru dengan menambahkannya ke konfigurasi Terraform dan menjalankan terraform apply untuk menyediakan resource tersebut.

  1. Di Editor, tambahkan resource instance komputasi ke main.tf:
resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "e2-micro" boot_disk { initialize_params { image = "debian-cloud/debian-11" } } network_interface { network = google_compute_network.vpc_network.name access_config { } } }

Resource ini mencakup beberapa argumen tambahan. Nama dan jenis mesin merupakan string sederhana, tetapi boot_disk dan network_interface merupakan blok yang lebih kompleks. Anda dapat melihat seluruh opsi yang tersedia di dokumentasi google_compute_instance.

Untuk contoh ini, instance komputasi Anda akan menggunakan sistem operasi Debian, dan akan terhubung ke Jaringan VPC yang Anda buat sebelumnya. Perhatikan bagaimana konfigurasi ini mengacu pada properti nama jaringan dengan google_compute_network.vpc_network.name -- google_compute_network.vpc_network sebagai ID-nya, yang cocok dengan nilai dalam blok yang mendefinisikan jaringan, dan name adalah properti resource tersebut.

Adanya blok access_config, bahkan tanpa adanya argumen, memastikan bahwa instance akan dapat diakses melalui internet.

  1. Sekarang jalankan terraform apply untuk membuat instance komputasi:
terraform apply
  1. Sekali lagi, jawab yes pada prompt konfirmasi.

Ini adalah perubahan yang cukup mudah - Anda menambahkan resource "google_compute_instance" bernama "vm_instance" ke konfigurasi Anda, dan Terraform membuat resource tersebut di Google Cloud.

Mengubah resource

Selain membuat resource, Terraform juga dapat melakukan perubahan pada resource tersebut.

  1. Tambahkan argumen tags ke "vm_instance" hingga tampak seperti ini:
resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "e2-micro" tags = ["web", "dev"] # ... }
  1. Jalankan terraform apply lagi untuk mengupdate instance:
terraform apply
  1. Imbuhan ~ berarti Terraform akan mengupdate resource tersebut. Anda dapat menerapkan perubahan ini sekarang dengan merespons yes, dan Terraform akan menambahkan tag ke instance Anda.

Klik Check my progress untuk memverifikasi tujuan. Mengubah Infrastruktur

Perubahan destruktif

Perubahan destruktif adalah perubahan yang mengharuskan penyedia untuk mengganti resource yang ada alih-alih mengupdatenya. Hal ini biasanya terjadi karena penyedia cloud tidak mendukung proses update resource seperti yang dijelaskan dalam konfigurasi Anda.

Mengubah disk image instance Anda adalah salah satu contoh perubahan destruktif.

  1. Edit blok boot_disk di dalam resource vm_instance di file konfigurasi Anda dan ubah seperti berikut:
boot_disk { initialize_params { image = "cos-cloud/cos-stable" } }
  1. Sekarang jalankan terraform apply lagi untuk melihat bagaimana Terraform menerapkan perubahan ini ke resource yang ada:
terraform apply

Imbuhan -/+ artinya Terraform akan menghancurkan dan membuat ulang resource, alih-alih langsung mengupdatenya. Meskipun beberapa atribut dapat langsung diupdate (yang ditunjukkan dengan imbuhan ~), mengubah boot disk image untuk sebuah instance memerlukan pembuatan ulang. Terraform dan penyedia Google Cloud menangani detail ini untuk Anda, dan rencana eksekusi memperjelas tindakan yang akan dilakukan Terraform.

Selain itu, rencana eksekusi menunjukkan bahwa perubahan disk image adalah hal yang mengharuskan instance Anda diganti. Dengan informasi ini, Anda dapat menyesuaikan perubahan Anda agar sebisa mungkin menghindari update destroy/create jika tidak dapat diterima dalam beberapa situasi.

  1. Sekali lagi, Terraform meminta persetujuan rencana eksekusi sebelum melanjutkan. Jawab yes untuk menjalankan langkah-langkah yang direncanakan.

Sesuai dengan rencana eksekusi, Terraform pertama-tama menghancurkan instance yang ada dan kemudian membuat instance baru sebagai gantinya. Anda dapat menggunakan terraform show lagi untuk melihat nilai baru yang terkait dengan instance ini.

Menghancurkan infrastruktur

Kini Anda telah melihat cara membangun dan mengubah infrastruktur. Sebelum lanjut ke membuat beberapa resource dan menampilkan dependensi resource, Anda akan melihat cara menghancurkan sepenuhnya infrastruktur yang dikelola Terraform.

Menghancurkan infrastruktur Anda adalah peristiwa yang jarang terjadi di lingkungan produksi. Namun, jika Anda menggunakan Terraform untuk menjalankan beberapa lingkungan seperti pengembangan, pengujian, dan staging, maka penghancuran sering kali merupakan tindakan yang berguna.

Resource dapat dihancurkan menggunakan perintah terraform destroy, yang mirip dengan terraform apply tetapi berperilaku seolah-olah semua resource telah dihapus dari konfigurasi.

  • Coba perintah terraform destroy. Jawab yes untuk menjalankan rencana ini dan menghancurkan infrastruktur:
terraform destroy

Imbuhan - menunjukkan bahwa instance dan jaringan akan dihancurkan. Seperti halnya penerapan, Terraform menunjukkan rencana eksekusinya dan menunggu persetujuan sebelum melakukan perubahan apa pun.

Sama seperti terraform apply, Terraform menentukan urutan hal-hal yang harus dihancurkan. Google Cloud tidak akan mengizinkan jaringan VPC dihapus jika masih ada resource di dalamnya, jadi Terraform menunggu hingga instance dihancurkan sebelum menghancurkan jaringan. Saat melakukan operasi, Terraform membuat grafik dependensi untuk menentukan urutan operasi yang benar. Dalam kasus yang lebih rumit dengan beberapa resource, Terraform akan melakukan operasi secara paralel jika aman untuk dilakukan.

Klik Check my progress untuk memverifikasi tujuan. Perubahan Destruktif

Tugas 3. Membuat dependensi resource

Di bagian ini, Anda akan mempelajari selengkapnya tentang dependensi resource dan cara menggunakan parameter resource untuk berbagi informasi tentang satu resource dengan resource lainnya.

Infrastruktur dunia nyata memiliki beragam resource dan jenis resource. Konfigurasi Terraform dapat berisi banyak resource, beberapa jenis resource, dan jenis ini bahkan dapat mencakup beberapa penyedia.

Di bagian ini, Anda akan diperlihatkan contoh dasar tentang cara mengonfigurasi beberapa resource dan cara menggunakan atribut resource untuk mengonfigurasi resource lainnya.

  • Buat ulang jaringan dan instance Anda. Setelah Anda merespons prompt dengan yes, resource akan dibuat:
terraform apply

Menetapkan alamat IP statis

  1. Sekarang tambahkan ke konfigurasi Anda dengan menetapkan IP statis ke instance VM di main.tf:
resource "google_compute_address" "vm_static_ip" { name = "terraform-static-ip" }

Hal ini seharusnya terlihat mirip dengan contoh sebelumnya dalam menambahkan resource instance VM, kecuali kali ini Anda membuat jenis resource "google_compute_address". Jenis resource ini mengalokasikan alamat IP yang dicadangkan ke project Anda.

  1. Selanjutnya, jalankan terraform plan:
terraform plan

Anda dapat melihat apa yang akan dibuat dengan terraform plan:

$ terraform plan Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. google_compute_network.vpc_network: Refreshing state... [id=terraform-network] google_compute_instance.vm_instance: Refreshing state... [id=terraform-instance] ------------------------------------------------------------------------ An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_compute_address.vm_static_ip will be created + resource "google_compute_address" "vm_static_ip" { + address = (known after apply) + address_type = "EXTERNAL" + creation_timestamp = (known after apply) + id = (known after apply) + name = "terraform-static-ip" + network_tier = (known after apply) + project = (known after apply) + region = (known after apply) + self_link = (known after apply) + subnetwork = (known after apply) + users = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ------------------------------------------------------------------------ Catatan: Anda tidak menentukan parameter "-out" untuk menyimpan rencana ini, sehingga Terraform tidak dapat menjamin bahwa tindakan-tindakan ini akan dilakukan jika "terraform apply" dijalankan setelahnya.

Tidak seperti terraform apply, perintah plan hanya akan menunjukkan apa yang akan diubah, dan tidak akan pernah benar-benar langsung menerapkan perubahan tersebut. Perhatikan bahwa satu-satunya perubahan yang Anda lakukan sejauh ini adalah menambahkan IP statis. Selanjutnya, Anda perlu melampirkan alamat IP ke instance Anda.

  1. Update konfigurasi network_interface untuk instance Anda seperti berikut:
network_interface { network = google_compute_network.vpc_network.self_link access_config { nat_ip = google_compute_address.vm_static_ip.address } }

Blok access_config memiliki beberapa argumen opsional, dan pada kasus ini, Anda akan menetapkan nat_ip untuk menjadi alamat IP statisnya. Ketika Terraform membaca konfigurasi ini, Terraform akan:

  • Memastikan vm_static_ip dibuat sebelum vm_instance
  • Menyimpan properti vm_static_ip dalam status tersebut
  • Mengatur nat_ip ke nilai properti vm_static_ip.address
  1. Jalankan rencana terraform lagi, tetapi kali ini, simpan rencananya:
terraform plan -out static_ip

Menyimpan rencana dengan langkah ini memastikan Anda dapat menerapkan rencana yang sama persis ke depannya. Jika Anda mencoba menerapkan file yang dibuat berdasarkan rencana, Terraform akan memeriksa terlebih dahulu untuk memastikan rangkaian perubahan yang sama persis akan dilakukan sebelum menerapkan rencana.

Dalam hal ini, Anda dapat melihat bahwa Terraform akan membuat google_compute_address baru dan mengupdate VM yang ada untuk menggunakannya.

  1. Jalankan terraform apply "static_ip" untuk melihat bagaimana Terraform akan menerapkan perubahan ini:
terraform apply "static_ip"

Seperti yang ditunjukkan di atas, Terraform membuat IP statis sebelum memodifikasi instance VM. Karena ekspresi interpolasi yang meneruskan alamat IP ke konfigurasi antarmuka jaringan instance, Terraform dapat menyimpulkan dependensi, dan mengetahui bahwa Terraform harus membuat IP statis sebelum memperbarui instance.

Klik Check my progress untuk memverifikasi tujuan. Membuat Dependensi Resource

Dependensi implisit dan eksplisit

Dengan mempelajari atribut resource yang digunakan dalam ekspresi interpolasi, Terraform dapat menyimpulkan secara otomatis ketika suatu resource bergantung pada lainnya. Pada contoh di atas, rujukan ke google_compute_address.vm_static_ip.address membuat implicit dependency di google_compute_address bernama vm_static_ip.

Terraform menggunakan informasi dependensi ini untuk menentukan urutan yang benar dalam membuat dan memperbarui resource yang berbeda. Pada contoh di atas, Terraform tahu bahwa vm_static_ip harus dibuat sebelum vm_instance diupdate untuk menggunakannya.

Dependensi implisit melalui ekspresi interpolasi adalah cara utama untuk memberi tahu Terraform tentang hubungan ini, dan harus digunakan bila memungkinkan.

Terkadang ada dependensi antara resource yang tidak terlihat oleh Terraform. Argumen depends_on dapat ditambahkan ke resource apa pun dan menerima daftar resource untuk membuat dependensi eksplisit.

Misalnya, mungkin aplikasi yang akan Anda jalankan di instance Anda akan menggunakan bucket Cloud Storage tertentu, tetapi dependensi tersebut dikonfigurasi di dalam kode aplikasi sehingga tidak terlihat oleh Terraform. Pada kasus tersebut, Anda dapat menggunakan depends_on untuk mendeklarasikan dependensi secara eksplisit.

  1. Tambahkan bucket Cloud Storage dan instance dengan dependensi eksplisit pada bucket tersebut dengan menambahkan kode berikut ke main.tf:
# New resource for the storage bucket our application will use. resource "google_storage_bucket" "example_bucket" { name = "<UNIQUE-BUCKET-NAME>" location = "US" website { main_page_suffix = "index.html" not_found_page = "404.html" } } # Create a new instance that uses the bucket resource "google_compute_instance" "another_instance" { # Tells Terraform that this VM instance must be created only after the # storage bucket has been created. depends_on = [google_storage_bucket.example_bucket] name = "terraform-instance-2" machine_type = "e2-micro" boot_disk { initialize_params { image = "cos-cloud/cos-stable" } } network_interface { network = google_compute_network.vpc_network.self_link access_config { } } } Catatan: Bucket penyimpanan haruslah unik secara global. Karenanya, Anda perlu mengganti UNIQUE-BUCKET-NAME dengan nama yang valid dan unik untuk bucket. Menggunakan nama dan tanggal biasanya merupakan cara yang baik untuk menebak nama bucket yang unik.

Anda mungkin bertanya-tanya ke mana resource ini harus ditempatkan dalam konfigurasi Anda. Urutan penentuan resource dalam file konfigurasi terraform tidak berpengaruh pada cara Terraform menerapkan perubahan Anda. Atur file konfigurasi Anda dengan cara yang paling sesuai bagi Anda dan tim Anda.

  1. Sekarang jalankan terraform plan dan terraform apply untuk melihat perubahan berikut:
terraform plan terraform apply

Klik Check my progress untuk memverifikasi tujuan. Membuat instance yang memiliki dependensi bucket

  1. Sebelum melanjutkan, hapus resource baru ini dari konfigurasi Anda dan jalankan terraform apply sekali lagi untuk menghancurkannya. Anda tidak akan menggunakan bucket atau instance kedua lagi di lab ini.

Tugas 4. Menyediakan infrastruktur

Instance komputasi yang Anda luncurkan pada titik ini didasarkan pada gambar Google yang diberikan, tetapi tidak ada software tambahan yang diinstal atau konfigurasi yang diterapkan.

Google Cloud memungkinkan pelanggannya mengelola image sistem operasi khusus miliknya sendiri. Cara ini bagus untuk memastikan instance yang Anda sediakan dengan Terraform telah dikonfigurasi sebelumnya sesuai dengan kebutuhan Anda. Packer adalah alat yang sempurna untuk ini dan mencakup builder untuk Google Cloud.

Terraform menggunakan penyedia untuk mengupload file, menjalankan skrip shell, atau menginstal dan memicu software lain seperti alat manajemen konfigurasi.

Menentukan penyedia

  1. Untuk menentukan penyedia, modifikasi blok resource yang menentukan vm_instance pertama di konfigurasi Anda agar terlihat seperti berikut:
resource "google_compute_instance" "vm_instance" { name = "terraform-instance" machine_type = "e2-micro" tags = ["web", "dev"] provisioner "local-exec" { command = "echo ${google_compute_instance.vm_instance.name}: ${google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip} >> ip_address.txt" } # ... }

Ini akan menambahkan blok provisioner dalam blok resource. Beberapa blok provisioner dapat ditambahkan untuk menentukan beberapa langkah penyediaan. Terraform mendukung banyak penyedia, tetapi untuk contoh ini, Anda menggunakan penyedia local-exec.

Penyedia local-exec mengeksekusi perintah secara lokal di mesin yang menjalankan Terraform, bukan di instance VM itu sendiri. Anda menggunakan penyedia ini dibandingkan penyedia lainnya sehingga kami tidak perlu khawatir terkait menentukan informasi koneksi apa pun saat ini.

Ini juga menunjukkan contoh interpolasi string yang lebih kompleks daripada yang pernah Anda lihat sebelumnya. Setiap instance VM dapat memiliki beberapa antarmuka jaringan, jadi lihat yang pertama dengan network_interface[0], hitung mulai dari 0, seperti yang dilakukan sebagian besar bahasa pemrograman. Setiap antarmuka jaringan juga dapat memiliki beberapa blok access_config, jadi sekali lagi tentukan yang pertama.

  1. Jalankan terraform apply:
terraform apply

Pada tahap ini, mungkin di awal outputnya akan membingungkan.

Terraform tidak menemukan apa pun yang dapat dilakukan - dan jika Anda memeriksanya, tidak ada file ip_address.txt di mesin lokal Anda.

Terraform menangani penyedia dengan cara yang berbeda dengan argumen lainnya. Penyedia hanya berjalan ketika resource dibuat, tetapi menambahkan penyedia tidak akan membuat resource tersebut dihancurkan secara paksa dan dibuat ulang.

  1. Gunakan terraform taint untuk memberi tahu Terraform untuk membuat ulang instance tersebut:
terraform taint google_compute_instance.vm_instance

Resource yang rusak akan dihancurkan dan dibuat ulang pada perintah apply berikutnya.

  1. Jalankan terraform apply sekarang:
terraform apply
  1. Verifikasi bahwa semuanya berfungsi dengan melihat konten file ip_address.txt.

Ini berisi alamat IP, seperti yang Anda minta.

Penyedia yang gagal dan resource yang rusak

Jika resource berhasil dibuat tetapi gagal dalam langkah penyediaan, Terraform akan mengalami error dan menandai resource tersebut sebagai tainted (rusak). Resource yang rusak masih ada, namun tidak dianggap aman untuk digunakan, karena penyediaan gagal.

Saat Anda membuat rencana eksekusi berikutnya, Terraform akan menghapus semua resource yang rusak dan membuat resource baru, mencoba menyediakannya lagi setelah pembuatan.

Penyedia destroy

Penyedia juga dapat ditentukan yang hanya berjalan selama operasi penghancuran. Penyedia berguna untuk melakukan pembersihan sistem, mengekstraksi data, dll.

Untuk banyak resource, disarankan menggunakan mekanisme pembersihan bawaan jika memungkinkan (seperti skrip init), tetapi penyedia dapat digunakan jika diperlukan.

Lab ini tidak akan menampilkan contoh yang dihancurkan penyedia. Jika Anda perlu menggunakan penyedia destroy, lihat Dokumentasi penyedia.

Selamat!

Di lab ini, Anda telah belajar cara membangun, mengubah, dan menghancurkan infrastruktur dengan Terraform. Anda kemudian membuat dependensi resource, dan menyediakan infrastruktur dasar dengan file konfigurasi Terraform.

Langkah berikutnya/Pelajari lebih lanjut

Pastikan untuk memeriksa resource berikut untuk menerima lebih banyak praktik langsung dengan Terraform:

Sertifikasi dan pelatihan Google Cloud

...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.

Manual Terakhir Diperbarui pada 26 Januari 2024

Lab Terakhir Diuji pada 25 September 2023

Hak cipta 2024 Google LLC Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.