Terraform dapat mengimpor infrastruktur yang ada. Dengan begitu, Anda dapat mengambil resource yang telah dibuat dengan cara lain dan membawanya ke pengelolaan Terraform.
Anda dapat mengimpor status untuk resource Cloud de Confiance by S3NS apa pun.
Terraform mendukung beberapa cara untuk mengimpor resource:
- Satu per satu menggunakan subperintah terraform import.
- Secara massal dengan menyertakan blok importdalam konfigurasi (memerlukan Terraform versi 1.5 atau yang lebih baru).
- Secara massal menggunakan Cloud de Confiance fitur yang memungkinkan Anda mengimpor resource setelah melakukan ekspor massal.
Mengimpor resource satu per satu
Perintah import menggunakan dua argumen—ID dan alamat resource.
Alamat resource 
adalah ID yang mengarah ke instance resource dalam konfigurasi.
ID adalah pengidentifikasi yang mengidentifikasi resource di Cloud de Confiance by S3NS
yang sedang diimpor. Format untuk ID berbeda berdasarkan jenis resource dan
didokumentasikan 
untuk setiap resource yang didukung oleh penyedia. Sebaiknya gunakan ID lengkap,
yang menyertakan project ID jika didukung.
- Identifikasi alamat resource yang akan diimpor. - resource "google_storage_bucket" "sample" { name = "my-bucket" project = "sample-project" location = "US" force_destroy = true }- Untuk contoh resource seperti bucket Cloud Storage yang ditentukan sebelumnya, ini adalah - google_storage_bucket.sample.
- Untuk mengidentifikasi format ID resource, lihat dokumentasi impor penyedia untuk resource - google_storage_bucket. Dalam hal ini, ID resource memiliki bentuk- project/namesehingga ID resource untuk contoh sebelumnya adalah- sample-project/my-bucket.
- Buat pernyataan - importmenggunakan alamat dan ID resource, seperti berikut:- terraform import google_storage_bucket.sample sample-project/my-bucket - Output: - terraform import google_storage_bucket.sample sample-project/my-bucket google_storage_bucket.sample: Importing from ID "sample-project/my-bucket"... google_storage_bucket.sample: Import prepared! Prepared google_storage_bucket for import google_storage_bucket.sample: Refreshing state... [id=sample-project/my-bucket] Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform. 
Mengimpor resource dalam modul
Modul mengenkapsulasi satu atau beberapa resource dalam konfigurasi Terraform. Karena proses impor memerlukan alamat resource, setiap resource dalam modul harus diimpor satu per satu.
- Identifikasi resource dalam modul yang akan diimpor. - module "gcs_bucket" { source = "terraform-google-modules/cloud-storage/google//modules/simple_bucket" version = "~> 3.4" name = "my-bucket" project_id = "sample-project" location = "us-east1" }- Untuk mengidentifikasi alamat resource, Anda dapat memeriksa konten modul. Atau, terapkan konfigurasi dan gunakan error yang ditampilkan oleh penyedia. Contoh: - terraform apply module.gcs_bucket.google_storage_bucket.bucket: Creating... ╷ │ Error: googleapi: Error 409: Your previous request to create the named bucket succeeded and you already own it., conflict │ │ with module.gcs_bucket.google_storage_bucket.bucket, - Dengan menggunakan log sebelumnya, Anda dapat mengidentifikasi alamat resource yang perlu diimpor sebagai - module.gcs_bucket.google_storage_bucket.bucket.
- Untuk mengidentifikasi format ID resource, lihat dokumentasi impor penyedia untuk resource - google_storage_bucket. Dalam hal ini, formatnya adalah- project/name. Namanya dapat diidentifikasi dari output rencana.- Output: - module.gcs_bucket.google_storage_bucket.bucket will be created + resource "google_storage_bucket" "bucket" { + name = "my-bucket" + project = "sample-project" ... }- Untuk contoh sebelumnya, ID resource-nya adalah - sample-project/my-bucket.
- Buat pernyataan - importmenggunakan alamat dan ID resource, seperti berikut:- terraform import module.gcs_bucket.google_storage_bucket.bucket sample-project/my-bucket - Output: - terraform import module.gcs_bucket.google_storage_bucket.bucket sample-project/my-bucket module.gcs_bucket.google_storage_bucket.bucket: Importing from ID "sample-project/my-bucket"... module.gcs_bucket.google_storage_bucket.bucket: Import prepared! Prepared google_storage_bucket for import module.gcs_bucket.google_storage_bucket.bucket: Refreshing state... [id=sample-project/my-bucket] Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform. 
Mengimpor resource secara massal dengan blok import berbasis konfigurasi
Terraform versi 1.5 memungkinkan Anda menambahkan blok import ke konfigurasi
Terraform. Hal ini memungkinkan operasi impor dilihat pratinjaunya selama operasi plan
dan dijalankan menggunakan operasi apply.
Anda juga dapat membuat kode secara otomatis untuk resource yang diimpor, alih-alih menulis kode secara manual.
Blok import menggunakan dua parameter:
- id: ID resource yang ditentukan penyedia dari resource cloud yang akan diimpor.- Untuk ID resource yang ditentukan penyedia yang diterima, lihat bagian Impor untuk resource dalam dokumentasi penyedia Google Hashicorp. Misalnya, - projects/{project}/global/networks/{name}adalah ID resource untuk jaringan VPC, seperti yang ditampilkan di halaman referensi- google_compute_network.
- to: Alamat resource Terraform yang akan dibuat. Biasanya dalam bentuk RESOURCE TYPE.NAME.
Berikut adalah contoh blok import untuk jaringan Virtual Private Cloud:
import {
  # Provider-defined resource ID of the cloud resource to be imported
  id = "projects/PROJECT_ID/global/networks/my-network"
  # Terraform resource address to be created
  to = google_compute_network.my_network
}
Jika Anda telah membuat blok resource secara manual, jalankan terraform plan untuk
melihat pratinjau operasi impor.
Jika Anda ingin Terraform membuat blok resource untuk Anda, gunakan flag -generate-config-out
untuk menentukan file yang akan membuat konfigurasi.
Contoh:
 terraform plan -generate-config-out=generated_resources.tf
