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

Terraform:既存リソースの管理

最終更新日:Sep 12, 2026

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

背景

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

Terraform は、リソースコード定義に基づいてリソースの作成、変更、削除を行います。リソースのインポート機能を使用すると、Terraform 管理システム外にドリフトしたクラウドリソースを、一元管理下に置くことができます。

image

シナリオ

リソースのインポートは、多くのリソース管理およびデプロイのシナリオで有効です:

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

  2. リソースドリフトの解消:Terraform で管理されているリソースが Terraform の外部で変更されると、State は設定から乖離します。リソースを再インポートして State を同期させます。

  3. コードのリファクタリング:リソース数が増加するにつれて、すべてのリソースを定義するテンプレートをより小さなファイルに分割し、テンプレートと State の管理の複雑さを軽減します。

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

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

手順

リソースをインポートする方法は 3 つあります。

  1. インポート コマンド:ネイティブ Terraform コマンド terraform import を実行して、単一のリソースを迅速にインポートします。

  2. import ブロック:Terraform の import ブロックを記述し、terraform plan と terraform apply を実行して、1 つ以上のリソースを迅速にインポートします。

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

シナリオに最適な方法を選択してください。

インポート方法

メリット

デメリット

シナリオ

インポートコマンド

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

  • ステートファイルを自動的に生成します。

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

  • 一度に 1 つのリソースのインポートにしか対応していないため、複数のリソースを扱う場合は非効率的です。

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

既存のリソースの管理

リソースドリフトの解決

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

import ブロック

  • 使いやすいです。ネイティブの Terraform コマンドを実行します。

  • 複数のリソースのバッチインポートに対応しています。

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

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

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

  • バッチインポートでは設定コストが高くなる場合があります。

既存のリソースの管理

リソースドリフトの解決

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

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

Terraformer

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

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

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

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

  • ネイティブの Terraform コマンドではないため、学習コストと設定コストがかかります。

既存のリソースの管理

リソースドリフトの解決

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

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

リソースの迅速な復旧

Terraform の import コマンド

terraform import コマンドは、リソースアドレスとリソース ID を指定してリソースをインポートし、いくつかの設定パラメータを受け取ります。

前提条件

  • 次のいずれかの方法を使用して、Terraform ランタイム環境を準備します。

    • Terraform でリソースを作成: Alibaba Cloud の Cloud Shell には、Terraform コンポーネントと設定済みの認証情報が事前にインストールされており、Cloud Shell で直接 Terraform コマンドを実行できます。この方法は、低コストで迅速かつ便利に Terraform にアクセスする必要があるシナリオに適しています。

    • Terraform のインストールと設定: 制限されたネットワーク環境またはカスタム開発セットアップに適しています。

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

使用方法

コマンドの形式は terraform import [options] <address> <id> です。

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

    • たとえば、次の設定スニペットの 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 - Security Group Rule の 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. リソース ID を決定します。alicloud_oss_bucket リソースの ID は、バケット名です。

  3. ランタイム環境を初期化します。

    terraform init
  4. import コマンドを実行します。

    # バケット名に置き換えてください
    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 以降が必要です。環境構成時に、利用可能なバージョンに切り替えてください。

    • Terraform でリソースを作成:Alibaba Cloud の Cloud Shell には、Terraform コンポーネントと設定済みの認証情報が事前にインストールされており、Cloud Shell で直接 Terraform コマンドを実行できます。この方法は、低コストで迅速かつ便利に Terraform にアクセスする必要があるシナリオに適しています。

    • Terraform のインストールと設定:制限されたネットワーク環境またはカスタム開発セットアップに適しています。

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

使用方法

構文は次のとおりです。

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 を使用するリソースの設定の自動生成をサポートしていません。

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 がインポートされます
      # (設定が生成されます)
        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 ツール

ネイティブの Terraform 機能に加えて、オープンソースの Terraformer ツールを使用すると、アカウント内のリソースを Terraform テンプレートに一括で迅速にインポートできます。オープンソースの Terraformer は、各クラウドプロバイダーのリソースの一部のみをサポートしています。また、各プロバイダーが自身のプロバイダーでサポートするリソースに対応するには、追加の開発が必要です。

Terraformer ツールは、次の 2 つの方法で使用できます。

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

  2. Alibaba Cloud Terraformer:拡張版です。Alibaba Cloud のリソースのみをサポートします。

機能

オープンソース Terraformer

Alibaba Cloud Terraformer

インポートでサポートされている製品リストの表示

❌

✅

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

❌

✅

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

✅

✅

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

❌

❌

ゾーンによるフィルタリング

❌

✅

指定ゾーンを除外したフィルタリング

❌

❌

製品によるフィルタリング

❌

✅

指定製品を除外したフィルタリング

❌

✅

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

✅

✅

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

✅

✅

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

✅

✅

指定リソースIDリストを除外したフィルタリング

❌

❌

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

✅

✅

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

✅

✅

タグによるフィルタリング

✅

✅

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

❌

✅

変数の自動生成

❌

✅

出力の自動生成

❌

❌

オープンソース Terraformer

前提条件
  1. Terraformer をダウンロードしてインストールします。

    Terraformer のリリースパッケージには、すべてのプロバイダー向けのパッケージと、各プロバイダー向けの個別パッケージがあります。要件に合うパッケージをダウンロードしてください。次の例は、Linux と macOS 向けのダウンロード方法です。その他の方法については、「Installation」をご参照ください。

    • 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 でコマンドを実行する場合、この手順は省略できます。

      詳細な手順については、スタートガイドの「Install and configure Terraform」をご参照ください。

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

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

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

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

使用方法

次の例では、terraformer-all-darwin-arm64 v0.8.24 を使用します。

Terraformer では、help, import, plan, and version の 4 つのコマンドを使用できます。

  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. インポートしたテンプレートと状態ファイルを格納するディレクトリを作成します。

    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 つのファイルに統合するには、すべてのリソースを resources.tf に出力する --compact パラメーターを使用します。

    └── 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. RAM アカウントに、対象リソースに対する読み取り専用権限を付与します。

    2. Terraform をインストールします。

      詳細な手順については、スタートガイドの「Install and configure Terraform」をご参照ください。Cloud Shell でコマンドを実行する場合、この手順は省略できます。

    3. terraform-provider-alicloud をダウンロードします。

      インポートで使用するプロバイダーのバージョンを指定できます。init の実行後のキャッシュディレクトリ構造は、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 を指定します。次のコマンドを実行すると、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.

    インポートを実行するときは、まず、インポートするリソースコレクションを定義します。次に、必要に応じて、filter を使用してリソースを絞り込み、output-variables を使用してプロパティをパラメーターとして抽出します。

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

      このコマンドでは、インポートするリソースを指定するために 4 つのフラグ --products、--resources、--excludes-products、--excludes が用意されています。これらを組み合わせて、リソースのコレクションを簡単に構築できます。使用例は次のとおりです。

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

        # 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. インポートしたテンプレートと状態ファイルを格納するディレクトリを作成します。

    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} を使用すると、すべてのテンプレートが単一のフォルダーに配置されます。

    • --compact: すべてのリソースを、単一の resources.tf ファイルに統合し、個別の {service}.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 グループ (DingTalk グループ ID:34240022836) に参加してオンラインで当社のエンジニアと交流するか、Alibaba Cloud Terraform プロバイダー GitHub ページで Issue を作成してください。専任の担当者がお客様の質問や提案に対応します。