すべてのプロダクト
Search
ドキュメントセンター

Terraform:既存リソースの管理

最終更新日:Jul 31, 2026

この記事では、`import` コマンド、`import` ブロック、または Terraformer を使用して、既存のクラウドリソースを Terraform にインポートする方法について説明します。

背景情報

Terraform は、Infrastructure as Code (IaC) を通じてクラウドリソース管理を自動化します。新しいリソースは Terraform コードで直接作成できますが、既存のリソースや Terraform の外部で作成されたリソースはインポートが必要です。インポートプロセスでは、リソースコードと state ファイルが生成され、継続的な Terraform 管理が可能になります。

リソースインポートにより、既存のクラウドリソースを Terraform の管理下に置くことができます。

利用シーン

リソースインポートは、以下の一般的なシナリオに適用されます:

  1. 既存リソースの管理:コンソール、API、コマンドラインインターフェイス (CLI) などの他のツールで管理されているリソースを Terraform 管理に移行します。

  2. リソースドリフトの解決:Terraform で管理されているリソースが Terraform の外部で変更されると、その状態が構成から乖離します。リソースを再インポートして状態を同期します。

  3. コードのリファクタリング:リソース数が増えるにつれて、モノリシックな設定ファイルをより小さなファイルに分割し、管理の複雑さを軽減します。

  4. リソースの迅速なデプロイ:既存のリソースアーキテクチャを複製し、別のリージョンやアカウントにデプロイします。

  5. リソースの迅速な復旧:リソースアーキテクチャを定期的にバックアップします。安定性の問題が発生した場合、バックアップコードを使用してアーキテクチャを迅速に復旧できます。

操作手順

リソースをインポートするには、3 つの方法があります:

  1. インポートコマンド: ネイティブの Terraform コマンド terraform import を使用して単一のリソースをインポートします。

  2. インポートブロック: Terraform インポートブロックを記述し、terraform planterraform apply を実行することにより、1 つ以上のリソースをインポートします。

  3. Terraformer ツール:オープンソースの Terraformer ツールでコマンドを実行し、リソースをフィルターおよびクエリしてバッチでインポートします。

ご自身のシナリオに最も適した方法を選択してください。

インポート方法

メリット

デメリット

利用シーン

`import` コマンド

  • シンプルで直接的。ネイティブの Terraform コマンドを実行します。

  • state ファイルを自動的に生成します。

  • 手動でリソース ID を取得する必要があり、エラーが発生しやすいです。

  • 一度に 1 つのリソースしかインポートできないため、複数のリソースには非効率です。

  • リソースコードを手動で記述する必要があります。

既存リソースの管理

リソースドリフトの解決

コードのリファクタリング

`import` ブロック

  • 使い方がシンプル。ネイティブの Terraform コマンドを実行します。

  • 複数のリソースのバッチインポートをサポートします。

  • 複雑なインポートロジックのコードを記述できます。

  • インポートコードを記述する必要があり、学習コストがかかります。

  • 複数のリソース間の依存関係を生成できません。

  • バッチインポートの場合、構成コストが高くなる可能性があります。

既存リソースの管理

リソースドリフトの解決

コードのリファクタリング

リソースの迅速なデプロイ

Terraformer

  • インポートするリソースコレクションを自動的にフィルターおよび選択します。

  • Terraform のリソースコードを自動的に生成します。

  • リソース間の依存関係を自動的に生成します。

  • Terraformer をダウンロードしてインストールする必要があります。

  • ネイティブの Terraform コマンドではなく、学習および構成コストがかかります。

既存リソースの管理

リソースドリフトの解決

コードのリファクタリング

リソースの迅速なデプロイ

リソースの迅速な復旧

Terraform `import` コマンド

<a class="ne-link" data-href="https://developer.hashicorp.com/terraform/cli/commands/import" href="https://developer.hashicorp.com/terraform/cli/commands/import" id="653ac62fdfgjr" target="_blank">terraform import</a> コマンドは、リソースアドレスリソース IDを指定してリソースをインポートし、いくつかの構成パラメーターを受け入れます。

