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
mempersulit penggunaan Terraform oleh tim ketika beberapa pengguna menjalankan Terraform secara
bersamaan dan setiap mesin memiliki pemahamannya 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:
- Gunakan Terraform untuk menyediakan bucket Cloud Storage guna menyimpan status Terraform.
- Tambahkan template di file konfigurasi Terraform untuk memigrasikan status dari backend lokal ke bucket Cloud Storage.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
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, traffic keluar 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
-
In the Google Cloud console, activate Cloud Shell.
Cloud Shell telah diinstal sebelumnya dengan Terraform.
Jika Anda menggunakan shell lokal, lakukan langkah-langkah berikut:
- Instal Terraform.
-
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, confirm that you have configured the gcloud CLI to use Workforce Identity Federation.
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Storage API:
gcloud services enable storage.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/storage.admin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For examples, see Represent workforce pool users in IAM policies. - Replace
ROLE
with each individual role.
Atau, Anda dapat membuat peran IAM khusus yang berisi izin berikut:
storage.buckets.create
storage.buckets.list
storage.objects.get
storage.objects.create
storage.objects.delete
storage.objects.update
Sebagai praktik terbaik, sebaiknya kontrol akses ke bucket dan file status yang disimpan di sana. 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 lain harus memiliki izin untuk hanya menulis dan membaca objek di bucket.
- Replace
Menyiapkan lingkungan
Clone repositori GitHub yang berisi contoh Terraform:
git clone https://github.com/terraform-google-modules/terraform-docs-samples.git --single-branch
Ubah ke direktori kerja:
cd terraform-docs-samples/storage/remote_terraform_backend_template
Meninjau file Terraform
Tinjau file
main.tf
:cat main.tf
Outputnya mirip dengan yang berikut ini
File ini menjelaskan resource berikut:
random_id
: Ini ditambahkan ke nama bucket Cloud Storage untuk memastikan nama yang unik untuk bucket Cloud Storage.google_storage_bucket
: Bucket Cloud Storage untuk menyimpan file status. Bucket ini dikonfigurasi agar memiliki properti berikut:force_destroy
ditetapkan kefalse
untuk memastikan bahwa bucket tidak dihapus jika ada objek di dalamnya. Hal ini memastikan bahwa informasi status dalam bucket tidak terhapus secara tidak sengaja.public_access_prevention
ditetapkan keenforced
untuk memastikan konten bucket tidak terekspos ke publik secara tidak sengaja.uniform_bucket_level_access
ditetapkan ketrue
untuk mengizinkan kontrol akses ke bucket dan kontennya menggunakan izin IAM, bukan daftar kontrol akses.versioning
diaktifkan untuk memastikan bahwa versi status sebelumnya dipertahankan di bucket.
local_file
: File lokal. Konten file ini memerintahkan Terraform untuk menggunakan bucket Cloud Storage sebagai backend jarak jauh setelah bucket dibuat.
Menyediakan bucket Cloud Storage
Lakukan inisialisasi Terraform:
terraform init
Saat Anda menjalankan
terraform init
untuk pertama kalinya, bucket Cloud Storage yang Anda tentukan dalam filemain.tf
belum ada, sehingga Terraform menginisialisasi backend lokal untuk menyimpan status dalam sistem file lokal.Terapkan konfigurasi untuk menyediakan resource yang dijelaskan dalam file
main.tf
:terraform apply
Saat diminta, masukkan
yes
.Saat Anda menjalankan
terraform apply
untuk pertama kalinya, Terraform akan menyediakan bucket Cloud Storage untuk menyimpan status. Tindakan ini juga akan membuat file lokal; konten file ini akan 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-state
Terraform 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 akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.
Buka file
main.tf
.Di resource
google_storage_bucket.default
, perbarui nilaiforce_destroy
menjaditrue
.Terapkan konfigurasi yang telah diperbarui:
terraform apply
Saat diminta, masukkan
yes
.Hapus file status:
rm backend.tf
Konfigurasi ulang backend menjadi lokal:
terraform init -migrate-state
Saat diminta, masukkan
yes
.Jalankan perintah berikut untuk menghapus resource Terraform:
terraform destroy
Saat diminta, masukkan
yes
.