Mengekspor resource Google Cloud Anda ke format Terraform

Anda telah men-deploy resource di Google Cloud, dan kini Anda perlu mengelola infrastruktur sebagai kode (IaC) dengan Terraform. Google menyediakan alat yang dapat Anda gunakan dalam membuat kode Terraform untuk resource dalam project, folder, atau organisasi.

Sebelum memulai

  • Siapkan Cloud Shell

    Luncurkan Cloud Shell, dan tetapkan project Google Cloud default tempat Anda ingin membuat kode Terraform untuk resource yang di-deploy.

    Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Variabel lingkungan akan diabaikan jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

  • Di Cloud Shell, instal antarmuka command line (CLI) untuk Config Connector.

    gcloud components install config-connector
    

    Dengan Config Connector, Anda dapat menggunakan alat ekspor massal Terraform Google Cloud.

    Jika Anda melihat ERROR: (gcloud.components.install) You cannot perform this action because the Google Cloud CLI component manager is disabled for this installation, jalankan perintah berikut:

    sudo apt-get install google-cloud-sdk-config-connector
    
  • Aktifkan Cloud Asset API.

    gcloud services enable cloudasset.googleapis.com
    
  • Buat akun layanan yang akan digunakan untuk ekspor ini:

    gcloud beta services identity create --service=cloudasset.googleapis.com
    
  • Pastikan Agen Layanan Aset Cloud (gcp-sa-cloudasset.iam.gserviceaccount.com) memiliki peran roles/servicenetworking.serviceAgent:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
      --role=roles/servicenetworking.serviceAgent
    
  • Pastikan Agen Layanan Aset Cloud (gcp-sa-cloudasset.iam.gserviceaccount.com) memiliki peran roles/storage.objectAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudasset.iam.gserviceaccount.com \
      --role=roles/storage.objectAdmin
    

Batasan

Beberapa jenis resource tidak didukung untuk diekspor ke format Terraform, meskipun didukung oleh penyedia Google Terraform. Untuk mengetahui daftar jenis resource yang didukung untuk ekspor ke format Terraform, jalankan perintah gcloud beta resource-config list-resource-types.

Mengekspor seluruh konfigurasi project ke kode Terraform HCL

Perintah gcloud beta resource-config bulk-export --resource-format=terraform mengekspor resource yang dikonfigurasi dalam project, folder, atau organisasi dan mencetaknya ke layar dalam format kode HCL.

gcloud beta resource-config bulk-export \
  --project=PROJECT_ID \
  --resource-format=terraform

Menulis output ke struktur direktori

  1. Jika Anda belum melakukannya, buat direktori tempat Anda ingin menghasilkan konfigurasi project:

    mkdir OUTPUT_DIRECTORY
    
  2. Ekspor seluruh konfigurasi project ke direktori:

    gcloud beta resource-config bulk-export \
     --path=OUTPUT_DIRECTORY \
     --project=PROJECT_ID \
     --resource-format=terraform
    

    Flag --path menentukan lokasi untuk menghasilkan kode HCL.

Setelah menjalankan perintah, kode HCL untuk setiap resource akan dihasilkan ke file .tf terpisah dalam struktur direktori berikut:

OUTPUT_DIRECTORY/projects/PROJECT_ID/RESOURCE_TYPE

Menulis output ke satu file

Jika tidak ingin mencetak output ke layar atau membuat file .tf terpisah, Anda dapat menulis semua output ke satu file, seperti yang ditunjukkan dalam contoh berikut:

gcloud beta resource-config bulk-export \
  --resource-format=terraform \
  --project=PROJECT_ID \
  >> gcp_resources.tf

Memfilter output

Filter output perintah ekspor massal dengan menentukan jenis resource.

Membuat daftar jenis resource yang didukung untuk difilter

Untuk daftar jenis resource yang didukung untuk ekspor ke format Terraform, jalankan perintah gcloud beta resource-config list-resource-types:

gcloud beta resource-config list-resource-types

Anda juga dapat menulis output ke file:

gcloud beta resource-config list-resource-types >> strings.txt

Dalam output, jenis resource untuk VM Compute Engine tercantum sebagai:

KRM KIND: ComputeInstance

Anda dapat mengabaikan awalan KRM KIND:.

Mengekspor satu jenis resource

Gunakan string, seperti ComputeInstance, untuk mengekspor jenis resource tertentu untuk project Anda dalam format kode HCL:

gcloud beta resource-config bulk-export \
  --resource-types=RESOURCE_TYPE \
  --project=PROJECT_ID \
  --resource-format=terraform

Flag --resource-types menentukan jenis resource yang akan dihasilkan.

Mengekspor beberapa jenis resource

Ekspor instance VM dan aturan firewall dalam format kode HCL:

gcloud beta resource-config bulk-export \
  --resource-types=ComputeFirewall,ComputeInstance \
  --project=PROJECT_ID \
  --resource-format=terraform

Menggunakan file untuk menentukan jenis resource yang akan diekspor

  1. Buat direktori bernama tf-output.

    cd && mkdir tf-output && cd tf-output
    
  2. Buat file bernama types.txt, lalu tambahkan daftar jenis resource. Misalnya:

    ComputeBackendBucket
    ComputeBackendService
    ComputeForwardingRule
    
  3. Jalankan perintah gcloud beta resource-config bulk-export dengan flag --resource-types-file:

    gcloud beta resource-config bulk-export \
     --resource-types-file=types.txt \
     --path=tf-output \
     --project=PROJECT_ID \
     --resource-format=terraform
    

Jika project tidak memuat salah satu jenis resource tertentu, perintah akan berhasil, tetapi tidak ada yang dihasilkan untuk jenis resource tersebut.

Pemecahan masalah

Jika Anda melihat error berikut:

"Izin ditolak saat ekspor. Pastikan API Inventaris Aset Cloud diaktifkan."

Pastikan Anda telah mengikuti petunjuk di bagian Sebelum memulai.

Langkah berikutnya