All Products
Search
Document Center

Terraform:Mengelola resource yang ada

Last Updated:Sep 12, 2026

Pelajari cara mengimpor resource cloud yang sudah ada ke Terraform menggunakan perintah import, blok import, atau Terraformer.

Latar Belakang

Terraform mengotomatiskan manajemen resource cloud melalui Infrastructure as Code (IaC). Resource baru dapat dibuat langsung dengan kode Terraform, tetapi resource yang sudah ada atau yang dibuat di luar Terraform memerlukan proses impor. Proses ini menghasilkan kode resource dan file state sehingga memungkinkan pengelolaan berkelanjutan melalui Terraform.

Terraform membuat, mengubah, dan menghapus resource berdasarkan definisi kode resource. Dengan kemampuan impor, Anda dapat membawa resource cloud yang mengalami deviasi di luar sistem manajemen Terraform ke dalam pengelolaan terpadu.

Skenario

Impor resource cocok digunakan dalam berbagai skenario manajemen dan penerapan resource:

  1. Mengelola resource yang sudah ada: Alihkan dengan cepat resource yang dikelola di luar Terraform—misalnya melalui Konsol, API, command-line interface (CLI), atau alat manajemen lainnya—ke dalam pengelolaan Terraform.

  2. Menyelesaikan deviasi resource: Ketika resource yang dikelola Terraform dimodifikasi di luar Terraform, statusnya menyimpang dari konfigurasi. Impor ulang resource tersebut untuk menyinkronkan statusnya.

  3. Refaktor kode: Pecah templat yang mendefinisikan semua resource Anda menjadi file-file yang lebih kecil guna mengurangi kompleksitas manajemen templat dan state seiring bertambahnya jumlah resource.

  4. Menyebarkan resource dengan cepat: Replikasi dan terapkan arsitektur resource yang sudah ada ke wilayah atau akun yang berbeda.

  5. Memulihkan resource dengan cepat: Backup arsitektur resource Anda secara berkala. Jika terjadi masalah stabilitas, Anda dapat menggunakan kode backup untuk memulihkan kembali arsitektur tersebut dengan cepat.

Prosedur

Terdapat tiga metode untuk mengimpor resource:

  1. Perintah import: Mengimpor satu resource secara cepat dengan menjalankan perintah native Terraform terraform import.

  2. Blok import: Mengimpor satu atau beberapa resource secara cepat dengan menulis blok import Terraform dan menjalankan terraform plan serta terraform apply.

  3. Tool Terraformer: Memfilter dan mengkueri resource secara batch dengan menjalankan perintah Terraformer open-source, serta mencapai impor otomatis.

Pilih metode yang paling sesuai dengan skenario Anda.

Metode impor

Kelebihan

Kekurangan

Skema Penggunaan

The import command

  • Sederhana dan langsung. Menjalankan perintah native Terraform.

  • Otomatis menghasilkan file state.

  • Anda harus mengambil ID resource secara manual, yang rentan terhadap kesalahan.

  • Tidak efisien untuk banyak resource karena hanya mendukung impor satu resource dalam satu waktu.

  • Anda harus menulis kode resource secara manual.

Manage existing resources

Resolve resource drift

Refactor code

The import block

  • Mudah digunakan. Menjalankan perintah native Terraform.

  • Mendukung impor batch untuk beberapa resource.

  • Memungkinkan Anda menulis kode untuk logika impor yang kompleks.

  • Memerlukan penulisan kode impor, yang memiliki kurva pembelajaran.

  • Tidak dapat menghasilkan dependensi antar beberapa resource.

  • Dapat memiliki biaya konfigurasi tinggi untuk impor batch.

Manage existing resources

Resolve resource drift

Refactor code

Quickly deploy resources

Terraformer

  • Otomatis memfilter dan memilih kumpulan resource untuk diimpor.

  • Otomatis menghasilkan kode resource Terraform.

  • Otomatis menghasilkan dependensi antar resource.

  • Anda harus mengunduh dan menginstal Terraformer.

  • Bukan perintah native Terraform dan memiliki biaya pembelajaran serta konfigurasi.

Manage existing resources

Resolve resource drift

Refactor code

Quickly deploy resources

Quickly recover resources

Perintah import Terraform

Perintah terraform import mengimpor resource dengan menentukan alamat resource dan ID resource, serta menerima beberapa parameter konfigurasi.

