Dalam tutorial ini, Anda akan mempelajari cara menyimpan status Terraform di bucket Cloud Storage.
Secara default, Terraform menyimpan status
secara lokal dalam file bernama terraform.tfstate. Konfigurasi default ini dapat membuat penggunaan Terraform menjadi sulit bagi tim saat beberapa pengguna menjalankan Terraform secara bersamaan dan setiap mesin memiliki pemahaman sendiri tentang infrastruktur saat ini.
Untuk membantu Anda menghindari masalah tersebut, halaman ini menunjukkan cara mengonfigurasi status jarak jauh yang mengarah ke bucket Cloud Storage. Status jarak jauh adalah fitur backend Terraform.
Tujuan
Tutorial ini menunjukkan cara melakukan hal berikut:
- Menggunakan Terraform untuk menyediakan bucket Cloud Storage guna menyimpan status Terraform.
- Menambahkan pembuatan template dalam file konfigurasi Terraform untuk memigrasikan status dari backend lokal ke bucket Cloud Storage.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Cloud Storage menimbulkan biaya untuk penyimpanan, operasi baca dan tulis, keluar dari jaringan, dan replikasi.
Bucket Cloud Storage dalam tutorial ini mengaktifkan Pembuatan Versi Objek untuk menyimpan histori deployment Anda. Mengaktifkan Pembuatan Versi Objek akan meningkatkan biaya penyimpanan, yang dapat Anda kurangi dengan mengonfigurasi Pengelolaan Siklus Proses Objek untuk menghapus versi status lama.
Sebelum memulai
-
Di Google Cloud konsol, aktifkan Cloud Shell.
Cloud Shell sudah diinstal sebelumnya dengan Terraform.
Jika Anda menggunakan shell lokal, lakukan langkah-langkah berikut:
- Instal Terraform.
-
Buat kredensial autentikasi lokal untuk akun pengguna Anda:
gcloud auth application-default login
Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, pastikan Anda telah login ke gcloud CLI dengan identitas gabungan Anda.
-
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih Google Cloud project yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama Google Cloud project Anda.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
-
Aktifkan Cloud Storage API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable storage.googleapis.com
-
Berikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/storage.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ganti kode berikut:
PROJECT_ID: Project ID Anda.USER_IDENTIFIER: ID untuk akun pengguna akun. Untuk contoh, lihat Mewakili pengguna gabungan tenaga kerja dalam kebijakan IAM.ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
Atau, Anda dapat membuat peran IAM khusus yang berisi izin berikut:
storage.buckets.createstorage.buckets.liststorage.objects.getstorage.objects.createstorage.objects.deletestorage.objects.update
Sebagai praktik terbaik, sebaiknya akses ke bucket dan file status yang disimpan di sana dikontrol. Hanya sekelompok kecil pengguna (misalnya, administrator cloud utama dan orang yang bertindak sebagai administrator alternatif atau cadangan) yang boleh memiliki izin admin untuk bucket. Developer lainnya hanya boleh memiliki izin untuk menulis dan membaca objek di bucket.
Menyiapkan lingkungan
Clone repositori GitHub yang berisi contoh Terraform:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branchUbah ke direktori kerja:
cd terraform-docs-samples/storage/remote_terraform_backend_template
Meninjau file Terraform
Tinjau file
main.tf:cat main.tfOutputnya mirip dengan berikut
File ini menjelaskan resource berikut:
random_id: ID ini ditambahkan ke nama bucket Cloud Storage untuk memastikan nama unik untuk bucket Cloud Storage.google_storage_bucket: Bucket Cloud Storage untuk menyimpan file status. Bucket ini dikonfigurasi untuk memiliki properti berikut:force_destroyditetapkan kefalseuntuk memastikan bucket tidak dihapus jika ada objek di dalamnya. Hal ini memastikan bahwa informasi status di bucket tidak terhapus secara tidak sengaja.public_access_preventionditetapkan keenforceduntuk memastikan konten bucket tidak diekspos secara tidak sengaja ke publik.uniform_bucket_level_accessditetapkan ketrueuntuk mengontrol akses ke bucket dan kontennya menggunakan izin IAM, bukan daftar kontrol akses.versioningdiaktifkan untuk memastikan versi status sebelumnya dipertahankan di bucket.
local_file: File lokal. Konten file ini menginstruksikan Terraform untuk menggunakan bucket Cloud Storage sebagai backend jarak jauh setelah bucket dibuat.
Menyediakan bucket Cloud Storage
Lakukan inisialisasi Terraform:
terraform initSaat Anda menjalankan
terraform inituntuk pertama kalinya, bucket Cloud Storage yang Anda tentukan dalam filemain.tfbelum ada, sehingga Terraform melakukan inisialisasi backend lokal untuk menyimpan status di sistem file lokal.Terapkan konfigurasi untuk menyediakan resource yang dijelaskan dalam file
main.tf:terraform applySaat diminta, masukkan
yes.Saat Anda menjalankan
terraform applyuntuk pertama kalinya, Terraform menyediakan bucket Cloud Storage untuk menyimpan status. Tindakan ini juga membuat file lokal; konten file ini menginstruksikan Terraform untuk menggunakan bucket Cloud Storage sebagai backend jarak jauh untuk menyimpan status.
Memigrasikan status ke bucket Cloud Storage
Migrasikan status Terraform ke backend Cloud Storage jarak jauh:
terraform init -migrate-stateTerraform mendeteksi bahwa Anda sudah memiliki file status secara lokal dan meminta Anda untuk memigrasikan status ke bucket Cloud Storage yang baru. Saat diminta, masukkan
yes.
Setelah menjalankan perintah ini, status Terraform Anda akan disimpan di bucket Cloud Storage. Terraform mengambil status terbaru dari bucket ini sebelum menjalankan perintah, dan mengirim status terbaru ke bucket setelah menjalankan perintah.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Agar tidak dikenai biaya untuk Google Cloud akun Anda untuk resource yang digunakan di halaman ini, ikuti langkah-langkah berikut.
Buka file
main.tf.Di resource
google_storage_bucket.default, perbarui nilaiforce_destroymenjaditrue.Terapkan konfigurasi yang telah diperbarui:
terraform applySaat diminta, masukkan
yes.Hapus file status:
rm backend.tfKonfigurasi ulang backend agar bersifat lokal:
terraform init -migrate-stateSaat diminta, masukkan
yes.Jalankan perintah berikut untuk menghapus resource Terraform:
terraform destroySaat diminta, masukkan
yes.