import コマンド、import ブロック、または Terraformer を使用して、既存のクラウド リソースを Terraform にインポートする方法について説明します。
背景
Terraform は、コードとしてのインフラストラクチャ (IaC) を通じてクラウドリソースの管理を自動化します。新しいリソースは Terraform コードで直接作成できますが、既存のリソースや Terraform 以外で作成されたリソースはインポートする必要があります。インポートプロセスでは、リソースコードと状態ファイルが生成され、継続的な Terraform 管理が可能になります。
Terraform は、リソースコード定義に基づいてリソースの作成、変更、削除を行います。リソースのインポート機能を使用すると、Terraform 管理システム外にドリフトしたクラウドリソースを、一元管理下に置くことができます。
シナリオ
リソースのインポートは、多くのリソース管理およびデプロイのシナリオで有効です:
-
既存リソースの管理:コンソール、API、コマンドラインインターフェイス (CLI)、またはその他の管理ツールなど、Terraform の外部で管理されているリソースを Terraform の管理下へ迅速に移行します。
-
リソースドリフトの解消:Terraform で管理されているリソースが Terraform の外部で変更されると、State は設定から乖離します。リソースを再インポートして State を同期させます。
-
コードのリファクタリング:リソース数が増加するにつれて、すべてのリソースを定義するテンプレートをより小さなファイルに分割し、テンプレートと State の管理の複雑さを軽減します。
-
リソースの迅速なデプロイ:既存のリソースアーキテクチャを別のリージョンまたはアカウントに複製してデプロイします。
-
リソースの迅速な復旧:リソースアーキテクチャを定期的にバックアップします。安定性の問題が発生した場合、バックアップコードを使用してアーキテクチャを迅速に復旧できます。
手順
リソースをインポートする方法は 3 つあります。
-
インポート コマンド:ネイティブ Terraform コマンド
terraform importを実行して、単一のリソースを迅速にインポートします。 -
import ブロック:Terraform の import ブロックを記述し、
terraform planとterraform applyを実行して、1 つ以上のリソースを迅速にインポートします。 -
Terraformer ツール:オープンソースの Terraformer コマンドを実行してリソースを一括でフィルタリングおよびクエリし、自動インポートを実現します。
シナリオに最適な方法を選択してください。
|
インポート方法 |
メリット |
デメリット |
シナリオ |
|
インポートコマンド |
|
|
既存のリソースの管理 リソースドリフトの解決 コードのリファクタリング |
|
import ブロック |
|
|
既存のリソースの管理 リソースドリフトの解決 コードのリファクタリング リソースの迅速なデプロイ |
|
Terraformer |
|
|
既存のリソースの管理 リソースドリフトの解決 コードのリファクタリング リソースの迅速なデプロイ リソースの迅速な復旧 |
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) バケットをインポートします。
-
作業ディレクトリを作成します。ディレクトリ内に main.tf という名前の設定ファイルを作成し、インポートするリソースアドレスを定義します。
resource "alicloud_oss_bucket" "default"{ } -
リソース ID を決定します。alicloud_oss_bucket リソースの ID は、バケット名です。
-
ランタイム環境を初期化します。
terraform init -
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. -
インポート後、リソースのプロパティはテンプレートに自動的に追加されないため、手動で入力する必要があります。
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 つの利点があります。
-
テンプレートファイルを自動的に生成します。テンプレートですでに定義されているリソースアドレスにリソースをインポートすることも、
-generate-config-outパラメータを使用して自動的に生成することもできます。これにより、テンプレートを手動で入力する手間が省けます。 -
一括インポート。
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 バケットをインポートします。
-
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 がインポートされます # (設定が生成されます) 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 ツール
ネイティブの Terraform 機能に加えて、オープンソースの Terraformer ツールを使用すると、アカウント内のリソースを Terraform テンプレートに一括で迅速にインポートできます。オープンソースの Terraformer は、各クラウドプロバイダーのリソースの一部のみをサポートしています。また、各プロバイダーが自身のプロバイダーでサポートするリソースに対応するには、追加の開発が必要です。
Terraformer ツールは、次の 2 つの方法で使用できます。
-
オープンソース Terraformer:オリジナル版です。複数のクラウドプロバイダーのリソースのインポートをサポートします。
-
Alibaba Cloud Terraformer:拡張版です。Alibaba Cloud のリソースのみをサポートします。
|
機能 |
オープンソース Terraformer |
Alibaba Cloud Terraformer |
|
インポートでサポートされている製品リストの表示 |
❌ |
✅ |
|
インポートでサポートされているリソースタイプリストの表示 |
❌ |
✅ |
|
リージョンによるフィルタリング |
✅ |
✅ |
|
指定リージョンを除外したフィルタリング |
❌ |
❌ |
|
ゾーンによるフィルタリング |
❌ |
✅ |
|
指定ゾーンを除外したフィルタリング |
❌ |
❌ |
|
製品によるフィルタリング |
❌ |
✅ |
|
指定製品を除外したフィルタリング |
❌ |
✅ |
|
リソースタイプによるフィルタリング |
✅ |
✅ |
|
指定リソースタイプを除外したフィルタリング |
✅ |
✅ |
|
リソースIDリストによるフィルタリング |
✅ |
✅ |
|
指定リソースIDリストを除外したフィルタリング |
❌ |
❌ |
|
リソース名によるフィルタリング |
✅ |
✅ |
|
リソースグループによるフィルタリング |
✅ |
✅ |
|
タグによるフィルタリング |
✅ |
✅ |
|
リソースの依存関係の自動作成 |
❌ |
✅ |
|
変数の自動生成 |
❌ |
✅ |
|
出力の自動生成 |
❌ |
❌ |
オープンソース Terraformer
前提条件
-
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 -
-
依存関係
-
現在のアカウントに、対象リソースに対する読み取り専用権限を付与します。
-
Terraform をインストールします。
説明Cloud Shell でコマンドを実行する場合、この手順は省略できます。
詳細な手順については、スタートガイドの「Install and configure Terraform」をご参照ください。
-
関連するプロバイダーをダウンロードします。プロバイダーは、次のいずれかの方法で設定できます。
-
Terraformer コマンドを実行するディレクトリでプロバイダーを初期化します。
-
プロバイダーを ~/.terraform.d/plugins/ パスにダウンロードします。
-
-
アクセス認証情報を設定します。Terraformer は現在、ローカルプロファイルを読み取る方法でのみ認証をサポートしています。デフォルトでは、プロファイル内の最初の認証情報がインポートに使用されます。Alibaba Cloud のアクセス認証情報の設定方法については、「Configure and manage credentials」をご参照ください。
-
使用方法
次の例では、terraformer-all-darwin-arm64 v0.8.24 を使用します。
Terraformer では、help, import, plan, and version の 4 つのコマンドを使用できます。
-
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 をインポートします。
-
インポートしたテンプレートと状態ファイルを格納するディレクトリを作成します。
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 つのファイルに統合するには、すべてのリソースを
resources.tfに出力する--compactパラメーターを使用します。└── 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 のバイナリと、設定済みのアクセス認証情報が必要です。
-
RAM アカウントに、対象リソースに対する読み取り専用権限を付与します。
-
Terraform をインストールします。
詳細な手順については、スタートガイドの「Install and configure Terraform」をご参照ください。Cloud Shell でコマンドを実行する場合、この手順は省略できます。
-
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 -
アクセス認証情報を設定します。
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を指定します。次のコマンドを実行すると、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 を変数として抽出します。
-
インポートしたテンプレートと状態ファイルを格納するディレクトリを作成します。
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}を使用すると、すべてのテンプレートが単一のフォルダーに配置されます。 -
--compact: すべてのリソースを、単一のresources.tfファイルに統合し、個別の{service}.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 グループ (DingTalk グループ ID:34240022836) に参加してオンラインで当社のエンジニアと交流するか、Alibaba Cloud Terraform プロバイダー GitHub ページで Issue を作成してください。専任の担当者がお客様の質問や提案に対応します。