Lab ini dikembangkan dengan partner kami, Hashicorp. Jika Anda memilih untuk menerima info terbaru terkait produk, pengumuman, dan penawaran di Profil Akun Anda, informasi pribadi Anda mungkin akan dibagikan kepada Hashicorp, yang merupakan sponsor dari lab ini.
GSP752

Ringkasan
Terraform harus menyimpan status infrastruktur terkelola dan konfigurasi Anda. Status ini digunakan oleh Terraform untuk memetakan resource dunia nyata ke konfigurasi Anda, melacak metadata, dan meningkatkan performa untuk infrastruktur besar.
Status ini disimpan secara default dalam file lokal bernama terraform.tfstate
, tapi juga dapat disimpan secara jarak jauh, yang berfungsi lebih baik dalam lingkungan tim.
Terraform menggunakan status lokal ini untuk membuat rencana dan melakukan perubahan pada infrastruktur Anda. Sebelum operasi apa pun, Terraform melakukan refresh untuk memperbarui status dengan infrastruktur sungguhan.
Tujuan utama status Terraform adalah menyimpan binding di antara objek dalam sistem jarak jauh dan instance resource yang dideklarasikan dalam konfigurasi Anda. Saat membuat objek jarak jauh sebagai respons terhadap perubahan konfigurasi, Terraform akan mencatat identitas objek jarak jauh tersebut untuk diperiksa terhadap instance resource tertentu, lalu memperbarui atau menghapus objek tersebut sebagai respons terhadap perubahan konfigurasi di masa mendatang.
Tujuan
Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:
- Membuat backend lokal.
- Membuat backend Cloud Storage.
- Me-refresh status Terraform Anda.
- Mengimpor konfigurasi Terraform.
- Mengelola konfigurasi yang diimpor dengan Terraform.
Penyiapan dan persyaratan
Sebelum mengklik tombol Start 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 interaktif ini dapat Anda gunakan untuk melakukan 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 (direkomendasikan) 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: Hanya gunakan akun siswa untuk lab ini. Jika Anda menggunakan akun Google Cloud yang berbeda, Anda mungkin akan dikenai tagihan ke akun tersebut.
Cara memulai lab dan login ke Google Cloud Console
-
Klik tombol Start Lab. Jika Anda perlu membayar lab, dialog akan terbuka untuk memilih metode pembayaran.
Di sebelah kiri ada panel Lab Details yang berisi hal-hal 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 mengakses produk dan layanan Google Cloud, klik Navigation menu atau ketik nama layanan atau produk di kolom Search.
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.
-
Klik Activate Cloud Shell
di bagian atas Konsol Google Cloud.
-
Klik jendela berikut:
- Lanjutkan melalui jendela informasi Cloud Shell.
- Beri otorisasi ke Cloud Shell untuk menggunakan kredensial Anda guna melakukan panggilan Google Cloud API.
Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke Project_ID, . Output berisi baris yang mendeklarasikan Project_ID untuk sesi ini:
Project Cloud Platform Anda dalam sesi ini disetel ke {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.
- (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
- Klik Authorize.
Output:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
Untuk menetapkan akun aktif, jalankan:
$ gcloud config set account `ACCOUNT`
- (Opsional) Anda dapat menampilkan daftar ID project dengan perintah ini:
gcloud config list project
Output:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
Catatan: Untuk mendapatkan dokumentasi gcloud
yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.
Tujuan status Terraform
Status adalah persyaratan yang diperlukan oleh Terraform untuk dapat berfungsi. Orang-orang terkadang bertanya apakah Terraform dapat bekerja tanpa status atau tidak menggunakan status dan hanya memeriksa resource cloud di setiap operasi. Dalam skenario di mana Terraform mungkin dapat bekerja tanpa status, hal itu akan memerlukan pemindahan kompleksitas dalam jumlah yang sangat besar dari satu tempat (status) ke tempat lain (konsep pengganti). Bagian ini menjelaskan alasan status Terraform diperlukan.
Pemetaan ke dunia nyata
Terraform memerlukan semacam database untuk memetakan konfigurasi Terraform ke dunia nyata. Jika konfigurasi Anda berisi resource resource "google_compute_instance" "foo"
, Terraform menggunakan peta ini untuk mengetahui bahwa instance i-abcd1234
diwakili oleh resource tersebut.
Terraform memperkirakan bahwa setiap objek jarak jauh terikat pada hanya satu instance resource, yang biasanya terjamin karena Terraform bertanggung jawab untuk membuat objek dan mencatat identitasnya dalam status. Jika Anda mengimpor objek yang dibuat di luar Terraform, Anda harus memastikan bahwa setiap objek yang berbeda diimpor ke hanya satu instance resource.
Jika satu objek jarak jauh terikat pada dua instance resource atau lebih, Terraform mungkin akan melakukan tindakan yang tidak terduga terhadap objek tersebut karena pemetaan dari konfigurasi ke status objek jarak jauh telah menjadi ambigu.
Metadata
Selain melacak pemetaan antara resource dan objek jarak jauh, Terraform juga harus melacak metadata seperti dependensi resource.
Terraform biasanya menggunakan konfigurasi untuk menentukan urutan dependensi. Akan tetapi, saat Anda menghapus resource dari konfigurasi Terraform, Terraform harus mengetahui cara menghapus resource tersebut. Terraform dapat melihat bahwa sudah ada pemetaan untuk resource yang tidak berada dalam file konfigurasi Anda dan membuat rencana untuk menghancurkannya. Akan tetapi, karena tidak ada lagi resource, urutan tidak dapat ditentukan dari konfigurasi itu sendiri.
Untuk memastikan operasi yang tepat, Terraform menyimpan salinan dari serangkaian dependensi terbaru dalam status. Terraform tetap dapat menentukan urutan yang benar untuk penghancuran dari status saat Anda menghapus satu atau beberapa item dari konfigurasi.
Ini dapat dihindari jika Terraform mengetahui urutan yang diperlukan di antara jenis-jenis resource. Misalnya, Terraform dapat mengetahui bahwa server harus dihapus sebelum subnet yang menaunginya. Akan tetapi, kompleksitas untuk pendekatan ini dapat dengan cepat menjadi tidak dapat dikelola; selain memahami semantik urutan setiap resource untuk setiap cloud, Terraform juga harus memahami urutan di berbagai penyedia.
Terraform juga menyimpan metadata lain untuk alasan yang serupa, seperti pointer ke konfigurasi penyedia yang paling terakhir digunakan dengan resource dalam situasi di mana terdapat beberapa penyedia dengan alias.
Performa
Selain pemetaan dasar, Terraform menyimpan cache nilai atribut untuk semua resource dalam status. Ini adalah fitur opsional status Terraform dan hanya digunakan sebagai peningkatan performa.
Saat menjalankan terraform plan
, Terraform harus mengetahui status resource saat ini untuk menentukan secara efektif perubahan yang dibutuhkan untuk mencapai konfigurasi yang Anda inginkan.
Untuk infrastruktur kecil, Terraform dapat mengkueri penyedia Anda dan menyinkronkan atribut terbaru dari semua resource Anda. Ini adalah perilaku default Terraform: untuk setiap plan
dan apply
, Terraform akan menyinkronkan semua resource dalam status Anda.
Untuk infrastruktur yang lebih besar, pembuatan kueri untuk setiap resource berjalan sangat lambat. Banyak penyedia cloud tidak menyediakan API untuk mengkueri beberapa resource pada saat yang bersamaan, dan waktu round trip untuk setiap resource adalah ratusan milidetik. Selain itu, penyedia cloud hampir selalu memiliki pembatasan kapasitas API, jadi Terraform hanya dapat meminta resource dalam jumlah yang terbatas dalam satu waktu. Banyak pengguna Terraform sering menggunakan flag -refresh=false
dan flag -target
untuk mengatasi hal ini. Dalam skenario-skenario ini, status yang di-cache diperlakukan sebagai catatan kebenaran.
Sinkronisasi
Dalam konfigurasi default, Terraform menyimpan status dalam file pada direktori kerja saat ini di tempat Terraform dijalankan. Ini akan berfungsi saat Anda baru akan memulai. Namun, jika Terraform digunakan dalam sebuah tim, penting bagi semua orang untuk bekerja dalam status yang sama sehingga operasi akan diterapkan ke objek jarak jauh yang sama.
Status jarak jauh adalah solusi yang direkomendasikan untuk masalah ini. Dengan backend status berfitur lengkap, Terraform dapat menggunakan penguncian jarak jauh sebagai langkah untuk mencegah beberapa pengguna menjalankan Terraform secara tidak sengaja pada saat yang bersamaan; hal ini memastikan bahwa setiap operasi Terraform dimulai dengan status diperbarui yang paling terkini.
Penguncian status
Jika didukung oleh backend Anda, Terraform akan mengunci status Anda untuk semua operasi yang dapat menulis status. Dengan ini, orang lain tidak akan bisa mendapatkan kunci dan merusak status Anda.
Penguncian status terjadi otomatis pada semua operasi yang dapat menulis status. Anda tidak akan melihat pesan apa pun bahwa itu sedang terjadi. Jika penguncian status gagal, Terraform tidak akan dilanjutkan. Anda dapat menonaktifkan penguncian status untuk sebagian besar perintah dengan flag -lock
, tapi ini tidak direkomendasikan.
Jika dibutuhkan waktu yang lebih lama dari yang diperkirakan untuk mendapatkan kunci, Terraform akan mengeluarkan pesan status. Jika Terraform tidak mengeluarkan pesan, berarti penguncian status masih berlangsung.
Tidak semua backend mendukung penguncian. Lihat daftar jenis backend untuk mengetahui detail apakah backend mendukung penguncian atau tidak.
Ruang kerja
Setiap konfigurasi Terraform memiliki backend terkait yang menentukan cara eksekusi operasi dan lokasi penyimpanan data persisten seperti status Terraform.
Data persisten yang disimpan di backend merupakan bagian dari ruang kerja. Pada awalnya, backend hanya memiliki satu ruang kerja, bernama default, dan oleh karena itu hanya ada satu status Terraform yang terkait dengan konfigurasi tersebut.
Backend tertentu mendukung beberapa ruang kerja bernama, yang memungkinkan beberapa status dikaitkan dengan satu konfigurasi. Konfigurasi tetap hanya memiliki satu backend, tapi beberapa instance unik dari konfigurasi tersebut dapat di-deploy tanpa perlu mengonfigurasi backend baru atau mengubah kredensial autentikasi.
Tugas 1. Menggunakan backend
Backend di Terraform menentukan cara memuat status dan cara mengeksekusi operasi seperti apply
. Abstraksi ini memungkinkan penyimpanan status file nonlokal, eksekusi jarak jauh, dll.
Secara default, Terraform menggunakan backend "lokal", yang merupakan perilaku normal yang biasa Anda lihat pada Terraform. Ini adalah backend yang dipanggil di lab-lab sebelumnya.
Berikut adalah beberapa manfaat backend:
-
Bekerja dalam tim: Backend dapat menyimpan statusnya secara jarak jauh dan melindungi status tersebut dengan kunci untuk mencegah kerusakan. Beberapa backend, seperti Terraform Cloud, bahkan otomatis menyimpan histori semua revisi status.
-
Menyimpan informasi sensitif di luar disk: Status diambil dari backend sesuai permintaan dan hanya disimpan di memori.
-
Melakukan operasi jarak jauh: Untuk infrastruktur yang lebih besar atau perubahan tertentu,
terraform apply
dapat membutuhkan waktu yang lama. Beberapa backend mendukung operasi jarak jauh, yang memungkinkan operasi dieksekusi secara jarak jauh. Anda kemudian dapat mematikan komputer, dan operasi Anda akan tetap selesai. Jika digabungkan dengan penyimpanan status jarak jauh dan penguncian (dijelaskan di atas), ini juga akan membantu dalam lingkungan tim.
Backend sepenuhnya opsional: Anda dapat menggunakan Terraform dengan baik tanpa perlu mempelajari atau menggunakan backend. Namun, backend dapat menyelesaikan poin yang dialami oleh tim di skala tertentu. Jika Anda bekerja sebagai individu, Anda mungkin bisa berhasil tanpa perlu menggunakan backend.
Meskipun Anda hanya berniat menggunakan backend "lokal", Ada baiknya Anda mempelajari backend agar dapat mengubah perilaku backend lokal.
Mengaktifkan Gemini Code Assist di Cloud Shell IDE
Anda dapat menggunakan Gemini Code Assist di lingkungan pengembangan terintegrasi (IDE) seperti Cloud Shell untuk menerima panduan tentang kode atau menyelesaikan masalah dengan kode Anda. Sebelum mulai menggunakan Gemini Code Assist, Anda perlu mengaktifkannya.
- Di Cloud Shell, aktifkan Gemini for Google Cloud API dengan perintah berikut:
gcloud services enable cloudaicompanion.googleapis.com
- Klik Open Editor di toolbar Cloud Shell.
Catatan: Untuk membuka Cloud Shell Editor, klik Open Editor di toolbar Cloud Shell. Anda dapat beralih antara Cloud Shell dan Editor kode dengan mengklik Open Editor atau Open Terminal, sesuai kebutuhan.
-
Di panel kiri, klik ikon Settings, lalu di tampilan Settings, cari Gemini Code Assist.
-
Temukan dan pastikan kotak centang dipilih untuk Geminicodeassist: Enable, lalu tutup Settings.
-
Klik Cloud Code - No Project di status bar di bagian bawah layar.
-
Berikan otorisasi pada plugin seperti yang ditunjukkan. Jika project tidak dipilih secara otomatis, klik Select a Google Cloud Project, lalu pilih .
-
Pastikan project Google Cloud Anda () ditampilkan dalam pesan status Cloud Code di status bar.
Menambahkan backend lokal
Di bagian ini, Anda akan mempelajari cara mengonfigurasi backend lokal.
Saat mengonfigurasi backend untuk pertama kali (dari tidak ada backend yang ditentukan hingga mengonfigurasi backend secara eksplisit), Terraform akan memberi opsi untuk memigrasikan status Anda ke backend baru. Ini memungkinkan Anda menggunakan backend tanpa kehilangan status apa pun yang sudah ada.
Agar lebih berhati-hati, sebaiknya cadangkan juga status Anda secara manual. Anda dapat melakukan ini cukup dengan menyalin file terraform.tfstate
ke lokasi lain. Proses inisialisasi juga akan membuat cadangan, tetapi tidak ada salahnya berjaga-jaga.
Mengonfigurasi backend untuk pertama kali tidak ada bedanya dengan mengubah konfigurasi di masa mendatang: buat konfigurasi baru dan jalankan terraform init
. Terraform akan memandu Anda di sepanjang proses.
- Di terminal Cloud Shell, buat file konfigurasi
main.tf
:
touch main.tf
-
Di toolbar Cloud Shell, klik Open Editor.
-
Salin kode resource bucket Cloud Storage berikut ke file konfigurasi main.tf
Anda.
provider "google" {
project = "# REPLACE WITH YOUR PROJECT ID"
region = "{{{project_0.default_region | REGION}}}"
}
resource "google_storage_bucket" "test-bucket-for-state" {
name = "# REPLACE WITH YOUR PROJECT ID"
location = "US"
uniform_bucket_level_access = true
}
- Klik File > Save, tetapi jangan tutup file tersebut.
Anda dapat mempelajari lebih lanjut resource Cloud Storage dari dokumentasi Terraform.
-
Dengan file main.tf
terbuka dan Gemini Code Assist diaktifkan di IDE, lihat ikon
yang ada di sudut kanan atas editor.
-
Klik ikon Gemini Code Assist: Smart Actions
di toolbar.
Anda dapat menggunakan fitur Gemini Code Assist yang didukung AI untuk membuat perubahan pada kode Anda langsung di editor kode. Dalam contoh ini, Anda memutuskan untuk meminta bantuan Gemini Code Assist dalam mengedit konten file konfigurasi main.tf
.
- Untuk meminta bantuan Gemini Code Assist dalam mengedit file konfigurasi
main.tf
, tempel perintah berikut ke kolom teks inline Gemini Code Assist yang terbuka dari toolbar.
Update the main.tf configuration file with the following changes:
* In the Google provider block, set the project to {{{project_0.project_id | PROJECT_ID}}}.
* In the "test-bucket-for-state" resource block, update the name of the bucket to {{{project_0.project_id | BUCKET_NAME}}}.
-
Untuk meminta Gemini Code Assist memodifikasi kode yang sesuai, tekan ENTER.
-
Saat diminta di tampilan Gemini Diff, klik Accept.
Konten file konfigurasi main.tf
sekarang akan terlihat seperti berikut.
provider "google" {
project = "{{{project_0.project_id | PROJECT_ID}}}"
region = "{{{project_0.default_region | REGION}}}"
}
resource "google_storage_bucket" "test-bucket-for-state" {
name = "{{{project_0.project_id | BUCKET_NAME}}}"
location = "US"
uniform_bucket_level_access = true
}
- Tambahkan backend lokal ke file
main.tf
Anda:
terraform {
backend "local" {
path = "terraform/state/terraform.tfstate"
}
}
Ini akan mereferensikan file terraform.tfstate
di direktori terraform/state
. Untuk menentukan jalur file yang berbeda, ubah variabel path
.
Backend lokal menyimpan status pada sistem file lokal, mengunci status tersebut menggunakan API sistem, dan melakukan operasi secara lokal.
Terraform harus melakukan inisialisasi backend yang dikonfigurasi sebelum digunakan. Untuk melakukannya, Anda harus menjalankan terraform init
. Perintah terraform init
harus dijalankan oleh setiap anggota tim Anda pada setiap konfigurasi Terraform sebagai langkah pertama. Anda dapat mengeksekusi beberapa kali dan melakukan semua tindakan penyiapan yang diperlukan untuk lingkungan Terraform, termasuk melakukan inisialisasi backend.
Perintah init
harus dipanggil:
- Pada setiap lingkungan baru yang mengonfigurasi backend
- Pada setiap perubahan konfigurasi backend (termasuk jenis backend)
- Pada saat menghapus konfigurasi backend sepenuhnya
Anda tidak perlu mengingat kasus-kasus ini secara persis. Terraform akan mendeteksi saat inisialisasi diperlukan dan menampilkan pesan error dalam situasi tersebut. Terraform tidak melakukan inisialisasi otomatis karena mungkin akan memerlukan informasi tambahan dari pengguna atau melakukan migrasi status, dll.
- Di toolbar Cloud Shell, klik Open Terminal, lalu jalankan perintah berikut untuk melakukan inisialisasi Terraform:
terraform init
- Jalankan perintah berikut untuk menerapkan perubahan dan masukkan yes pada prompt untuk mengonfirmasi:
terraform apply
Sekarang, Editor Cloud Shell seharusnya akan menampilkan file status bernama terraform.tfstate
di direktori terraform/state
.
- Jalankan perintah berikut untuk memeriksa file status Anda:
terraform show
Resource google_storage_bucket.test-bucket-for-state
Anda seharusnya akan ditampilkan.
Menambahkan backend Cloud Storage
Backend Cloud Storage menyimpan status sebagai objek dalam imbuhan yang dapat dikonfigurasi pada bucket tertentu di Cloud Storage. Backend ini juga mendukung penguncian status. Ini akan mengunci status Anda untuk semua operasi yang dapat menulis status. Dengan ini, orang lain tidak akan bisa mendapatkan kunci dan merusak status Anda.
Penguncian status terjadi otomatis pada semua operasi yang dapat menulis status. Anda tidak akan melihat pesan apa pun bahwa itu sedang terjadi. Jika penguncian status gagal, Terraform tidak akan dilanjutkan. Anda dapat menonaktifkan penguncian status untuk sebagian besar perintah dengan flag -lock
, tapi ini tidak direkomendasikan.
-
Kembali ke file main.tf
Anda di Editor. Anda sekarang akan mengganti backend lokal saat ini dengan backend gcs
.
-
Untuk mengganti konfigurasi backend lokal yang sudah ada, salin konfigurasi berikut ke file Anda, dengan mengganti backend local
:
terraform {
backend "gcs" {
bucket = "{{{project_0.project_id | BUCKET_NAME}}}"
prefix = "terraform/state"
}
}
Catatan: Pastikan Anda memperbarui definisi variabel bucket
. Jika Anda tidak mengubah konfigurasi, ini akan menjadi name
dari resource google_storage_bucket
. Bucket ini digunakan untuk menghosting file status.
- Jalankan perintah berikut untuk melakukan inisialisasi backend Anda lagi, kali ini untuk memigrasikan status secara otomatis:
terraform init -migrate-state
Masukkan yes pada prompt untuk mengonfirmasi.
-
Di Konsol Cloud, pada Navigation menu, klik Cloud Storage > Buckets.
-
Klik bucket Anda dan cari file terraform/state/default.tfstate
. File status Anda sekarang berada di bucket Cloud Storage.
Catatan:
Jika Anda tidak ingin lagi menggunakan backend, cukup hapus konfigurasi dari file. Terraform mendeteksi ini seperti perubahan lain dan akan meminta Anda melakukan inisialisasi ulang.
Sebagai bagian dari inisialisasi ulang, Terraform akan bertanya apakah Anda ingin memigrasikan status Anda kembali ke status lokal normal. Setelah proses ini selesai, Terraform akan kembali memiliki perilaku default seperti semula.
Me-refresh status
Perintah terraform refresh
digunakan untuk merekonsiliasi status yang diketahui Terraform (melalui file statusnya) dengan infrastruktur dunia nyata. Ini dapat digunakan untuk mendeteksi setiap penyimpangan dari status yang terakhir diketahui dan memperbarui file status.
Perintah ini tidak memodifikasi infrastruktur, melainkan memodifikasi file status. Jika status diubah, ini dapat menyebabkan perubahan terjadi selama plan atau apply berikutnya.
-
Kembali ke bucket Cloud Storage di Konsol Cloud. Pilih kotak centang di samping nama bucket.
-
Klik tab Labels.
-
Klik Add Label. Tetapkan Key 2 = key
dan Value 2 = value
.
-
Klik Save.
-
Kembali ke Cloud Shell dan jalankan perintah berikut untuk memperbarui file status:
terraform refresh
- Jalankan perintah berikut untuk memeriksa update:
terraform show
Pasangan nilai kunci "key" = "value"
seharusnya ditampilkan di atribut label konfigurasi.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menggunakan backend
Mengosongkan ruang kerja Anda
Sebelum melanjutkan ke tugas berikutnya, Anda perlu menghancurkan infrastruktur yang disediakan.
- Pertama, kembalikan backend Anda ke
local
, sehingga Anda dapat menghapus bucket penyimpanan. Salin dan ganti konfigurasi gcs
dengan yang berikut:
terraform {
backend "local" {
path = "terraform/state/terraform.tfstate"
}
}
- Jalankan perintah berikut untuk kembali melakukan inisialisasi backend
local
:
terraform init -migrate-state
Masukkan yes pada prompt untuk mengonfirmasi.
- Dengan file
main.tf
terbuka, lihat ikon
yang ada di sudut kanan atas editor.
Selanjutnya, Anda memutuskan menggunakan Gemini Code Assist untuk membantu memodifikasi konfigurasi Terraform, dengan menambahkan argumen ke kode yang digunakan untuk menghancurkan resource bucket Cloud Storage.
-
Klik ikon Gemini Code Assist: Smart Actions
di toolbar.
-
Agar Gemini Code Assist dapat membantu Anda memodifikasi file konfigurasi main.tf
, tempel perintah berikut ke kolom teks inline Gemini Code Assist yang terbuka dari toolbar.
Update the google_storage_bucket resource named "test-bucket-for-state" in the main.tf file. Add the force_destroy = true argument to its configuration.
Saat Anda menghapus bucket, opsi boolean ini digunakan untuk menghapus semua objek dalam container. Jika Anda mencoba menghapus bucket yang berisi objek, Terraform akan menggagalkan operasi tersebut.
-
Untuk meminta Gemini Code Assist memodifikasi kode yang sesuai, tekan ENTER.
-
Saat diminta di tampilan Gemini Diff, klik Accept.
Konten file konfigurasi main.tf
sekarang akan terlihat seperti berikut.
resource "google_storage_bucket" "test-bucket-for-state" {
name = "{{{project_0.project_id | BUCKET_NAME}}}"
location = "US"
uniform_bucket_level_access = true
force_destroy = true
}
- Jalankan perintah berikut untuk menerapkan perubahan:
terraform apply
Masukkan yes pada prompt untuk mengonfirmasi.
- Anda sekarang dapat menuntaskan penghancuran infrastruktur: Jalankan perintah berikut:
terraform destroy
Masukkan yes pada prompt untuk mengonfirmasi.
Tugas 2. Mengimpor konfigurasi Terraform
Di bagian ini, Anda akan mengimpor container dan image Docker yang sudah ada ke ruang kerja Terraform yang kosong. Dengan melakukannya, Anda akan mempelajari strategi dan pertimbangan untuk mengimpor infrastruktur dunia nyata ke Terraform.
Alur kerja Terraform default meliputi pembuatan dan pengelolaan infrastruktur secara keseluruhan dengan Terraform.
-
Tulis konfigurasi Terraform yang menetapkan infrastruktur yang ingin Anda buat.
-
Tinjau rencana Terraform untuk memastikan bahwa konfigurasi akan menghasilkan status dan infrastruktur yang diharapkan.
-
Terapkan konfigurasi untuk membuat status dan infrastruktur Terraform Anda.

Setelah membuat infrastruktur dengan Terraform, Anda dapat memperbarui konfigurasi dan rencana, serta menerapkan perubahan tersebut. Pada akhirnya, Anda akan menggunakan Terraform untuk menghancurkan infrastruktur saat tidak lagi dibutuhkan. Alur kerja ini mengasumsikan bahwa Terraform akan membuat infrastruktur yang sepenuhnya baru.
Akan tetapi, Anda mungkin perlu mengelola infrastruktur yang tidak dibuat oleh Terraform. Impor Terraform mengatasi masalah ini dengan memuat resource yang didukung ke status ruang kerja Terraform Anda.
Namun demikian, perintah impor tidak otomatis membuat konfigurasi untuk mengelola infrastruktur. Karena itu, proses pengimporan infrastruktur yang sudah ada ke Terraform terdiri dari beberapa langkah.
Menghadirkan infrastruktur yang sudah ada ke dalam kontrol Terraform mencakup lima langkah utama:
- Mengidentifikasi infrastruktur yang sudah ada yang akan diimpor.
- Mengimpor infrastruktur ke status Terraform Anda.
- Menulis konfigurasi Terraform yang sesuai dengan infrastruktur tersebut.
- Meninjau rencana Terraform untuk memastikan bahwa konfigurasi sesuai dengan status dan infrastruktur yang diharapkan.
- Menerapkan konfigurasi untuk memperbarui status Terraform Anda.

Di bagian ini, Anda akan terlebih dahulu membuat container Docker dengan Docker CLI. Selanjutnya, Anda akan mengimpornya ke ruang kerja Terraform yang baru. Anda kemudian akan memperbarui konfigurasi container menggunakan Terraform sebelum akhirnya menghancurkannya setelah selesai.
Peringatan: Pengimporan infrastruktur akan memanipulasi status Terraform sedemikian rupa sehingga dapat menjadikan proyek Terraform yang sudah ada berstatus tidak valid. Buat cadangan file terraform.tfstate
dan direktori .terraform
sebelum menggunakan impor Terraform pada proyek Terraform sungguhan, dan simpan secara aman.
Membuat container Docker
- Jalankan perintah berikut untuk membuat container bernama
hashicorp-learn
menggunakan image NGINX terbaru dari Docker Hub, dan lihat pratinjau container pada virtual machine Cloud Shell melalui port 80 (HTTP):
docker run --name hashicorp-learn --detach --publish 8080:80 nginx:latest
- Jalankan perintah berikut untuk memverifikasi bahwa container sedang berjalan:
docker ps
- Pada panel Cloud Shell, klik Web Preview, lalu klik Preview on port 8080.

Cloud Shell membuka URL pratinjau pada layanan proxy-nya di jendela browser baru dan menampilkan halaman indeks default NGINX. Sekarang Anda memiliki image dan container Docker yang dapat diimpor ke ruang kerja Anda dan dikelola dengan Terraform.
Mengimpor container ke Terraform
- Jalankan perintah berikut untuk meng-clone repositori contoh:
git clone https://github.com/hashicorp/learn-terraform-import.git
- Jalankan perintah berikut untuk mengubah ke direktori tersebut:
cd learn-terraform-import
Direktori ini berisi dua file konfigurasi Terraform yang membentuk konfigurasi yang akan Anda gunakan nanti dalam panduan ini:
- File
main.tf
mengonfigurasi penyedia Docker.
- File
docker.tf
berisi konfigurasi yang diperlukan untuk mengelola container Docker yang telah Anda buat pada langkah sebelumnya.
- Jalankan perintah berikut untuk melakukan inisialisasi ruang kerja Terraform Anda:
terraform init
Catatan: Jika Anda menerima error berupa Error: Failed to query available provider packages, jalankan perintah ini: terraform init -upgrade
-
Di Editor Cloud Shell, buka learn-terraform-import/main.tf
.
-
Temukan resource provider: docker
dan jadikan sebagai komentar atau hapus argumen host
:
provider "docker" {
# host = "npipe:////.//pipe//docker_engine"
}
Catatan:
Ini adalah solusi sementara untuk masalah error inisialisasi Docker yang telah diketahui.
-
Selanjutnya, buka learn-terraform-import/docker.tf
.
-
Di bawah kode yang telah dijadikan sebagai komentar, tetapkan resource docker_container
kosong di file docker.tf
, yang mewakili container Docker dengan ID resource Terraform docker_container.web
:
resource "docker_container" "web" {}
- Temukan nama container yang ingin Anda impor, yaitu container yang Anda buat di langkah sebelumnya:
docker ps
- Jalankan perintah
terraform import
berikut untuk menghubungkan container Docker yang sudah ada ke resource docker_container.web
yang baru saja Anda buat. Impor Terraform memerlukan ID resource Terraform ini dan ID container Docker lengkap. Perintah docker inspect -f {{.ID}} hashicorp-learn
akan menampilkan ID container SHA256 lengkap:
terraform import docker_container.web $(docker inspect -f {{.ID}} hashicorp-learn)
Catatan: ID yang diterima oleh terraform import
bervariasi berdasarkan jenis resource dan didokumentasikan dalam dokumentasi penyedia untuk setiap resource yang dapat diimpor ke Terraform. Untuk mempelajari contoh ini, baca dokumentasi penyedia Docker
- Jalankan perintah berikut untuk memverifikasi bahwa container telah diimpor ke status Terraform Anda:
terraform show
Status ini berisi segala sesuatu yang diketahui oleh Terraform mengenai container Docker yang baru saja Anda impor. Namun demikian, impor Terraform tidak membuat konfigurasi untuk resource.
Membuat konfigurasi
Anda perlu membuat konfigurasi Terraform sebelum dapat menggunakan Terraform untuk mengelola container ini.
- Jalankan kode berikut:
terraform plan
Catatan:
Terraform menampilkan error jika tidak ada argumen image
dan name
yang diperlukan. Terraform tidak dapat membuat rencana untuk resource yang tidak memiliki argumen yang diperlukan.
Ada dua pendekatan untuk memperbarui konfigurasi di docker.tf
agar sesuai dengan status yang Anda impor. Anda dapat menerima keseluruhan status resource saat ini ke dalam konfigurasi Anda sebagaimana adanya, atau memilih atribut yang diperlukan ke dalam konfigurasi Anda satu per satu. Masing-masing dari pendekatan ini dapat berguna pada keadaan yang berbeda.
-
Menggunakan status saat ini sering kali lebih cepat, tapi dapat menghasilkan konfigurasi yang terlalu panjang karena setiap atribut disertakan dalam status, tanpa memandang apakah atribut tersebut perlu disertakan dalam konfigurasi atau tidak.
-
Memilih atribut yang diperlukan satu per satu dapat menghasilkan konfigurasi yang lebih dapat dikelola, tetapi Anda harus memahami atribut mana yang perlu disetel dalam konfigurasi.
Untuk tujuan lab ini, Anda akan menggunakan status saat ini sebagai resource.
- Salin status Terraform Anda ke file
docker.tf
:
terraform show -no-color > docker.tf
Catatan: Simbol >
akan mengganti seluruh isi docker.tf dengan output perintah terraform show
. Meskipun sesuai untuk contoh ini, mengimpor resource ke konfigurasi yang sudah mengelola resource akan mengharuskan Anda mengedit output terraform show
untuk menghapus resource yang sudah ada yang konfigurasinya tidak ingin Anda ganti secara keseluruhan dan menggabungkan resource baru ke dalam konfigurasi yang sudah ada.
-
Periksa file docker.tf
untuk melihat bahwa isinya telah diganti dengan output perintah terraform show yang baru saja Anda jalankan.
-
Jalankan kode berikut:
terraform plan
Terraform akan menampilkan peringatan dan error tentang argumen yang tidak digunakan lagi ('link'), dan beberapa argumen hanya baca (ip_address
, network_data
, gateway
, ip_prefix_length
, id
).
Argumen hanya baca ini adalah nilai yang disimpan Terraform dalam statusnya untuk container Docker, tetapi tidak dapat disetel melalui konfigurasi karena dikelola secara internal oleh Docker. Terraform dapat menyetel argumen link dengan konfigurasi, tapi akan tetap menampilkan peringatan karena tidak digunakan lagi dan mungkin tidak didukung oleh versi penyedia Docker di masa mendatang.
Karena pendekatan yang ditunjukkan di sini memuat semua atribut yang diwakili dalam status Terraform, konfigurasi Anda akan mencakup atribut opsional yang nilainya sama seperti nilai defaultnya. Atribut mana yang opsional, dan nilai-nilai defaultnya, akan bervariasi dari satu penyedia ke penyedia lain, dan tercantum dalam dokumentasi penyedia.
- Anda sekarang dapat menghapus atribut opsional ini secara selektif. Hapus semua atribut ini, dengan hanya mempertahankan atribut yang diperlukan:
image
, name
, dan ports
. Setelah menghapus atribut opsional ini, konfigurasi Anda seharusnya sesuai dengan contoh berikut:
Output:
resource "docker_container" "web" {
image = "sha256:87a94228f133e2da99cb16d653cd1373c5b4e8689956386c1c12b60a20421a02"
name = "hashicorp-learn"
ports {
external = 8080
internal = 80
ip = "0.0.0.0"
protocol = "tcp"
}
}
Saat mengimpor infrastruktur sungguhan, baca dokumentasi penyedia untuk mempelajari fungsi setiap argumen. Ini akan membantu Anda menentukan cara menangani setiap error atau peringatan dari langkah plan. Misalnya, dokumentasi untuk argumen links
berada di dokumentasi penyedia Docker.
- Jalankan perintah berikut untuk memverifikasi bahwa error telah diatasi:
terraform plan
Rencana ini seharusnya sekarang akan berhasil dieksekusi. Perhatikan bahwa rencana mengindikasikan Terraform akan memperbarui container untuk menambahkan atribut attach
, logs
, must_run
, dan start
.
Terraform menggunakan atribut ini untuk membuat container Docker, tapi Docker tidak menyimpannya. Sebagai akibatnya, terraform import
tidak memuat nilai-nilainya ke status. Saat Anda merencanakan dan menerapkan konfigurasi, penyedia Docker akan menetapkan nilai default untuk atribut ini dan menyimpannya dalam status, tetapi nilai tersebut tidak akan memengaruhi container yang sedang berjalan.
- Jalankan perintah berikut untuk menerapkan perubahan dan menyelesaikan proses sinkronisasi konfigurasi dan status Terraform yang telah diperbarui dengan container Docker yang diwakili oleh perubahan tersebut. Masukkan yes pada prompt untuk mengonfirmasi.
terraform apply
Sekarang file konfigurasi, status Terraform, dan container telah sinkron, dan Anda dapat menggunakan Terraform untuk mengelola container Terraform seperti biasa.
Membuat resource image
Dalam beberapa kasus, Anda dapat menghadirkan resource ke dalam kontrol Terraform tanpa menggunakan perintah terraform import
. Ini sering kali merupakan kasus untuk resource yang ditentukan oleh satu tag atau ID unik, seperti image Docker.
Di file docker.tf
, resource docker_container.web
menentukan ID hash SHA256 dari image yang digunakan untuk membuat container. Ini adalah cara Docker menyimpan ID image secara internal, dan oleh karena itu terraform import
memuat ID image secara langsung ke status Anda. Namun demikian, ID image mungkin tidak dapat dibaca manusia semudah tag atau nama image, dan mungkin tidak sesuai dengan intent Anda. Misalnya, Anda mungkin ingin menggunakan versi terbaru image "nginx".
- Untuk mengambil nama tag image, jalankan perintah berikut, dengan mengganti
<IMAGE-ID>
dengan ID image dari docker.tf
:
docker image inspect <IMAGE-ID> -f {{.RepoTags}}
- Tambahkan konfigurasi berikut ke file
docker.tf
untuk menampilkan image ini sebagai resource:
resource "docker_image" "nginx" {
name = "nginx:latest"
}
Catatan: Jangan mengganti nilai image di resource docker_container.web
pada saat ini, atau Terraform akan menghancurkan dan membuat ulang container Anda. Karena Terraform belum memuat resource docker_image.nginx
ke status, tidak ada ID image yang dapat dibandingkan oleh Terraform dengan ID image yang di-hardcode, yang akan menyebabkan Terraform berasumsi bahwa container harus diganti. Sebagai solusi sementara atas situasi ini, buat image terlebih dahulu, lalu perbarui container untuk menggunakannya, seperti yang ditunjukkan di lab ini.
- Jalankan perintah berikut untuk membuat resource image dalam status. Masukkan yes pada prompt untuk mengonfirmasi.
terraform apply
Karena sekarang Terraform telah membuat resource untuk image, Anda dapat merujuknya dalam konfigurasi container. Anda memutuskan untuk meminta bantuan Gemini Code Assist untuk melakukannya.
-
Dengan file docker.tf
terbuka, lihat ikon
yang ada di sudut kanan atas editor.
-
Klik ikon Gemini Code Assist: Smart Actions
di toolbar.
-
Untuk mengubah nilai image untuk docker_container.web
agar merujuk resource image baru di file docker.tf
, tempel perintah berikut ke kolom teks inline Gemini Code Assist yang terbuka dari toolbar.
Update argumen image di resource docker_container bernama web dalam file docker.tf. Tetapkan nilainya ke docker_image.nginx.image_id.
-
Untuk meminta Gemini Code Assist memodifikasi kode yang sesuai, tekan ENTER.
-
Saat diminta di tampilan Gemini Diff, klik Accept.
Konten file konfigurasi docker.tf
sekarang akan terlihat seperti berikut.
resource "docker_container" "web" {
image = docker_image.nginx.image_id
name = "hashicorp-learn"
ports {
external = 8080
internal = 80
ip = "0.0.0.0"
protocol = "tcp"
}
}
- Jalankan perintah berikut untuk mencari perubahan. Masukkan yes pada prompt untuk mengonfirmasi.
terraform apply
Karena docker_image.nginx.latest
cocok dengan ID image hardcoded yang Anda ganti, menjalankan terraform apply
pada saat ini tidak akan menunjukkan perubahan apa pun.
Catatan: Jika ID image untuk tag "nginx:latest" berubah antara waktu Anda pertama kali membuat container Docker dan saat Anda menjalankan perintah ini, container akan dihancurkan dan dibuat ulang dengan image baru.
Mengelola container dengan Terraform
Karena sekarang Terraform mengelola container Docker, Anda dapat menggunakan Terraform untuk mengubah konfigurasi.
- Di file
docker.tf
Anda, ubah port eksternal container dari 8080
menjadi 8081
:
resource "docker_container" "web" {
name = "hashicorp-learn"
image = docker_image.nginx.image_id
ports {
external = 8081
internal = 80
ip = "0.0.0.0"
protocol = "tcp"
}
}
- Jalankan perintah berikut untuk menerapkan perubahan:
terraform apply
Masukkan yes pada prompt untuk mengonfirmasi.
Hal ini menyebabkan Terraform menghancurkan dan membuat ulang container dengan konfigurasi port yang baru.
- Jalankan perintah berikut untuk memverifikasi bahwa container telah diganti dengan container baru yang memiliki konfigurasi baru:
docker ps
Perhatikan bahwa ID container telah berubah. Karena perubahan konfigurasi port mengharuskannya dihancurkan dan dibuat ulang, ini adalah container yang benar-benar baru.
Menghancurkan infrastruktur
Anda telah mengimpor container Docker dan image yang digunakan untuk membuatnya ke Terraform.
- Jalankan perintah berikut untuk menghancurkan container dan image:
terraform destroy
Masukkan yes pada prompt untuk mengonfirmasi.
- Jalankan perintah berikut untuk memvalidasi bahwa container telah dihancurkan:
docker ps --filter "name=hashicorp-learn"
Catatan: Karena Anda telah menambahkan image ke konfigurasi Terraform dan container, image akan dihapus dari Docker dan container. Jika container lain sedang menggunakan image yang sama, langkah destroy akan gagal. Ingat bahwa mengimpor resource ke Terraform berarti bahwa Terraform akan mengelola keseluruhan siklus proses resource, termasuk penghancuran.
Keterbatasan dan pertimbangan lain
Ada beberapa hal penting yang harus dipertimbangkan saat mengimpor resource ke Terraform.
Impor Terraform hanya dapat mengetahui status infrastruktur saat ini seperti yang dilaporkan oleh penyedia Terraform. Impor Terraform tidak mengetahui:
- Apakah infrastruktur bekerja dengan benar.
- Intent infrastruktur.
- Perubahan yang telah Anda buat pada infrastruktur yang tidak dikontrol oleh Terraform, misalnya, status sistem file container Docker.
Impor mencakup langkah-langkah manual yang mungkin rentan terhadap error, khususnya jika orang yang mengimpor resource tidak mengetahui konteks bagaimana dan mengapa resource tersebut pada awalnya dibuat.
Impor akan memanipulasi file status Terraform; sebaiknya Anda membuat cadangan sebelum mengimpor infrastruktur baru.
Impor Terraform tidak mendeteksi atau membuat hubungan antara infrastruktur.
Terraform tidak mendeteksi atribut default yang tidak perlu disetel di konfigurasi Anda.
Tidak semua penyedia dan resource mendukung impor Terraform.
Mengimpor infrastruktur ke Terraform tidak berarti bahwa infrastruktur tersebut dapat dihancurkan dan dibuat ulang oleh Terraform. Misalnya, infrastruktur yang diimpor dapat mengandalkan infrastruktur atau konfigurasi lain yang tidak dikelola.
Mengikuti praktik terbaik infrastruktur sebagai kode (IaC) seperti infrastruktur yang tidak dapat diubah dapat membantu mencegah banyak masalah ini. Namun, infrastruktur yang dibuat secara manual kemungkinan besar tidak mengikuti praktik terbaik IaC.
Alat seperti Terraformer dapat mengotomatiskan beberapa langkah manual yang terkait dengan pengimporan infrastruktur. Namun demikian, alat-alat ini bukan bagian dari Terraform itu sendiri dan tidak dipromosikan atau didukung oleh HashiCorp.
Selamat!
Di lab ini, Anda telah mempelajari cara mengelola backend dan status dengan Terraform dan bantuan Gemini Code Assist. Anda telah membuat backend lokal dan backend Cloud Storage untuk mengelola file status, me-refresh status, dan mengimpor konfigurasi ke Terraform. Anda juga telah memperbarui konfigurasi dan mengeditnya secara manual untuk mengelola container Docker sepenuhnya dengan Terraform.
Langkah berikutnya/Pelajari lebih lanjut
Pastikan Anda membaca referensi 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 25 Agustus 2025
Lab Terakhir Diuji pada 25 Agustus 2025
Hak cipta 2025 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.