Prasyarat

  • Siapkan lingkungan runtime Terraform menggunakan salah satu metode berikut:

    • Buat resource dengan Terraform: Cloud Shell di Alibaba Cloud telah dilengkapi komponen Terraform dan kredensial yang telah dikonfigurasi, sehingga Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario yang membutuhkan akses Terraform yang murah, cepat, dan praktis.

    • Instal dan konfigurasi Terraform: Cocok untuk lingkungan jaringan terbatas atau pengaturan pengembangan kustom.

  • Berikan izin read-only untuk resource terkait kepada akun aktif.

Penggunaan

Format perintahnya adalah terraform import [options] <address> <id>.

  • Alamat resource: Formatnya adalah <resource_type>.<resource_name>. Alamat ini mencakup tipe dan nama resource, serta berfungsi sebagai pengenal infrastruktur dalam file state.

    • Sebagai contoh, alamat resource untuk VPC pada cuplikan konfigurasi berikut adalah alicloud_vpc.default.

    resource "alicloud_vpc" "default" {
      vpc_name   = "tf-example"
      cidr_block = "10.0.0.0/8"
    }
  • ID resource: ID resource secara unik mengidentifikasi resource untuk impor. Format ID bervariasi tergantung tipe resource — lihat Dokumentasi Provider.

    • Sebagai contoh, ID resource untuk alicloud_security_group adalah ID security group. ID resource untuk alicloud_security_group_rule mengikuti format tertentu.

    Atribut berikut diekspor:
    
      • id - ID resource di terraform untuk Security Group Rule.
    
    CATATAN: jika cidr_ip diatur, format id adalah <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<cidr_ip>:<policy>:<priority> .
    
    CATATAN: jika ipv6_cidr_ip diatur, format id adalah <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<ipv6_cidr_ip>:<policy>:<priority> .
    
    CATATAN: jika source_security_group_id diatur, format id adalah <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<source_security_group_id>:<policy>:<priority> .
    
    CATATAN: jika prefix_list_id diatur, format id adalah <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<prefix_list_id>:<policy>:<priority> .
  • Opsi konfigurasi: Perintah import Terraform menerima opsi tambahan yang didokumentasikan dalam petunjuk penggunaan resmi.

Contoh

Contoh berikut mengimpor bucket Object Storage Service (OSS):

  1. Buat direktori kerja. Di dalam direktori tersebut, buat file konfigurasi bernama main.tf dan definisikan alamat resource yang akan diimpor.

    resource "alicloud_oss_bucket" "default"{ }
  2. Tentukan ID resource. ID resource untuk alicloud_oss_bucket adalah nama bucket.

  3. Inisialisasi lingkungan runtime.

    terraform init
  4. Jalankan perintah impor.

    # Ganti ini dengan nama bucket Anda
    terraform import alicloud_oss_bucket.default oss-bucket-import

    Output berikut menunjukkan impor berhasil:

    alicloud_oss_bucket.default: Importing from ID "oss-bucket-import"...
    alicloud_oss_bucket.default: Import prepared!
      Prepared alicloud_oss_bucket for import
    alicloud_oss_bucket.default: Refreshing state... [id=oss-bucket-import]
    
    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.
    
  5. Setelah impor, properti resource tidak ditambahkan ke templat Anda secara otomatis, sehingga Anda tetap perlu mengisinya secara manual. Jalankan terraform show untuk melihat semua properti resource yang diimpor:

    # alicloud_oss_bucket.default:
    resource "alicloud_oss_bucket" "default" {
        acl               = "private"
        bucket            = "oss-bucket-import"
        creation_date     = "2024-11-22"
        extranet_endpoint = "oss-cn-beijing.aliyuncs.com"
        id                = "oss-bucket-import"
        intranet_endpoint = "oss-cn-beijing-internal.aliyuncs.com"
        location          = "oss-cn-beijing"
        owner             = "1511928*****"
        redundancy_type   = "ZRS"
        resource_group_id = "rg-acf***"
        storage_class     = "Standard"
        tags              = {}
    
        access_monitor {
            status = "Disabled"
        }
    }

    Tambahkan informasi ini ke templat Anda, lalu hapus properti read-only seperti yang dijelaskan dalam alicloud_oss_bucket. Setelah itu, Anda dapat menggunakan Terraform untuk mengelola resource Anda.

Blok import Terraform

Terraform v1.5.0 dan versi setelahnya mendukung impor resource menggunakan blok `import`. Tulis blok `import` dalam file konfigurasi Anda untuk menentukan ID dan alamat resource, lalu jalankan perintah terraform plan dan terraform apply untuk melihat pratinjau dan menjalankan impor.

Untuk informasi selengkapnya, lihat dokumentasi resmi.