前提条件

  • 以下のいずれかの方法で Terraform 実行環境を準備します:

  • アクティブなアカウントに関連リソースの読み取り専用権限を付与します。

使用方法

コマンドのフォーマットは terraform import [options] <address> <id> です。

  • リソースアドレス: フォーマットは <resource_type>.<resource_name> です。リソースタイプと名前が含まれており、ステートファイル内のインフラストラクチャの識別子として機能します。

    • たとえば、以下の構成スニペットにおける VPC のリソースアドレスは alicloud_vpc.default です。

    resource "alicloud_vpc" "default" {
      vpc_name   = "tf-example"
      cidr_block = "10.0.0.0/8"
    }
  • リソース ID: リソース ID は、インポートするリソースを一意に識別するためのものです。ID のフォーマットはリソースタイプによって異なるため、プロバイダーのドキュメントをご確認ください。

    • たとえば、alicloud_security_group のリソース ID はセキュリティグループ ID です。alicloud_security_group_rule のリソース ID は特定のフォーマットに従います。

    以下の属性がエクスポートされます:
    
      • id - Terraform におけるセキュリティグループルールのリソース ID。
    
    注:cidr_ip が設定されている場合、ID のフォーマットは <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<cidr_ip>:<policy>:<priority> となります。
    
    注:ipv6_cidr_ip が設定されている場合、ID のフォーマットは <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<ipv6_cidr_ip>:<policy>:<priority> となります。
    
    注:source_security_group_id が設定されている場合、ID のフォーマットは <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<source_security_group_id>:<policy>:<priority> となります。
    
    注:prefix_list_id が設定されている場合、ID のフォーマットは <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<prefix_list_id>:<policy>:<priority> となります。
  • 設定オプション:Terraform `import` コマンドは、公式の使用方法に記載されている追加のオプションを受け入れます。

以下の例では、Object Storage Service (OSS) バケットをインポートします:

  1. 作業ディレクトリを作成します。ディレクトリ内に main.tf という名前の設定ファイルを作成し、インポートするリソースのアドレスを定義します。

    resource "alicloud_oss_bucket" "default"{ }
  2. alicloud_oss_bucket リソースの ID はバケット名です。

  3. 実行環境を初期化します。

    terraform init
  4. インポートコマンドを実行します。

    # ご利用のバケット名に置き換えてください
    terraform import alicloud_oss_bucket.default oss-bucket-import

    以下の出力は、インポートが成功したことを示します:

    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. インポート後、リソースプロパティはテンプレートに自動的に追加されません。インポートされたリソースのすべてのプロパティを表示するには、terraform show を実行します:

    # 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"
        }
    }

    この情報をテンプレートに追加し、 alicloud_oss_bucket の説明に従って読み取り専用プロパティを削除すると、Terraform を使用してリソースを管理できるようになります。

Terraform `import` ブロック

Terraform v1.5.0 以降では、`import` ブロックを使用したリソースインポートがサポートされています。設定ファイルに `import` ブロックを記述してリソース ID とアドレスを指定し、terraform plan および terraform apply コマンドを実行してインポートをプレビューおよび実行します。

詳細については、公式ドキュメントをご参照ください。

前提条件

  • 以下のいずれかの方法で Terraform 実行環境を準備します:

    説明

    Terraform v1.5.0 以降が必要です。

  • アクティブなアカウントに関連リソースの読み取り専用権限を付与します。

使用方法

構文は以下の通りです:

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

# オプション
# resource "alicloud_oss_bucket" "example" {
#   # (その他のリソース引数...)
# }

`import` ブロックは、`import` コマンドに比べて 2 つの利点があります:

  1. 構成を自動生成します。既存リソースのアドレスにインポートするか、 -generate-config-out を使用して設定ファイルを自動生成します。

  2. 一括インポート。 複数のリソースをインポートするには、import ブロックで for_each を使用します。同様の属性を持つリソースは、インデックスによって区別され、リソースアドレスを共有できます。

説明

これら 2 つの機能は併用できません。Terraform CLI は、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.

