FAQ Terraform di Google Cloud

Halaman ini memberikan jawaban atas pertanyaan umum yang muncul saat menggunakan Terraform untuk mengelola resource di Google Cloud, terutama terkait interaksi API dan cara memulai.

Mulai menggunakan Terraform

Bagian ini mencakup konsep dasar dan langkah-langkah awal bagi pengguna Terraform baru.

Apa yang dimaksud dengan Infrastructure as Code (IaC) dan mengapa saya harus menggunakan Terraform?

Infrastructure as Code (IaC) adalah praktik mengelola dan menyediakan infrastruktur komputasi melalui file definisi yang dapat dibaca mesin. Untuk ringkasan lengkap tentang konsep dan manfaat IaC, lihat Apa yang dimaksud dengan Infrastructure as Code?.

Terraform adalah alat IaC open source yang digunakan untuk menentukan, menyediakan, dan mengelola resource cloud dan lokal. Untuk mempelajari keuntungan menggunakan Terraform untuk alur kerja IaC, lihat Manfaat menggunakan Terraform.

Bagaimana cara menginstal Terraform dan menjalankan konfigurasi pertama saya?

Untuk mulai menggunakan Terraform, Anda harus mendownload dan menginstal Terraform CLI di komputer lokal terlebih dahulu. Petunjuk tersedia di situs HashiCorp Terraform. Setelah penginstalan, Anda dapat membuat file konfigurasi Terraform, menentukan resource (seperti bucket Cloud Storage), lalu menggunakan terraform init untuk melakukan inisialisasi direktori kerja, terraform plan untuk melihat pratinjau perubahan, dan terraform apply untuk menerapkannya.

Apa yang dimaksud dengan HashiCorp Configuration Language (HCL) dan di mana saya dapat mempelajari sintaksisnya?

HashiCorp Configuration Language (HCL) adalah bahasa konfigurasi yang digunakan oleh Terraform. Dirancang agar dapat dibaca manusia dan diproses mesin, untuk penulisan dan pemahaman definisi infrastruktur yang jelas dan efisien. HCL mendukung berbagai fitur seperti variabel, ekspresi, fungsi, dan modul. Anda dapat mempelajari sintaksis HCL melalui dokumentasi resmi HashiCorp Terraform yang menyediakan panduan dan contoh yang komprehensif.

Di mana saya dapat menemukan contoh konfigurasi Terraform untuk resource Google Cloud ?

Anda dapat menemukan banyak contoh konfigurasi Terraform untuk Google Cloud:

  • HashiCorp Terraform Registry: Terraform Registry resmi untuk penyedia Google Cloud berisi dokumentasi dan contoh untuk setiap resource dan sumber data.

  • Google Cloud Sampel Terraform: Google menyediakan berbagai sampel Terraform yang menunjukkan cara men-deploy dan mengelola resource umum Google Cloud .

  • Repositori GitHub: Banyak repositori open source, termasuk organisasi GitHub terraform-google-modules, menawarkan contoh dan modul yang dapat digunakan kembali.

Bagaimana cara mengelola dan menguji konfigurasi Terraform yang kompleks, terutama saat menangani banyak resource?

Untuk konfigurasi yang kompleks, pertimbangkan untuk menggunakan fitur Terraform yang dirancang untuk skalabilitas dan kemudahan pengelolaan:

  • Modul: Mengenkapsulasi dan menggunakan kembali pola infrastruktur umum.

  • Ruang kerja: Mengelola beberapa instance berbeda dari satu konfigurasi.

  • terraform plan dan terraform validate: Gunakan perintah ini secara rutin untuk memvalidasi sintaksis dan melihat pratinjau perubahan tanpa deployment yang sebenarnya.

  • Menargetkan resource (gunakan dengan hati-hati): Untuk menguji bagian tertentu, Anda dapat menggunakan -target dengan terraform apply atau terraform destroy untuk sementara, meskipun umumnya tidak disarankan untuk operasi rutin karena kompleksitas pengelolaan status.

  • Lingkungan khusus: Deploy ke lingkungan pengembangan atau staging untuk pengujian sebelum produksi.

Google Cloud Pertanyaan terkait API

Pertanyaan ini menjawab pertanyaan umum terkait interaksi Terraform dengan APIGoogle Cloud , termasuk API publik dan pribadi.

Dapatkah saya menggunakan Terraform untuk mengelola atau mengimpor API Google Cloud internal atau pribadi seperti dataproc-control.googleapis.com?

Tidak. API internal atau pribadi Google Cloud adalah bagian dari Infrastruktur Layanan terkelola Google dan tidak diekspos untuk pengelolaan, pengaktifan, atau impor langsung oleh pelanggan menggunakan Terraform. API ini ditangani secara otomatis oleh Google Cloud. Mencoba mengelolanya secara langsung dengan Terraform akan menghasilkan error.

Untuk penjelasan yang komprehensif, lihat panduan Memahami API dan Terraform. Google Cloud

Apa perbedaan antara mengaktifkan API dan mengimpor resource di Terraform?

  • Mengaktifkan API: Artinya, mengaktifkan layanan Google Cloud tertentu untuk project Anda, dan memberikan izin yang diperlukan kepada project tersebut untuk menggunakan layanan itu. Saat menggunakan Terraform di Google Cloud, hal ini biasanya dilakukan menggunakan resource google_project_service. Ini adalah prasyarat untuk membuat resource yang mengandalkan API tersebut.

  • Mengimpor resource: Tindakan ini mengacu pada membawa resource yang ada Google Cloud (misalnya, instance Compute Engine, bucket Cloud Storage) yang dibuat di luar Terraform ke dalam pengelolaan Terraform. Anda mengimpor resource, bukan API itu sendiri.