Prasyarat

  • Siapkan lingkungan runtime Terraform menggunakan salah satu metode berikut:

    Catatan

    Perintah ini memerlukan Terraform v1.5.0 atau versi setelahnya. Saat mengonfigurasi lingkungan, beralihlah ke versi yang tersedia.

    • Buat resource dengan Terraform: Cloud Shell di Alibaba Cloud telah dilengkapi komponen Terraform dan kredensial yang telah dikonfigurasi, sehingga Anda dapat langsung menjalankan perintah Terraform di Cloud Shell. Metode ini cocok untuk skenario yang membutuhkan akses Terraform yang murah, cepat, dan praktis.

    • Instal dan konfigurasi Terraform: Cocok untuk lingkungan jaringan terbatas atau pengaturan pengembangan kustom.

  • Berikan izin read-only untuk resource terkait kepada akun aktif.

Penggunaan

Sintaksnya sebagai berikut:

import {
  to = alicloud_oss_bucket.example
  id = "oss-bucket-import"
}

# Opsional
# resource "alicloud_oss_bucket" "example" {
#   # (argumen resource lainnya...)
# }

Blok import memiliki dua keunggulan dibanding perintah import:

  1. Otomatis menghasilkan file templat. Anda dapat mengimpor resource ke alamat resource yang sudah didefinisikan dalam templat Anda, atau gunakan parameter -generate-config-out untuk menghasilkannya secara otomatis, sehingga menghilangkan upaya manual untuk mengisi templat.

  2. Impor batch. Gunakan for_each dalam blok `import` untuk mengimpor beberapa resource. Resource dengan atribut serupa dapat berbagi alamat resource yang sama, dibedakan berdasarkan indeks.

Catatan

Perhatikan bahwa kedua fitur ini tidak dapat digabungkan. CLI Terraform saat ini tidak mendukung pembuatan konfigurasi otomatis untuk resource yang menggunakan for_each.

oss terraform plan -out=tf.tfplan -generate-config-out=generate.tf

Error: Cannot generate configuration

  on main.tf line 10, in import:
  10:   to = alicloud_oss_bucket.this[each.key]

The given import block is not compatible with config generation. The -generate-config-out option cannot be
used with import blocks which use for_each, or resources which use for_each or count.

Contoh

Contoh berikut mengimpor bucket OSS menggunakan blok import:

  1. Buat direktori kerja dengan file main.tf. Tulis blok import untuk menentukan ID dan alamat resource.

    import {
      to = alicloud_oss_bucket.default
      id = "oss-bucket-import"
    }
  2. Inisialisasi lingkungan runtime.

    terraform init
  3. Jalankan terraform plan untuk melihat pratinjau impor. Gunakan -generate-config-out untuk menghasilkan templat secara otomatis.

    terraform plan -generate-config-out=generated.tf

    Informasi berikut ditampilkan:

    alicloud_oss_bucket.default: Preparing import... [id=oss-bucket-import]
    alicloud_oss_bucket.default: Refreshing state... [id=oss-bucket-import]
    
    Terraform will perform the following actions:
    
      # alicloud_oss_bucket.default will be imported
      # (config will be generated)
        resource "alicloud_oss_bucket" "default" {
            acl               = "private"
            bucket            = "oss-bucket-import"
            creation_date     = "2024-11-22"
            extranet_endpoint = "oss-cn-beijing.aliyuncs.com"
            id                = "oss-bucket-import"
            intranet_endpoint = "oss-cn-beijing-internal.aliyuncs.com"
            location          = "oss-cn-beijing"
            owner             = "15119****"
            redundancy_type   = "ZRS"
            resource_group_id = "rg-acfmzaq*****"
            storage_class     = "Standard"
            tags              = {}
    
            access_monitor {
                status = "Disabled"
            }
        }
    
    Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
    ╷
    │ Warning: Config generation is experimental
    │ 
    │ Generating configuration during import is currently experimental, and the generated configuration
    │ format may change in future versions.
    ╵
    
    ─────────────────────────────────────────────────────────────────────────────────────────────────────
    
    Terraform has generated configuration and written it to generated.tf. Please review the configuration
    and edit it as necessary before adding it to version control.
    
    Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly
    these actions if you run "terraform apply" now.
  4. Setelah mengonfirmasi rencana, jalankan terraform apply untuk menjalankan impor.

    terraform apply 

    Masukkan yes saat diminta. Output berikut menunjukkan impor berhasil:

    ......
    
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    alicloud_oss_bucket.default: Importing... [id=oss-bucket-import]
    alicloud_oss_bucket.default: Import complete [id=oss-bucket-import]
    
    Apply complete! Resources: 1 imported, 0 added, 0 changed, 0 destroyed.

Tool Terraformer