以下の例では、`import` ブロックを使用して OSS バケットをインポートします:

  1. main.tf ファイルを含む作業ディレクトリを作成します。`import` ブロックを記述して、リソース ID とアドレスを指定します。

    import {
      to = alicloud_oss_bucket.default
      id = "oss-bucket-import"
    }
  2. 実行環境を初期化します。

    terraform init
  3. terraform plan を実行して、インポートをプレビューします。-generate-config-out を使用して、テンプレートを自動生成します。

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

    以下の情報が表示されます:

    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. プランを確認した後、terraform apply を実行してインポートします。

    terraform apply 

    プロンプトが表示されたら `yes` と入力します。以下の出力は、インポートが成功したことを示します:

    ......
    
    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.

Terraformer ツール

オープンソースの Terraformer ツールは、アカウントから Terraform テンプレートにリソースをバッチでインポートします。クラウドプロバイダーごとにリソースのサブセットをサポートしており、追加のリソースにはカスタムプロバイダーの開発が必要です。

Terraformer には 2 つのバージョンがあります:

  1. オープンソースの Terraformer:オリジナルのバージョンで、複数のクラウドプロバイダーからのリソースインポートをサポートします。

  2. Alibaba Cloud Terraformer:機能が強化されたバージョンで、Alibaba Cloud リソースのみをサポートします。

機能

オープンソース Terraformer

Alibaba Cloud Terraformer

インポートでサポートされているプロダクトのリストを表示

インポートでサポートされているリソースタイプのリストを表示

リージョンによるフィルター

指定したリージョンを除外するフィルター

ゾーンによるフィルター

指定したゾーンを除外するフィルター

プロダクトによるフィルター

指定したプロダクトを除外するフィルター

リソースタイプによるフィルター

指定したリソースタイプを除外するフィルター

リソース ID のリストによるフィルター

指定したリソース ID のリストを除外するフィルター

リソース名によるフィルター

リソースグループによるフィルター

タグによるフィルター

リソースの依存関係を自動作成

変数を自動生成

出力を自動生成

オープンソース Terraformer

前提条件
  1. Terraformer のダウンロードとインストール

    Terraformer は、全プロバイダー対応パッケージまたはプロバイダーごとのパッケージとして利用できます。以下の例は、Linux と macOS のインストール方法を示しています。その他のオプションについては、インストールガイドをご参照ください。

    • 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
    • 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. 依存関係

    1. 現在のアカウントに関連リソースの読み取り専用権限を付与します。

    2. Terraform のインストール

      説明

      Cloud Shell でコマンドを実行する場合、このステップはスキップできます。

      詳細については、「Terraform のインストールと設定」をご参照ください。

    3. 関連するプロバイダーをダウンロードします。プロバイダーは、以下の 2 つの方法のいずれかで設定できます:

      • Terraformer コマンドを実行するディレクトリでプロバイダーを初期化します。

      • プロバイダーを `~/.terraform.d/plugins/` パスにダウンロードします。

    4. アクセス認証情報を設定します。Terraformer は現在、ローカルプロファイルの読み取りによる認証のみをサポートしています。デフォルトでは、プロファイル内の最初の認証情報がインポートに使用されます。Alibaba Cloud のアクセス認証情報の設定方法の詳細については、「認証情報の設定と管理」をご参照ください。

使用方法

以下の例では、terraformer-all-darwin-amd64 v0.8.24 を使用します。

Terraformer は、4つのコマンドをサポートしています:help, import, plan, and version

  1. help:コマンドに関する詳細を表示します。

    ➜  ~ 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:現在のバージョン番号を表示します。

    ~ terraformer-all-darwin-arm64 version
    Terraformer v0.8.24
  3. import:指定されたプロバイダーのリソースをインポートします。

    ➜  ~ 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:指定されたプロバイダーでインポートされるリソースをプレビューします。

