この記事では、`import` コマンド、`import` ブロック、または Terraformer を使用して、既存のクラウドリソースを Terraform にインポートする方法について説明します。
背景情報
Terraform は、Infrastructure as Code (IaC) を通じてクラウドリソース管理を自動化します。新しいリソースは Terraform コードで直接作成できますが、既存のリソースや Terraform の外部で作成されたリソースはインポートが必要です。インポートプロセスでは、リソースコードと state ファイルが生成され、継続的な Terraform 管理が可能になります。
リソースインポートにより、既存のクラウドリソースを Terraform の管理下に置くことができます。
利用シーン
リソースインポートは、以下の一般的なシナリオに適用されます:
-
既存リソースの管理:コンソール、API、コマンドラインインターフェイス (CLI) などの他のツールで管理されているリソースを Terraform 管理に移行します。
-
リソースドリフトの解決:Terraform で管理されているリソースが Terraform の外部で変更されると、その状態が構成から乖離します。リソースを再インポートして状態を同期します。
-
コードのリファクタリング:リソース数が増えるにつれて、モノリシックな設定ファイルをより小さなファイルに分割し、管理の複雑さを軽減します。
-
リソースの迅速なデプロイ:既存のリソースアーキテクチャを複製し、別のリージョンやアカウントにデプロイします。
-
リソースの迅速な復旧:リソースアーキテクチャを定期的にバックアップします。安定性の問題が発生した場合、バックアップコードを使用してアーキテクチャを迅速に復旧できます。
操作手順
リソースをインポートするには、3 つの方法があります:
-
インポートコマンド: ネイティブの Terraform コマンド
terraform importを使用して単一のリソースをインポートします。 -
インポートブロック: Terraform インポートブロックを記述し、
terraform planとterraform applyを実行することにより、1 つ以上のリソースをインポートします。 -
Terraformer ツール:オープンソースの Terraformer ツールでコマンドを実行し、リソースをフィルターおよびクエリしてバッチでインポートします。
ご自身のシナリオに最も適した方法を選択してください。
|
インポート方法 |
メリット |
デメリット |
利用シーン |
|
`import` コマンド |
|
|
既存リソースの管理 リソースドリフトの解決 コードのリファクタリング |
|
`import` ブロック |
|
|
既存リソースの管理 リソースドリフトの解決 コードのリファクタリング リソースの迅速なデプロイ |
|
Terraformer |
|
|
既存リソースの管理 リソースドリフトの解決 コードのリファクタリング リソースの迅速なデプロイ リソースの迅速な復旧 |
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 を使用したリソースの作成:Cloud Shell には Terraform がプリインストールされており、認証情報も設定済みです。迅速なアクセスに適しています。
-
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) バケットをインポートします:
-
作業ディレクトリを作成します。ディレクトリ内に main.tf という名前の設定ファイルを作成し、インポートするリソースのアドレスを定義します。
resource "alicloud_oss_bucket" "default"{ } -
alicloud_oss_bucket リソースの ID はバケット名です。
-
実行環境を初期化します。
terraform init -
インポートコマンドを実行します。
# ご利用のバケット名に置き換えてください 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. -
インポート後、リソースプロパティはテンプレートに自動的に追加されません。インポートされたリソースのすべてのプロパティを表示するには、
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 を使用したリソースの作成:Cloud Shell には Terraform がプリインストールされており、認証情報も設定済みです。迅速なアクセスに適しています。
-
Terraform のインストールと設定:制限されたネットワーク環境やカスタム開発のセットアップに適しています。
-
-
アクティブなアカウントに関連リソースの読み取り専用権限を付与します。
使用方法
構文は以下の通りです:
import {
to = alicloud_oss_bucket.example
id = "oss-bucket-import"
}
# オプション
# resource "alicloud_oss_bucket" "example" {
# # (その他のリソース引数...)
# }
`import` ブロックは、`import` コマンドに比べて 2 つの利点があります:
-
構成を自動生成します。既存リソースのアドレスにインポートするか、
-generate-config-outを使用して設定ファイルを自動生成します。 -
一括インポート。 複数のリソースをインポートするには、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 バケットをインポートします:
-
main.tf ファイルを含む作業ディレクトリを作成します。`import` ブロックを記述して、リソース ID とアドレスを指定します。
import { to = alicloud_oss_bucket.default id = "oss-bucket-import" } -
実行環境を初期化します。
terraform init -
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. -
プランを確認した後、
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 つのバージョンがあります:
-
オープンソースの Terraformer:オリジナルのバージョンで、複数のクラウドプロバイダーからのリソースインポートをサポートします。
-
Alibaba Cloud Terraformer:機能が強化されたバージョンで、Alibaba Cloud リソースのみをサポートします。
|
機能 |
オープンソース Terraformer |
Alibaba Cloud Terraformer |
|
インポートでサポートされているプロダクトのリストを表示 |
❌ |
✅ |
|
インポートでサポートされているリソースタイプのリストを表示 |
❌ |
✅ |
|
リージョンによるフィルター |
✅ |
✅ |
|
指定したリージョンを除外するフィルター |
❌ |
❌ |
|
ゾーンによるフィルター |
❌ |
✅ |
|
指定したゾーンを除外するフィルター |
❌ |
❌ |
|
プロダクトによるフィルター |
❌ |
✅ |
|
指定したプロダクトを除外するフィルター |
❌ |
✅ |
|
リソースタイプによるフィルター |
✅ |
✅ |
|
指定したリソースタイプを除外するフィルター |
✅ |
✅ |
|
リソース ID のリストによるフィルター |
✅ |
✅ |
|
指定したリソース ID のリストを除外するフィルター |
❌ |
❌ |
|
リソース名によるフィルター |
✅ |
✅ |
|
リソースグループによるフィルター |
✅ |
✅ |
|
タグによるフィルター |
✅ |
✅ |
|
リソースの依存関係を自動作成 |
❌ |
✅ |
|
変数を自動生成 |
❌ |
✅ |
|
出力を自動生成 |
❌ |
❌ |
オープンソース Terraformer
前提条件
-
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 -
-
依存関係
-
現在のアカウントに関連リソースの読み取り専用権限を付与します。
-
Terraform のインストール
説明Cloud Shell でコマンドを実行する場合、このステップはスキップできます。
詳細については、「Terraform のインストールと設定」をご参照ください。
-
関連するプロバイダーをダウンロードします。プロバイダーは、以下の 2 つの方法のいずれかで設定できます:
-
Terraformer コマンドを実行するディレクトリでプロバイダーを初期化します。
-
プロバイダーを `~/.terraform.d/plugins/` パスにダウンロードします。
-
-
アクセス認証情報を設定します。Terraformer は現在、ローカルプロファイルの読み取りによる認証のみをサポートしています。デフォルトでは、プロファイル内の最初の認証情報がインポートに使用されます。Alibaba Cloud のアクセス認証情報の設定方法の詳細については、「認証情報の設定と管理」をご参照ください。
-
使用方法
以下の例では、terraformer-all-darwin-amd64 v0.8.24 を使用します。
Terraformer は、4つのコマンドをサポートしています:help, import, plan, and version。
-
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. -
version:現在のバージョン番号を表示します。
~ terraformer-all-darwin-arm64 version Terraformer v0.8.24 -
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. -
plan:指定されたプロバイダーでインポートされるリソースをプレビューします。
例
以下の例では、中国 (杭州) リージョン内のすべての Alibaba Cloud VPC をインポートします。
-
インポートされたテンプレートと state ファイルを保存するディレクトリを作成します。
mkdir example && cd example -
次のコマンドを実行します:
terraformer-all-darwin-arm64 import alicloud --resources=vpc --regions=cn-hangzhou --path-pattern={output} --path-output=./-
--resources: インポートするリソースのコレクションを指定します。 -
--regions: リソースが存在するリージョンを指定します。 -
--path-pattern: 生成されるディレクトリ構造のパターンを指定します。 -
--path-output: 生成されるファイルの出力パスを指定します。
-
-
生成されたテンプレートファイルは次のとおりです。デフォルトでは、リージョン情報がディレクトリパスに追加されます。すべてのリソーステンプレートを 1 つのファイルに統合するには、
--compactパラメーターを使用します。これにより、すべてのリソースがresources.tfに出力されます。└── cn-hangzhou ├── outputs.tf ├── provider.tf ├── terraform.tfstate ├── variables.tf ├── vpc.tf └── vswitch.tf 2 directories, 6 files -
Terraform
>=0.13.0の場合、次のコマンドを実行して、バージョン互換性を確保するためにステートファイルを更新します。terraform state replace-provider -auto-approve "registry.terraform.io/-/alicloud" "aliyun/alicloud"
Alibaba Cloud Terraformer - aliterraformer (推奨)
aliterraformer は、オープンソースの Terraformer を拡張し、より広いリソースカバー率、強化された認証情報設定、追加のインポートフィルターディメンションを提供します。
前提条件
-
ダウンロードとインストール
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.zipLinux
# 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.zipWindows
# 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 -
依存関係
オープンソースの Terraformer と同様に、`terraform` と `terraform-provider-alicloud` のバイナリ、および設定済みのアクセス認証情報が必要です。
-
Resource Access Management (RAM) アカウントに関連リソースの読み取り専用権限を付与します。
-
Terraform のインストール
詳細については、「Terraform のインストールと設定」をご参照ください。Cloud Shell でコマンドを実行する場合、このステップはスキップできます。
-
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 -
アクセス認証情報の設定
プロファイルを使用するのに加えて、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 に追加されたコマンドです。
-
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. -
version:現在の Terraformer のバージョンを表示します。
aliterraformer version -
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) -
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 -
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 を変数として抽出します。
-
インポートされたテンプレートと state ファイルを保存するディレクトリを作成します。
mkdir example && cd example -
インポートコマンドを構築します。
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ファイルに統合します。
-
-
インポート後、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 -
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 を送信してください。