Selain kemampuan native Terraform, Anda dapat menggunakan alat open-source Terraformer untuk mengimpor resource dari akun Anda ke templat Terraform secara batch. Terraformer open-source hanya mendukung sebagian subset resource dari masing-masing penyedia cloud, dan setiap penyedia tetap memerlukan pengembangan sekunder agar selaras dengan resource yang didukung oleh Provider-nya sendiri.

Anda dapat menggunakan tool Terraformer dengan dua cara:

  1. Terraformer open-source: Versi asli, mendukung impor resource dari berbagai penyedia cloud.

  2. Terraformer Alibaba Cloud: Versi yang ditingkatkan, khusus mendukung resource Alibaba Cloud.

Fitur

Open-source Terraformer

Alibaba Cloud Terraformer

Lihat daftar produk yang didukung untuk impor

❌

✅

Lihat daftar tipe resource yang didukung untuk impor

❌

✅

Filter berdasarkan wilayah

✅

✅

Filter dengan mengecualikan wilayah tertentu

❌

❌

Filter berdasarkan zona

❌

✅

Filter dengan mengecualikan zona tertentu

❌

❌

Filter berdasarkan produk

❌

✅

Filter dengan mengecualikan produk tertentu

❌

✅

Filter berdasarkan tipe resource

✅

✅

Filter dengan mengecualikan tipe resource tertentu

✅

✅

Filter berdasarkan daftar ID resource

✅

✅

Filter dengan mengecualikan daftar ID resource tertentu

❌

❌

Filter berdasarkan nama resource

✅

✅

Filter berdasarkan kelompok sumber daya

✅

✅

Filter berdasarkan tag

✅

✅

Otomatis membuat dependensi resource

❌

✅

Otomatis menghasilkan variabel

❌

✅

Otomatis menghasilkan output

❌

❌

Terraformer open-source

Prasyarat
  1. Unduh dan instal Terraformer

    Paket rilis Terraformer mencakup paket untuk semua provider dan paket terpisah untuk masing-masing provider. Unduh paket yang sesuai dengan kebutuhan Anda. Contoh berikut menunjukkan metode unduh untuk pengguna Linux dan macOS, dan metode tambahan dijelaskan dalam panduan Instalasi.

    • Pengguna Linux

    export PROVIDER=all
    curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64"
    chmod +x terraformer-${PROVIDER}-linux-amd64
    sudo mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformer
    • Pengguna macOS

    export PROVIDER=all
    curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-darwin-amd64"
    chmod +x terraformer-${PROVIDER}-darwin-amd64
    sudo mv terraformer-${PROVIDER}-darwin-amd64 /usr/local/bin/terraformer
  2. Dependencies

    1. Berikan izin read-only untuk resource terkait kepada akun saat ini.

    2. Instal Terraform

      Catatan

      Langkah ini dapat dilewati jika Anda menjalankan perintah di Cloud Shell.

      Panduan memulai Instal dan konfigurasi Terraform menjelaskan langkah-langkah detailnya.

    3. Unduh provider terkait. Anda dapat mengonfigurasi provider dengan salah satu dari dua cara berikut:

      • Inisialisasi provider di direktori tempat Anda menjalankan perintah Terraformer.

      • Unduh provider ke path ~/.terraform.d/plugins/.

    4. Konfigurasi kredensial akses. Terraformer saat ini hanya mendukung autentikasi dengan membaca profil lokal. Secara default, kredensial pertama dalam profil digunakan untuk impor. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses Alibaba Cloud, lihat Konfigurasi dan kelola kredensial.

Penggunaan

Contoh berikut menggunakan terraformer-all-darwin-amd64 v0.8.24.