以下の例では、中国 (杭州) リージョン内のすべての Alibaba Cloud VPC をインポートします。

  1. インポートされたテンプレートと state ファイルを保存するディレクトリを作成します。

    mkdir example && cd example
  2. 次のコマンドを実行します:

    terraformer-all-darwin-arm64 import alicloud --resources=vpc --regions=cn-hangzhou --path-pattern={output} --path-output=./     
    • --resources: インポートするリソースのコレクションを指定します。

    • --regions: リソースが存在するリージョンを指定します。

    • --path-pattern: 生成されるディレクトリ構造のパターンを指定します。

    • --path-output: 生成されるファイルの出力パスを指定します。

  3. 生成されたテンプレートファイルは次のとおりです。デフォルトでは、リージョン情報がディレクトリパスに追加されます。すべてのリソーステンプレートを 1 つのファイルに統合するには、--compact パラメーターを使用します。これにより、すべてのリソースが resources.tf に出力されます。

    └── cn-hangzhou
        ├── outputs.tf
        ├── provider.tf
        ├── terraform.tfstate
        ├── variables.tf
        ├── vpc.tf
        └── vswitch.tf
    
    2 directories, 6 files
  4. Terraform >=0.13.0 の場合、次のコマンドを実行して、バージョン互換性を確保するためにステートファイルを更新します。

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

Alibaba Cloud Terraformer - aliterraformer (推奨)

aliterraformer は、オープンソースの Terraformer を拡張し、より広いリソースカバー率、強化された認証情報設定、追加のインポートフィルターディメンションを提供します。

前提条件
  1. ダウンロードとインストール

    Alibaba Cloud OSS から aliterraformer をダウンロードします:

    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

    例えば、macOS では、ダウンロード後にファイルを解凍します:

    unzip aliterraformer_darwin_amd64.zip
    chmod +x aliterraformer
    sudo mv aliterraformer /usr/local/bin/aliterraformer
  2. 依存関係

    オープンソースの Terraformer と同様に、`terraform` と `terraform-provider-alicloud` のバイナリ、および設定済みのアクセス認証情報が必要です。

    1. Resource Access Management (RAM) アカウントに関連リソースの読み取り専用権限を付与します。

    2. Terraform のインストール

      詳細については、「Terraform のインストールと設定」をご参照ください。Cloud Shell でコマンドを実行する場合、このステップはスキップできます。

    3. terraform-provider-alicloud のダウンロード

      インポートするプロバイダーのバージョンを指定できます。キャッシュディレクトリの構造は、v0.13.0 より前と v0.13.0 以降で異なります。以下のパスは v0.13.0 以降に適用されます:

      # 1. 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. 現在の作業ディレクトリの隠しディレクトリに設定
      .terraform/providers/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
      
      # 3. ユーザーのルートディレクトリの隠しディレクトリに設定
      <HOME>/.terraform.d/plugins/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
    4. アクセス認証情報の設定

      プロファイルを使用するのに加えて、aliterraformer では環境変数とコマンドパラメーターを使用してアクセス認証情報を設定できます:

      # 1. ALICLOUD_ACCESS_KEY と ALICLOUD_SECRET_KEY 環境変数を使用
      $ export ALICLOUD_ACCESS_KEY=xxxx
      $ export ALICLOUD_SECRET_KEY=xxxxx
      
      # 2. --access-key と --secret-key コマンドパラメーターを渡す
      $ aliterraformer import alicloud --access-key=xxxx --secret-key=xxx ...
      
      # 3. プロファイルメカニズムを通じて AK を設定して渡す
      $ aliterraformer import alicloud --profile=default ...
使用方法