Setelah meninjau kode yang dihasilkan, jalankan operasi terraform apply untuk
mengimpor konfigurasi ke status Terraform.
Mengimpor resource yang dibuat setelah melakukan ekspor massal
Dengan ekspor massal, Anda dapat mengekspor Cloud de Confiance resource sebagai konfigurasi Terraform dan mengimpor status Terraform untuk resource tersebut sehingga Anda dapat mengelola deployment di Terraform.
Sebelum memulai
- Siapkan Cloud Shell - Luncurkan Cloud Shell, dan tetapkan project Cloud de Confiance 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 Cloud de Confiance. - 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 
Membuat kode Terraform untuk resource Anda
- Jika Anda belum melakukannya, buat direktori tempat Anda ingin menghasilkan konfigurasi project. - mkdir OUTPUT_DIRECTORY 
- Jalankan perintah - gcloud beta resource-config bulk-exportuntuk menghasilkan seluruh konfigurasi project ke jalur- OUTPUT_DIRECTORY:- gcloud beta resource-config bulk-export \ --path=OUTPUT_DIRECTORY \ --project=PROJECT_ID \ --resource-format=terraform 
Membuat modul Terraform dari kode yang dibuat
Jalankan perintah gcloud beta resource-config terraform
generate-import,
yang mengarah ke konten dalam direktori output:
gcloud beta resource-config terraform generate-import OUTPUT_DIRECTORY
Perintah ini menghasilkan modul Terraform dan skrip impor:
- File - gcloud-export-modules.tf. File ini mengarah ke semua modul dari sub-resource. Isi file ini akan terlihat seperti ini:- provider "google" { project = "PROJECT_ID" } module "OUTPUT_DIRECTORY-projects-PROJECT_ID-ComputeFirewall" { source = "./OUTPUT_DIRECTORY/projects/PROJECT_ID/ComputeFirewall" } module "OUTPUT_DIRECTORY-projects-PROJECT_ID-ComputeBackendService-global" { source = "./OUTPUT_DIRECTORY/projects/PROJECT_ID/ComputeBackendService/global" }- ...dan seterusnya. 
- Sebuah skrip shell yang dapat dieksekusi memanggil - terraform_import_20220331-19-12-33.sh. Skrip shell berisi daftar perintah- terraform import:- #!/bin/sh # Terraform Import Script generated by gcloud cli terraform import module.OUTPUT_DIRECTORY-projects-PROJECT_ID-ComputeFirewall.google_compute_firewall.allow_ssh projects/PROJECT_ID/global/firewalls/allow-ssh - ...dan seterusnya. - Perintah - terraform importdigunakan untuk mengimpor modul yang dibuat oleh perintah- generate-importke dalam status Terraform.
Mengimpor modul ke dalam status Terraform
- Lakukan inisialisasi: - terraform init 
- Jalankan skrip: - ./terraform_import_20220331-19-12-33.sh - Output: - module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1: Importing from ID "projects/PROJECT_ID/zones/us-central1-a/instances/instance-1"... module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1: Import prepared! Prepared google_compute_instance for import module.examples-projects-PROJECT_ID-ComputeInstance-us-central1-a.google_compute_instance.instance_1: Refreshing state... [id=projects/PROJECT_ID/zones/us-central1-a/instances/instance-1] Import successful! The resources that were imported are shown above. These resources are now in your Terraform state and will henceforth be managed by Terraform.