Terraformer mendukung empat perintah: help, import, plan, dan version.

  1. help: Menampilkan detail tentang suatu perintah.

    ➜  ~ terraformer-all-darwin-arm64 help
    Usage:
        [command]
    
    Available Commands:
      help        Help about any command
      import      Import current state to Terraform configuration
      plan        Plan to import current state to Terraform configuration
      version     Print the version number of Terraformer
    
    Flags:
      -h, --help    help for this command
    
    Use " [command] --help" for more information about a command.
  2. version: Menampilkan nomor versi saat ini.

    ~ terraformer-all-darwin-arm64 version
    Terraformer v0.8.24
  3. import: Mengimpor resource untuk provider tertentu.

    ➜  ~ terraformer-all-darwin-arm64 import
    Import current state to Terraform configuration
    
    Usage:
      import [command]
    
    Available Commands:
      alicloud        Import current State to terraform configuration from alicloud
      auth0           Import current state to Terraform configuration from Auth0
      aws             Import current state to Terraform configuration from AWS
      azure           Import current state to Terraform configuration from Azure
      azuread         Import current state to Terraform configuration from Azure Active Directory
      azuredevops     Import current state to Terraform configuration from Azure DevOps
      cloudflare      Import current state to Terraform configuration from Cloudflare
      commercetools   Import current state to Terraform configuration from Commercetools
      datadog         Import current state to Terraform configuration from Datadog
      digitalocean    Import current state to Terraform configuration from DigitalOcean
      fastly          Import current state to Terraform configuration from Fastly
      github          Import current state to Terraform configuration from GitHub
      gitlab          Import current state to Terraform configuration from GitLab
      gmailfilter     Import current state to Terraform configuration from Gmail
      google          Import current state to Terraform configuration from Google Cloud
      grafana         Import current state to Terraform configuration from Grafana
      heroku          Import current state to Terraform configuration from Heroku
      honeycombio     Import current state to Terraform configuration from Honeycomb.io
      ibm             Import current state to Terraform configuration from ibm
      ionoscloud      Import current state to Terraform configuration from IONOS Cloud
      keycloak        Import current state to Terraform configuration from Keycloak
      kubernetes      Import current state to Terraform configuration from Kubernetes
      launchdarkly    Import current state to Terraform configuration from LaunchDarkly
      linode          Import current state to Terraform configuration from Linode
      logzio          Import current state to Terraform configuration from Logz.io
      mackerel        Import current state to Terraform configuration from Mackerel
      metal           Import current state to Terraform configuration from Equinix Metal
      mikrotik        Import current state to Terraform configuration from RouterOS
      myrasec         Import current state to Terraform configuration from Myra Security
      newrelic        Import current state to Terraform configuration from New Relic
      ns1             Import current state to Terraform configuration from NS1
      octopusdeploy   Import current state to Terraform configuration from Octopus Deploy
      okta            Import current State to terraform configuration from okta
      opal            Import current state to Terraform configuration from opal.dev
      openstack       Import current state to Terraform configuration from OpenStack
      opsgenie        Import current state to Terraform configuration from Opsgenie
      pagerduty       Import current state to Terraform configuration from PagerDuty
      panos           Import current state to Terraform configuration from a PAN-OS
      plan            Import planned state to Terraform configuration
      rabbitmq        Import current state to Terraform configuration from RabbitMQ
      tencentcloud    Import current state to Terraform configuration from Tencent Cloud
      vault           Import current state to Terraform configuration from Vault
      vultr           Import current state to Terraform configuration from Vultr
      xenorchestra    Import current state to Terraform configuration from Xen Orchestra
      yandex          Import current state to Terraform configuration from Yandex Cloud
    
    Flags:
      -h, --help   help for import
    
    Additional help topics:
      import no-sort        Don't sort resources
    
    Use " import [command] --help" for more information about a command.
  4. plan: Melihat pratinjau resource yang akan diimpor untuk provider tertentu.

Contoh

Contoh berikut mengimpor semua VPC Alibaba Cloud di wilayah China (Hangzhou).

  1. Buat direktori untuk menyimpan templat dan file state yang diimpor.

    mkdir example && cd example
  2. Jalankan perintah berikut:

    terraformer-all-darwin-arm64 import alicloud --resources=vpc --regions=cn-hangzhou --path-pattern={output} --path-output=./     
    • --resources: Menentukan kumpulan resource yang akan diimpor.

    • --regions: Menentukan wilayah tempat resource berada.

    • --path-pattern: Menentukan pola struktur direktori yang dihasilkan.

    • --path-output: Menentukan path output untuk file yang dihasilkan.

  3. File templat yang dihasilkan sebagai berikut. Secara default, informasi wilayah ditambahkan ke path direktori. Untuk menggabungkan semua templat resource ke dalam satu file, gunakan parameter --compact, yang mengeluarkan semua resource ke resources.tf.

    └── cn-hangzhou
        ├── outputs.tf
        ├── provider.tf
        ├── terraform.tfstate
        ├── variables.tf
        ├── vpc.tf
        └── vswitch.tf
    
    2 directories, 6 files
  4. Untuk Terraform >=0.13.0, jalankan perintah berikut untuk memperbarui file state agar kompatibel dengan versi tersebut.

    terraform state replace-provider -auto-approve "registry.terraform.io/-/alicloud" "aliyun/alicloud"

Alibaba Cloud Terraformer - aliterraformer (Direkomendasikan)

aliterraformer memperluas Terraformer open-source dengan cakupan resource yang lebih luas, konfigurasi kredensial yang ditingkatkan, dan dimensi filter impor tambahan.