aliterraformer は、help, version, products, resources, import の 5 つのコマンドをサポートしています。products, resources コマンドは、オープンソースの Terraformer に追加されたコマンドです。

  1. help:サポートされているコマンドの詳細を表示します。

    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:現在の Terraformer のバージョンを表示します。

    aliterraformer version
  3. products:現在のバージョンでインポートがサポートされているプロダクトを一覧表示します。

    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: プロダクトのインポート可能なリソースタイプを一覧表示します。 -p を使用してプロダクトを指定します。

    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:リソースをインポートします。Alibaba Cloud の場合は `alicloud` を指定します。次のコマンドを実行して、利用可能なパラメーターを表示します:

    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.

    インポートするリソースコレクションを定義し、オプションでリソースをフィルターし、プロパティを変数として抽出します。

    • リソースコレクションの構築:

      インポート範囲は、`--products`、`--resources`、`--excludes-products`、`--excludes` の 4 つのフラグで定義します。これらを組み合わせてリソースコレクションを構築します:

      • 特定のリソースのインポート

        # VPC、vSwitch、ECS インスタンスをインポート
        aliterraformer import alicloud -r=vpc,vswitch,instance
      • 特定のプロダクトのインポート

        # ACK と ALB プロダクト配下のすべてのリソースをインポート
        aliterraformer import alicloud --products=ACK,ALB
      • 特定のプロダクトとリソースのインポート

        # ACK と ECS プロダクト配下のすべてのリソース、およびすべての VPC と vSwitch をインポート
        aliterraformer import alicloud --products=ACK,ECS -r=vpc,vswitch
      • 特定のプロダクトをインポートし、その中のいくつかのリソースを除外

        # alicloud_cs_kubernetes を除く ACK 配下のすべてのリソースをインポート
        aliterraformer import alicloud --products=ACK --excludes=cs_kubernetes
      • すべてのプロダクトからすべてのリソースをインポート

        # products に ALL を入力すると、すべてのプロダクトを意味します
        aliterraformer import alicloud --products=ALL
      • すべてのプロダクトからすべてのリソースをインポートし、特定のプロダクトを除外

        # VPNGateway と WAF を除くすべてのプロダクトをインポート
        aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF
      • すべてのプロダクトからすべてのリソースをインポートし、特定のプロダクトとリソースを除外

        # VPNGateway と WAF を除くすべてのプロダクトをインポートし、alicloud_cs_kubernetes リソースを除外
        aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF --excludes=cs_kubernetes
    • リソースのフィルター

      フォーマット: --filter=Type1.AttrKey=AttrValue1;AttrValue2,Type2.AttrKey=AttrValue1;AttrValue2。Type を省略した場合、フィルターはすべてのリソースに適用されます。

      • ID が vpc-123 の VPC をインポート

        # 複数の値を指定するには、セミコロンで区切ります:--filter="vpc.id=vpc-123;vpc-456"
        aliterraformer import alicloud -r=vpc --filter="vpc.id=vpc-123"
      • 名前が tf-example の VPC と vSwitch をインポート

        aliterraformer import alicloud -r=vpc,vswitch --filter="vpc.vpc_name=tf-example,vswitch.vswitch_name=tf-example"
      • リソースグループ rg-12345 に属する VPC と ECS インスタンスをインポート

        aliterraformer import alicloud -r=vpc,instance --filter="resource_group_id=rg-12345"
    • output-variables を使用してプロパティを変数として抽出

      形式:r1:attr1,attr2;r2:attr1,attr2,attr3

      • ECS インスタンスから vpc_id と vswitch_id を変数として抽出

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

この例では、中国 (杭州) の VPC ID が vpc-12345 の VPC、vSwitch、および ECS インスタンスをインポートし、vSwitch の zone_id を変数として抽出します。

  1. インポートされたテンプレートと state ファイルを保存するディレクトリを作成します。

    mkdir example && cd example
  2. インポートコマンドを構築します。

    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: インポートフォルダを指定します。

    • --path-pattern:インポートされたテンプレートのディレクトリ構造。デフォルト: {output}/{provider}/{service}/。代替: {output}/{provider}/ および {output}/--path-pattern={output} を使用すると、すべてのテンプレートが 1 つのフォルダに配置されます。

    • --compact: 個別の {service}.tf ファイルではなく、すべてのリソースを単一の resources.tf ファイルに統合します。

  3. インポート後、example ディレクトリに以下のファイルが生成されます:

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

    --path-pattern={output} を指定しない場合、ディレクトリ構造は以下の通りです。

    .
    └── 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. Terraform >=0.13.0 では、次のコマンドを実行して、バージョンの互換性のためにステートファイルを更新します。

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

フィードバックと提案

ご質問やご提案がございましたら、DingTalk グループ (グループ ID:34240022836) にご参加いただくか、Alibaba Cloud Terraform Provider GitHub ページで issue を送信してください。