Ringkasan
Terraform berguna untuk membuat, mengubah, dan meningkatkan kualitas infrastruktur dengan aman dan terprediksi. Terraform adalah alat open source yang mengodifikasi API menjadi file konfigurasi deklaratif yang bisa dibagikan kepada anggota tim, diperlakukan sebagai kode, diedit, ditinjau, dan dibuatkan versi.
Di lab ini, Anda akan membuat konfigurasi Terraform dengan modul untuk mengotomatiskan deployment infrastruktur Google Cloud. Intinya, Anda akan men-deploy satu jaringan mode otomatis dengan sebuah aturan firewall dan dua instance VM, seperti yang terlihat dalam diagram ini:

Tujuan
Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:
- Membuat konfigurasi untuk jaringan mode otomatis
- Membuat konfigurasi untuk aturan firewall
- Membuat modul untuk instance VM
- Membuat dan men-deploy konfigurasi
- Memverifikasi deployment konfigurasi
Penyiapan
Untuk setiap lab, Anda akan memperoleh project Google Cloud baru serta serangkaian resource selama jangka waktu tertentu, tanpa biaya.
-
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 yang memuat sebagai berikut:
- Tombol Open Google Cloud console
- Waktu tersisa
- Kredensial sementara yang harus Anda gunakan untuk lab ini
- Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
-
Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).
Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.
Tips: Atur tab di jendela terpisah secara berdampingan.
Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
-
Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.
{{{user_0.username | "Username"}}}
Anda juga dapat menemukan Username di panel Lab Details.
-
Klik Next.
-
Salin Password di bawah dan tempel ke dialog Welcome.
{{{user_0.password | "Password"}}}
Anda juga dapat menemukan Password di panel Lab Details.
-
Klik Next.
Penting: Anda harus menggunakan kredensial yang diberikan lab. Jangan menggunakan kredensial akun Google Cloud Anda.
Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
-
Klik halaman berikutnya:
- Setujui persyaratan dan ketentuan.
- Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
- Jangan mendaftar uji coba gratis.
Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.
Catatan: Untuk melihat menu yang berisi daftar produk dan layanan Google Cloud, klik Navigation menu di kiri atas, atau ketik nama layanan atau produk di kolom Search.
Tugas 1. Menyiapkan Terraform dan Cloud Shell
Dalam tugas ini, Anda akan mengonfigurasi lingkungan Cloud Shell untuk menggunakan Terraform.
Menginstal Terraform
Terraform kini terintegrasi ke dalam Cloud Shell. Verifikasi versi yang terinstal.
- Di Konsol Google Cloud, klik Activate Cloud Shell (
).
- Jika diminta, klik Continue.
- Untuk memastikan Terraform sudah terinstal, jalankan perintah berikut:
terraform --version
Output-nya akan terlihat seperti ini:
Terraform v1.5.7
Catatan: Jangan khawatir jika Anda menerima peringatan bahwa versi Terraform sudah tidak berlaku lagi, karena petunjuk lab akan tetap berfungsi dengan Terraform v1.5.7 dan yang lebih baru. Versi terbaru Terraform dapat didownload di situs Terraform. Terraform terdistribusi sebagai paket biner untuk semua platform dan arsitektur yang didukung, dan Cloud Shell menggunakan Linux 64-bit.
- Untuk membuat direktori bagi konfigurasi Terraform Anda, jalankan perintah berikut:
mkdir tfinfra
- Di Cloud Shell, klik Open editor (
).
Catatan: Jika Anda melihat pesan "Unable to load code editor because third-party cookies are disabled", klik Open in New Window. Editor kode akan terbuka di tab baru. Kembali ke tab awal, klik Open Terminal, lalu pindah kembali ke tab editor kode. Pada waktu-waktu tertentu, Anda akan harus pindah kembali ke terminal Cloud Shell di lab ini.
- Pada panel kiri editor kode, luaskan folder tfinfra.
Lakukan inisialisasi Terraform
Terraform menggunakan arsitektur berbasis plugin untuk mendukung banyak infrastruktur dan penyedia layanan yang ada. Tiap "penyedia" adalah program biner yang terenkapsulasi sendiri dan didistribusikan secara terpisah dari Terraform. Lakukan inisialisasi Terraform dengan menetapkan Google sebagai penyedia.
- Untuk membuat file baru di dalam folder tfinfra,
klik kanan pada folder tfinfra, lalu klik New File.
- Namai file baru ini provider.tf, lalu buka.
- Salin kode berikut ke
provider.tf:
provider "google" {}
-
Untuk menyimpan provider.tf, klik File > Save.
-
Untuk menginisialisasi Terraform, jalankan perintah berikut ini:
cd tfinfra
terraform init
Sekarang Anda bisa mulai menggunakan Terraform di Cloud Shell.
Tugas 2. Membuat mynetwork beserta resource-nya
Dalam tugas ini, Anda akan membuat jaringan mode otomatis mynetwork beserta aturan firewall dan dua instance VM-nya (mynet_vm_1 dan mynet_vm_2).
Mengonfigurasi mynetwork
Buat konfigurasi baru, dan tentukan mynetwork.
- Untuk membuat file baru di dalam tfinfra,
klik kanan pada folder tfinfra, lalu klik New File.
- Namai file baru ini mynetwork.tf, lalu buka.
- Salin kode dasar berikut ini ke
mynetwork.tf:
# Create the mynetwork network
resource [RESOURCE_TYPE] "mynetwork" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
Template dasar ini merupakan titik awal yang tepat untuk semua resource Google Cloud. Kolom name berfungsi untuk memberi nama resource, dan kolom type berfungsi untuk menentukan resource Google Cloud yang ingin dibuat. Anda juga bisa menentukan properti, tapi tidak wajib untuk resource tertentu.
- Di
mynetwork.tf, ganti [RESOURCE_TYPE] dengan "google_compute_network" (dengan tanda petik).
Catatan: Resource google_compute_network adalah jaringan VPC. Resource yang tersedia dapat ditemukan di dokumentasi penyedia Google Cloud. Pelajari resource khusus ini lebih lanjut di dokumentasi Terraform.
- Di
mynetwork.tf, ganti [RESOURCE_NAME] dengan "mynetwork" (dengan tanda petik).
- Tambahkan properti berikut ini ke
mynetwork.tf:
auto_create_subnetworks = "true"
Pada dasarnya, jaringan mode otomatis akan membuat subnetwork di setiap region secara otomatis. Dengan begitu, setel auto_create_subnetworks ke true.
- Pastikan file mynetwork.tf terlihat seperti ini:
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
- Untuk menyimpan
mynetwork.tf, klik File > Save.
Konfigurasikan aturan firewall
Tentukan aturan firewall untuk mengizinkan traffic HTTP, SSH, RDP, dan ICMP pada mynetwork.
- Tambahkan kode dasar berikut ini ke
mynetwork.tf:
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource [RESOURCE_TYPE] "mynetwork-allow-http-ssh-rdp-icmp" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
- Di
mynetwork.tf, ganti [RESOURCE_TYPE] dengan "google_compute_firewall" (dengan tanda petik).
Catatan: Resource google_compute_firewall adalah aturan firewall. Pelajari resource khusus ini lebih lanjut di dokumentasi Terraform.
- Di
mynetwork.tf, ganti [RESOURCE_NAME] dengan "mynetwork-allow-http-ssh-rdp-icmp" (dengan tanda petik).
- Tambahkan properti berikut ini ke
mynetwork.tf:
network = google_compute_network.mynetwork.self_link
Catatan: Karena aturan firewall ini bergantung pada jaringan, referensi google_compute_network.mynetwork.self_link digunakan sebagai petunjuk bagi Terraform agar me-resolve resource ini dengan urutan yang benar. Dalam hal ini, jaringan dibuat sebelum aturan firewall.
- Tambahkan properti berikut ini ke
mynetwork.tf:
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
Isi aturan allow menentukan protokol dan port yang diperbolehkan.
- Pastikan file
mynetwork.tf terlihat seperti ini:
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
- Untuk menyimpan mynetwork.tf, klik File > Save.
Konfigurasikan instance VM
Tentukan instance VM dengan membuat modul instance VM. Modul adalah konfigurasi yang bisa digunakan ulang di dalam sebuah folder. Modul ini akan digunakan untuk kedua instance VM di lab ini.
- Untuk membuat folder baru di dalam tfinfra, pilih folder tfinfra, lalu klik File > New Folder.
- Namai folder baru ini instance.
- Untuk membuat file baru di dalam instance,
klik kanan pada folder instance, lalu klik New File.
- Namai file baru ini main.tf, lalu buka.
Struktur folder akan tampak seperti berikut ini di Cloud Shell:

- Salin kode dasar berikut ke main.tf:
resource [RESOURCE_TYPE] "vm_instance" {
name = [RESOURCE_NAME]
# RESOURCE properties go here
}
- Di
main.tf, ganti [RESOURCE_TYPE] dengan "google_compute_instance" (dengan tanda petik).
Catatan: Resource google_compute_instance adalah instance Compute Engine. Pelajari resource khusus ini lebih lanjut di dokumentasi Terraform.
- Di
main.tf, ganti [RESOURCE_NAME] dengan "${var.instance_name}" (dengan tanda petik).
Karena modul ini akan digunakan untuk kedua instance VM, tentukan nama instance sebagai variabel input. Fungsinya adalah untuk mengontrol nama variabel dari mynetwork.tf. Pelajari variabel input lebih lanjut di artikel panduan Terraform: Define Input Variables.
- Tambahkan properti berikut ke
main.tf:
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
Properti ini menentukan zona dan jenis mesin instance sebagai variabel input.
- Tambahkan properti berikut ke
main.tf:
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
Properti ini menentukan agar boot disk menggunakan OS image Debian 11. Karena kedua instance VM akan menggunakan image yang sama, properti ini dapat di-hard code dalam modul.
- Tambahkan properti berikut ke
main.tf:
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
Properti ini menentukan antarmuka jaringan dengan memberikan nama jaringan sebagai variabel input dan konfigurasi akses. Jika konfigurasi akses tidak diisi, alamat IP eksternal akan bersifat sementara (diperlukan di lab ini). Untuk membuat instance dengan hanya satu alamat IP internal, hapus bagian access_config. Untuk mengetahui informasi selengkapnya, baca dokumentasi Terraform.
- Pastikan
main.tf terlihat seperti ini, termasuk tanda kurung {}
resource "google_compute_instance" "vm_instance" {
name = "${var.instance_name}"
zone = "${var.instance_zone}"
machine_type = "${var.instance_type}"
boot_disk {
initialize_params {
image = "debian-cloud/debian-11"
}
}
network_interface {
network = "${var.instance_network}"
access_config {
# Allocate a one-to-one NAT IP to the instance
}
}
}
- Untuk menyimpan main.tf, klik File > Save.
- Untuk membuat file baru di dalam instance,
klik kanan pada folder instance, lalu klik New File.
- Namai file baru ini variables.tf, lalu buka.
- Tentukan 4 variabel input di
variables.tf.
variable "instance_name" {}
variable "instance_zone" {}
variable "instance_type" {
default = "e2-micro"
}
variable "instance_network" {}
Dengan memberi nilai default pada instance_type, variabel ini menjadi opsional. instance_name, instance_zone, dan instance_network wajib diisi dan Anda akan menentukannya di mynetwork.tf.
- Untuk menyimpan variables.tf, klik File > Save.
- Tambahkan instance VM berikut ini ke
mynetwork.tf:
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Resource ini memanfaatkan modul dalam folder instance serta memberikan nama, zona, dan jaringan sebagai input. Karena instance ini bergantung pada jaringan VPC, referensi google_compute_network.mynetwork.self_link digunakan untuk memberi instruksi pada Terraform agar me-resolve resource itu dalam urutan yang benar. Dalam hal ini, jaringan dibuat sebelum instance.
Catatan: Modul Terraform bermanfaat karena dapat digunakan kembali pada banyak konfigurasi. Tanpa perlu membuat modul sendiri, Anda juga bisa menggunakan modul yang sudah ada dari registry Modul Terraform.
-
Untuk menyimpan mynetwork.tf, klik File > Save.
-
Pastikan mynetwork.tf terlihat seperti ini, termasuk tanda kurung {}
# Create the mynetwork network
resource "google_compute_network" "mynetwork" {
name = "mynetwork"
# RESOURCE properties go here
auto_create_subnetworks = "true"
}
# Add a firewall rule to allow HTTP, SSH, RDP and ICMP traffic on mynetwork
resource "google_compute_firewall" "mynetwork-allow-http-ssh-rdp-icmp" {
name = "mynetwork-allow-http-ssh-rdp-icmp"
# RESOURCE properties go here
network = google_compute_network.mynetwork.self_link
allow {
protocol = "tcp"
ports = ["22", "80", "3389"]
}
allow {
protocol = "icmp"
}
source_ranges = ["0.0.0.0/0"]
}
# Create the mynet-vm-1 instance
module "mynet-vm-1" {
source = "./instance"
instance_name = "mynet-vm-1"
instance_zone = "{{{project_0.default_zone|Zone}}}"
instance_network = google_compute_network.mynetwork.self_link
}
# Create the mynet-vm-2" instance
module "mynet-vm-2" {
source = "./instance"
instance_name = "mynet-vm-2"
instance_zone = "{{{project_0.default_zone_2|Zone 2}}}"
instance_network = google_compute_network.mynetwork.self_link
}
Membuat mynetwork beserta resource-nya
Langkah selanjutnya adalah menerapkan konfigurasi mynetwork.
- Untuk menulis ulang file konfigurasi Terraform dengan format dan gaya kanonis, jalankan perintah berikut:
terraform fmt
Output-nya akan terlihat seperti ini:
mynetwork.tf
Catatan: Jika terjadi error, pastikan langkah-langkah sebelumnya telah dijalankan dengan tepat agar konfigurasi Anda sesuai dengan petunjuk lab. Jika masalah konfigurasi masih tidak bisa diatasi, download dan lihat konfigurasi yang sudah selesai ini:
- Untuk menginisialisasi Terraform, jalankan perintah berikut ini:
terraform init
Output-nya akan terlihat seperti ini:
Initializing modules...
- mynet-vm-2 in instance
- mynet-vm-2 in instance
...
Terraform has been successfully initialized!
Catatan: Jika error terjadi, pastikan langkah-langkah sebelumnya telah dijalankan dengan tepat sehingga struktur folder/file sudah benar. Jika masalah konfigurasi masih tidak bisa diatasi, lihat konfigurasi yang sudah selesai di atas sebagai rujukan. Setelah masalah teratasi, jalankan kembali perintah sebelumnya.
- Untuk membuat rencana eksekusi, jalankan perintah berikut ini:
terraform plan
Output-nya akan terlihat seperti ini:
...
Plan: 4 to add, 0 to change, 0 to destroy.
...
Terraform menentukan bahwa 4 resource berikut ini harus ditambahkan:
| Nama |
Deskripsi |
| mynetwork |
Jaringan VPC |
| mynetwork-allow-http-ssh-rdp-icmp |
Aturan firewall untuk mengizinkan HTTP, SSH, RDP, dan ICMP |
| mynet-vm-2 |
Instance VM di
|
| mynet-vm-2 |
Instance VM di
|
- Untuk menerapkan perubahan yang diinginkan, jalankan perintah berikut:
terraform apply
- Untuk mengonfirmasi rencana tindakan, ketik:
yes
Output-nya akan terlihat seperti ini:
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Klik Check my progress untuk memverifikasi tujuan.
Membuat mynetwork beserta resource-nya
Catatan: Jika terjadi error saat proses eksekusi, pastikan langkah-langkah sebelumnya telah dijalankan dengan tepat sehingga struktur folder/file sudah benar. Jika masalah konfigurasi masih tidak bisa diatasi, lihat konfigurasi yang sudah selesai di atas sebagai rujukan. Setelah masalah teratasi, jalankan kembali perintah sebelumnya.
Tugas 3. Memverifikasi deployment Anda
Di Konsol Google Cloud, pastikan resource sudah dibuat.
Verifikasi jaringan Anda di Konsol Cloud
- Di Konsol Google Cloud, pada Navigation menu (
), klik VPC network > VPC networks.
- Lihat jaringan VPC mynetwork dengan subnetwork di setiap region.
- Di Navigation menu, klik VPC network > Firewall.
- Urutkan aturan firewall berdasarkan Network.
- Lihat aturan firewall mynetwork-allow-http-ssh-rdp-icmp untuk mynetwork.
Verifikasi instance VM Anda di Cloud Console
- Di Navigation menu (
), klik Compute Engine > VM instances.
- Lihat instance mynet-vm-1 dan mynet-vm-2.
- Perhatikan alamat IP internal untuk mynet-vm-2.
- Untuk mynet-vm-1, klik SSH untuk meluncurkan terminal, lalu hubungkan.
- Untuk menguji konektivitas ke alamat IP internal mynet-vm-2, jalankan perintah berikut di terminal SSH (mengganti alamat IP internal mynet-vm-2 dengan nilai yang dicatat sebelumnya):
ping -c 3 <Masukkan IP internal mynet-vm-2 di sini>
Catatan: Perintah ini seharusnya berfungsi karena kedua instance VM berada di jaringan yang sama, dan aturan firewall mengizinkan traffic ICMP.
Tugas 4. Tinjauan
Di lab ini, Anda membuat konfigurasi Terraform dengan modul untuk mengotomatiskan deployment infrastruktur Google Cloud. Seiring perubahan konfigurasi Anda, Terraform bisa membuat rencana eksekusi tambahan sehingga Anda dapat membangun konfigurasi keseluruhan tahap demi tahap.
Dengan modul instance, Anda dapat menggunakan kembali konfigurasi resource yang sama untuk banyak resources dan memberikan properti sebagai variabel input. Anda bisa memakai konfigurasi dan modul yang sudah dibuat sebagai titik awal deployment selanjutnya.
Mengakhiri lab Anda
Setelah Anda menyelesaikan lab, klik Akhiri Lab. Google Cloud Skills Boost menghapus resource yang telah Anda gunakan dan membersihkan akun.
Anda akan diberi kesempatan untuk menilai pengalaman menggunakan lab. Pilih jumlah bintang yang sesuai, ketik komentar, lalu klik Submit.
Makna jumlah bintang:
- 1 bintang = Sangat tidak puas
- 2 bintang = Tidak puas
- 3 bintang = Netral
- 4 bintang = Puas
- 5 bintang = Sangat puas
Anda dapat menutup kotak dialog jika tidak ingin memberikan masukan.
Untuk masukan, saran, atau koreksi, gunakan tab Support.
Hak cipta 2020 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.