Prasyarat
  1. Unduh dan instal

    Unduh aliterraformer dari OSS Alibaba Cloud:

    macOS

    # amd64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_darwin_amd64.zip
    
    # arm64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_darwin_arm64.zip

    Linux

    # amd64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_amd64.zip
    
    # arm
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_arm.zip
    
    # arm64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_arm64.zip

    Windows

    # amd64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_windows_amd64.zip
    
    # 386
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_windows_386.zip

    Sebagai contoh, pada macOS, ekstrak file setelah mengunduh:

    unzip aliterraformer_darwin_amd64.zip
    chmod +x aliterraformer
    sudo mv aliterraformer /usr/local/bin/aliterraformer
  2. Dependensi

    Seperti Terraformer open-source, Anda memerlukan binari terraform dan terraform-provider-alicloud serta kredensial akses yang telah dikonfigurasi.

    1. Berikan izin read-only untuk resource terkait kepada akun Resource Access Management (RAM).

    2. Instal Terraform

      Panduan memulai Instal dan konfigurasi Terraform menjelaskan langkah-langkah detailnya. Langkah ini dapat dilewati jika Anda menjalankan perintah di Cloud Shell.

    3. Unduh terraform-provider-alicloud

      Anda dapat menentukan versi provider untuk impor. Struktur direktori cache setelah menjalankan init berbeda antara versi sebelum v0.13.0 dan v0.13.0 atau setelahnya. Path baca berikut berlaku untuk v0.13.0 dan setelahnya:

      # 1. Atur menggunakan variabel lingkungan TF_DATA_TFER_DIR
      <$TF_DATA_TFER_DIR>/providers/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
      
      # 2. Atur di direktori tersembunyi direktori kerja saat ini
      .terraform/providers/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
      
      # 3. Atur di direktori tersembunyi direktori root pengguna
      <HOME>/.terraform.d/plugins/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
    4. Konfigurasi kredensial akses

      Selain menggunakan profil, Anda dapat mengatur kredensial akses di aliterraformer menggunakan variabel lingkungan dan parameter perintah:

      # 1. Menggunakan variabel lingkungan ALICLOUD_ACCESS_KEY dan ALICLOUD_SECRET_KEY
      $ export ALICLOUD_ACCESS_KEY=xxxx
      $ export ALICLOUD_SECRET_KEY=xxxxx
      
      # 2. Dengan meneruskan parameter perintah --access-key dan --secret-key
      $ aliterraformer import alicloud --access-key=xxxx --secret-key=xxx ...
      
      # 3. Dengan mengatur dan meneruskan AK melalui mekanisme profil
      $ aliterraformer import alicloud --profile=default ...
Penggunaan