Untuk mengetahui detail selengkapnya, lihat Panduan Memahami API Google Cloud dan Terraform.

Bagaimana jika saya tidak mengelola atau mengimpor dataproc-control.googleapis.com secara eksplisit? Apakah hal ini akan memengaruhi kemampuan saya untuk menggunakan Dataproc?

Tidak, hal ini tidak akan memengaruhi kemampuan Anda untuk menggunakan Dataproc. dataproc-control.googleapis.com adalah API internal yang digunakan oleh Dataproc untuk kontrol operasionalnya sendiri. Fungsinya dikelola secara otomatis oleh Google Cloud, dan tidak memerlukan pengaktifan, impor, atau pengelolaan eksplisit oleh Anda menggunakan Terraform. Cluster dan tugas Dataproc Anda akan berfungsi dengan benar tanpa intervensi manual apa pun terkait API internal ini.

Bagaimana cara memecahkan masalah error 403 Permission Denied di Terraform?

Error 403 Permission Denied biasanya menunjukkan bahwa akun layanan atau kredensial pengguna yang digunakan oleh Terraform tidak memiliki izin IAM yang diperlukan untuk melakukan tindakan yang diminta pada resource Google Cloud tertentu. Untuk memecahkan masalah:

  1. Identifikasi resource dan metode API yang terpengaruh: Pesan error biasanya menentukan jenis resource dan panggilan API yang gagal.

  2. Periksa peran IAM: Pastikan akun utama (akun layanan atau pengguna) telah diberi peran IAM yang benar di tingkat yang sesuai (project, folder, organisasi, atau resource). Gunakan pemecah masalah IAM di konsol Google Cloud .

  3. Verifikasi pengaktifan layanan: Pastikan layanan Google Cloud API yang diperlukan diaktifkan untuk project Anda (misalnya, menggunakan gcloud services enable atau google_project_service).

  4. Tinjau kebijakan organisasi: Periksa apakah ada kebijakan organisasi yang membatasi tindakan.

Error kuota terjadi saat project Anda mencoba menggunakan lebih banyak resource atau membuat lebih banyak permintaan API daripada yang diizinkan oleh kuota saat ini. Untuk mengatasi hal ini:

  1. Identifikasi kuota tertentu: Pesan error biasanya akan menentukan API dan batas kuota yang terlampaui.

  2. Periksa kuota saat ini: Buka halaman Kuota di konsol Google Cloud untuk melihat penggunaan dan batas saat ini.

  3. Minta penambahan kuota: Jika memerlukan kapasitas yang lebih besar, Anda dapat meminta penambahan kuota langsung dari halaman Quotas.

  4. Pertimbangkan user_project_override: Untuk beberapa resource, jika project kredensial Anda berbeda dengan project resource, permintaan API mungkin ditagih berdasarkan kuota project kredensial. Menggunakan user_project_override (lihat Referensi Penyedia) terkadang dapat mengatasi masalah ini dengan memaksa kuota ditagih ke project resource.

Apa yang dimaksud dengan akun layanan default yang dikelola pengguna dan bagaimana cara mengelola izinnya dengan Terraform?

Layanan Google Cloud tertentu otomatis membuat akun layanan yang dikelola pengguna (sering disebut sebagai akun layanan default) saat project dibuat atau layanan diaktifkan. Aplikasi ini biasanya memiliki izin yang luas. Meskipun dikelola pengguna, VM ini dibuat oleh Google. Anda dapat mengelola izinnya menggunakan resource IAM seperti google_project_iam_member untuk mengubah perannya. Jika Anda ingin mengambil tindakan pada akun layanan default itu sendiri, seperti menghapus peran dengan hak istimewa tinggi default atau menghapus akun sepenuhnya, Anda dapat menggunakan resource google_project_default_service_accounts. Google juga memberikan panduan tentang jenis akun layanan default.

Apa yang dimaksud dengan akun layanan yang dikelola Google dan bagaimana cara mereferensikannya dalam konfigurasi Terraform?

Akun layanan yang dikelola Google dibuat dan dikelola sepenuhnya oleh Google untuk layanan tertentu. Akun ini berada di luar project pengguna dan tidak dapat dikonfigurasi secara langsung oleh pengguna dengan cara yang sama seperti akun layanan yang dikelola pengguna. Namun, Anda mungkin perlu memberikan izin IAM kepada mereka untuk berinteraksi dengan resource Anda. Anda dapat mereferensikan alamat email akun layanan yang dikelola Google untuk layanan tertentu menggunakan sumber data atau resource google_project_service_identity di Terraform, lalu menerapkan kebijakan IAM ke akun layanan tersebut. Misalnya, hal ini umum terjadi pada layanan seperti Cloud Build atau Cloud Composer.

Apa yang terjadi jika saya terraform destroy resource yang telah dikonfigurasi disable_on_destroy?

Argumen disable_on_destroy pada google_project_service dan beberapa resource lainnya (misalnya, google_storage_bucket) mengontrol apakah resource cloud dasar dinonaktifkan atau dihapus saat resource Terraform dihancurkan.

  • Jika disable_on_destroy adalah true (atau tidak disetel, karena sering kali merupakan default), terraform destroy akan mencoba menonaktifkan (untuk API) atau menghapus (untuk bucket) resource cloud yang sesuai.

  • Jika disable_on_destroy adalah false, terraform destroy akan menghapus resource dari status Terraform, tetapi membiarkan resource cloud yang sebenarnya (misalnya, API yang diaktifkan atau bucket) tetap utuh di project Google Cloud Anda. Opsi ini sering kali lebih disukai untuk layanan penting yang tidak boleh dinonaktifkan atau dihapus secara tidak sengaja.