aliterraformer saat ini mendukung lima perintah: help, version, products, resources, import. Perintah products, resources merupakan tambahan terhadap Terraformer open-source.

  1. help: Lihat detail tentang perintah yang didukung.

    aliterraformer help
    → ~ aliterraformer help
    Usage:
        [command]
    
    Available Commands:
      help        Help about any command
      import      Import current state to Terraform configuration
      products    List all supported products
      resources   List resources for a given product
      version     Print the version number of Terraformer
    
    Flags:
      -h, --help   help for this command
    
    Use " [command] --help" for more information about a command.
  2. version: Lihat versi Terraformer saat ini.

    aliterraformer version
  3. products: Daftar produk yang didukung untuk impor pada versi saat ini.

    aliterraformer products
    ➜  ~ aliterraformer products
    
    Supported products:
    
        ACK                         Container_Service_for_Kubernetes(ACK)
        ADB                         AnalyticDB_for_MySQL(ADB)
        ALB                         Application_Load_Balancer(ALB)
        ActionTrail                 Actiontrail
        AliKafka                    AliKafka
        Alidns                      Alidns
        Aligreen                    Aligreen
        Amqp                        RabbitMQ(AMQP)
        ApiGateway                  Api_Gateway
        AutoScaling                 Auto_Scaling
        BPStudio                    Cloud_Architect_Design_Tools(BPStudio)
        Bastionhost                 Bastion_Host
        CBWP                        EIP_Bandwidth_Plan(CBWP)
        CDN                         CDN
        CEN                         Cloud_Enterprise_Network(CEN)
        ClickHouse                  Click_House
        CloudMonitorService         Cloud_Monitor_Service
        CloudStorageGateway         Cloud_Storage_Gateway
        Cloudauth                   Cloudauth
        Config                      Cloud_Config(Config)
        DBFS                        Database_File_System(DBFS)
        DBS                         Database_Backup(DBS)
        DCDN                        DCDN
        DFS                         Apsara_File_Storage_for_HDFS(DFS)
        DMSEnterprise               DMS_Enterprise
        DTS                         Data_Transmission_Service(DTS)
  4. resources: Daftar tipe resource yang dapat diimpor untuk suatu produk. Gunakan -p untuk menentukan produk.

    aliterraformer resources -p <productName>
    ~ aliterraformer resources -p VPC
    
    Supported resources in product [VPC]:
    
        route_table
        vpc
        vpc_dhcp_options_set
        vpc_flow_log
        vpc_ha_vip
        vpc_ipv4_cidr_block
        vpc_ipv4_gateway
        vpc_ipv6_egress_rule
        vpc_ipv6_gateway
        vpc_ipv6_internet_bandwidth
        vpc_network_acl_attachment
        vpc_prefix_list
        vpc_public_ip_address_pool
        vpc_public_ip_address_pool_cidr_block
        vpc_traffic_mirror_filter
        vpc_traffic_mirror_session
        vswitch
    ~ aliterraformer resources -p ACK
    
    Supported resources in product [ACK]:
    
        cs_edge_kubernetes
        cs_kubernetes
        cs_kubernetes_addon
        cs_kubernetes_node_pool
        cs_kubernetes_permissions
        cs_managed_kubernetes
        cs_serverless_kubernetes
  5. import: Melakukan impor sebenarnya. Tentukan alicloud untuk resource Alibaba Cloud. Jalankan perintah berikut untuk melihat parameter yang didukung untuk impor resource Alibaba Cloud:

    aliterraformer import alicloud -h
    ➜  ~ aliterraformer import alicloud -h
    Import current State to terraform configuration from alicloud
    
    Usage:
        import alicloud [flags]
        import alicloud [command]
    
    Available Commands:
      list        List supported resources for alicloud provider
    
    Flags:
            --access-key string           Alibaba Cloud Access Key
      -b, --bucket string               gs://terraform-state
      -C, --compact
      -c, --connect                      (default true)
      -x, --excludes strings            vpc,subnet,nacl
            --excludes-products strings   ECS,VPC (Specify the products to be excluded.)
      -f, --filter strings              slb=id1:id2:id4
      -h, --help                        help for alicloud
            --modularize                  Whether output the terraform configuration to a module
      -O, --output string               output format hcl or json (default "hcl")
            --output-variables string     r1:attr1,attr2;r2:attr1,attr2,attr3
      -o, --path-output string           (default "generated")
      -p, --path-pattern string         {output}/{provider}/ (default "{output}/{provider}/{service}/")
            --products strings            ECS,VPC (You can input 'ALL' to import all products; Once specified, the flag <resources> will be ignored.)
            --profile string              prod (default "default")
            --provider-version string     Terraform Provider Alibaba Cloud Version
            --regions strings             cn-hangzhou
      -r, --resources strings           vpc,subnet,nacl (This flag will be ignored if the flag <products> is specified.)
      -n, --retry-number int            number of retries to perform when refresh fails (default 5)
      -m, --retry-sleep-ms int          time in ms to sleep between retries (default 300)
            --secret-key string           Alibaba Cloud Secret Key
            --security-token string       Alibaba Cloud Security Token
      -s, --state string                local or bucket (default "local")
            --statefile string            terraform.tfstate (default "terraform.tfstate")
            --terraform-version string    Terraform Version (default "0.12.29")
      -v, --verbose
            --zone string                 availability zone, like cn-hangzhou-h
    
    Use " import alicloud [command] --help" for more information about a command.

    Saat menjalankan impor, pertama-tama tentukan kumpulan resource yang akan diimpor. Kemudian, sesuai kebutuhan, gunakan filter untuk memfilter resource dan gunakan output-variables untuk mengekstrak properti sebagai parameter.

    • Buat kumpulan resource:

      Perintah ini menyediakan empat flag untuk menentukan resource yang akan diimpor: <--products>, <--resources>, <--excludes-products>, dan <--excludes>. Anda dapat mengombinasikannya untuk dengan mudah membuat kumpulan resource. Contoh penggunaannya sebagai berikut:

      • Impor resource tertentu

        # Impor VPC, vSwitch, dan instans ECS
        aliterraformer import alicloud -r=vpc,vswitch,instance
      • Impor produk tertentu

        # Impor semua resource di bawah produk ACK dan ALB
        aliterraformer import alicloud --products=ACK,ALB
      • Impor produk dan resource tertentu

        # Impor semua resource di bawah produk ACK dan ECS, serta semua VPC dan vSwitch
        aliterraformer import alicloud --products=ACK,ECS -r=vpc,vswitch
      • Impor produk tertentu, tetapi kecualikan beberapa resource di dalam produk tersebut

        # Impor semua resource di bawah ACK kecuali alicloud_cs_kubernetes
        aliterraformer import alicloud --products=ACK --excludes=cs_kubernetes
      • Impor semua resource dari semua produk

        # Memasukkan ALL untuk produk berarti semua produk
        aliterraformer import alicloud --products=ALL
      • Impor semua resource dari semua produk, tetapi kecualikan produk tertentu

        # Impor semua produk kecuali VPNGateway dan WAF
        aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF
      • Impor semua resource dari semua produk, tetapi kecualikan produk dan resource tertentu

        # Impor semua produk kecuali VPNGateway dan WAF, dan kecualikan resource alicloud_cs_kubernetes
        aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF --excludes=cs_kubernetes
    • Filter resource

      Format: --filter=Type1.AttrKey=AttrValue1;AttrValue2,Type2.AttrKey=AttrValue1;AttrValue2. Menghilangkan Type akan menerapkan filter ke semua resource.

      • Impor VPC dengan ID vpc-123

        # Untuk menentukan beberapa nilai, pisahkan dengan titik koma: --filter="vpc.id=vpc-123;vpc-456"
        aliterraformer import alicloud -r=vpc --filter="vpc.id=vpc-123"
      • Impor VPC dan vSwitch yang keduanya bernama tf-example

        aliterraformer import alicloud -r=vpc,vswitch --filter="vpc.vpc_name=tf-example,vswitch.vswitch_name=tf-example"
      • Impor VPC dan instans ECS yang keduanya termasuk dalam kelompok sumber daya rg-12345

        aliterraformer import alicloud -r=vpc,instance --filter="resource_group_id=rg-12345"
    • Ekstrak properti sebagai variabel menggunakan output-variables

      Format perintah saat ini adalah r1:attr1,attr2;r2:attr1,attr2,attr3.

      • Ekstrak vpc_id dan vswitch_id dari instans ECS sebagai variabel

        aliterraformer import alicloud -r=instance --output-variables="instance:vpc_id,vswitch_id"
Contoh

Contoh ini mengimpor VPC, vSwitch, dan instans ECS dengan ID VPC vpc-12345 di China (Hangzhou), mengekstrak zone_id vSwitch sebagai variabel:

  1. Buat direktori untuk menyimpan templat dan file state yang diimpor.

    mkdir example && cd example
  2. Buat perintah impor.

    aliterraformer import alicloud \
        --regions=cn-hangzhou \
        -r=vpc,vswitch,instance \
        --filter="vpc.id=vpc-12345,vswitch.vpc_id=vpc-12345,instance.vpc_id=vpc-12345" \
        --output-variables="vswitch:zone_id" \
        --path-output=example               \
        --path-pattern={output}            \
        --compact
    • --path-output: Menentukan folder impor.

    • --path-pattern: Struktur direktori untuk templat yang diimpor. Default: {output}/{provider}/{service}/. Alternatif: {output}/{provider}/ dan {output}/. Menggunakan --path-pattern={output} menempatkan semua templat dalam satu folder.

    • --compact: Menggabungkan semua resource ke dalam satu file resources.tf alih-alih file terpisah {service}.tf.

  3. Setelah impor, file berikut dihasilkan di direktori example:

    .
    ├── outputs.tf
    ├── provider.tf
    ├── resources.tf
    ├── terraform.tfstate
    └── variables.tf

    Tanpa --path-pattern={output}, struktur direktori adalah:

    .
    └── alicloud
        ├── instance
        │   ├── provider.tf
        │   ├── terraform.tfstate
        │   └── variables.tf
        ├── vpc
        │   ├── outputs.tf
        │   ├── provider.tf
        │   ├── terraform.tfstate
        │   ├── variables.tf
        │   └── vpc.tf
        └── vswitch
            ├── outputs.tf
            ├── provider.tf
            ├── terraform.tfstate
            ├── variables.tf
            └── vswitch.tf
  4. Untuk Terraform >=0.13.0, jalankan perintah berikut untuk memperbarui file state agar kompatibel dengan versi tersebut.

    terraform state replace-provider -auto-approve "registry.terraform.io/-/alicloud" "aliyun/alicloud"

Masukan dan Saran

Jika Anda memiliki pertanyaan atau saran saat menggunakan tutorial ini atau dalam praktik, bergabunglah dengan grup pelanggan DingTalk (ID grup DingTalk: 34240022836) untuk berkomunikasi langsung dengan insinyur kami, atau kirimkan issue di halaman GitHub Terraform Provider Alibaba Cloud. Seseorang yang ditugaskan akan menindaklanjuti pertanyaan dan saran Anda.