0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShellを使用してterraformにVPCをインポートしてみた

0
Last updated at Posted at 2026-02-16

はじめに

terraformでLinuxやWSLを使用してインポートを実行することはあったのですが、PowerShellを使用してimportする際に詰まったので備忘録として残しておこうと思いました

前提条件

  • Windows PowerShellを使用すること

  • terraformの実行環境を設定していること

  • 今回はVPCのインポートを実施するので事前にリソースを作成しておきます
    1.png
    ※IDは検証用のため載せています。
    terraform destroyを実行後、applyをすればIDが変更されるのでそのまま記載していますが自身のワークロード環境を共有する際は十分気を付けてください。

  • main.tfに下記を記載しておく

provider "aws" {
  region = "{リージョン名}"
}

実践

terraform initコマンドを実行

実行後、ファイル内に下記の2つのファイルが作成されること

  • .terraform
  • .terraform.lock.hcl

terraformのドキュメントからVPCのimportブロックを探しterraform plan実行

今回はこのページを参照しました。

import {
  to = aws_vpc.test_vpc
  id = "vpc-a01106c2"
}

IDを自身のものに書き換えてterraform planコマンドを実行
image.png

下記のコマンドを実行する必要がありそうです。

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

image.png
このエラーで詰まっていました。

PowerShellでterraformをimportするためのコマンド

上記で出たエラーを解消するためには下記コマンドを実行する必要がありそうです。

terraform plan -generate-config-out generated.tf

エラーの原因は「=」でしたね。
下記のエラーは出力されましたが、「generated.tf」ファイルが作成されていれば問題ないです。

image.png

エラーの1番下の文言をGoogle翻訳すると下記のようになります。

"ipv6_netmask_length": `ipv6_ipam_pool_id,ipv6_netmask_length` のすべてを指定する必要があります

IPv6周りが悪さをしていそうですね。
では「generated.tf」をリファクタしていきましょう。

generated.tfをリファクタ

まずはコマンド実行で生成されたコードを見ていきましょう。

# __generated__ by Terraform
# Please review these resources and move them into your main configuration files.

# __generated__ by Terraform
resource "aws_vpc" "test_vpc" {
  assign_generated_ipv6_cidr_block     = false
  cidr_block                           = "10.100.0.0/16"
  enable_dns_hostnames                 = false
  enable_dns_support                   = true
  enable_network_address_usage_metrics = false
  instance_tenancy                     = "default"
  ipv4_ipam_pool_id                    = null
  ipv4_netmask_length                  = null
  ipv6_cidr_block                      = null
  ipv6_cidr_block_network_border_group = null
  ipv6_ipam_pool_id                    = null
  ipv6_netmask_length                  = 0
  region                               = "ap-northeast-1"
  tags = {
    Name = "test-vpc"
  }
  tags_all = {
    Name = "test-vpc"
  }
}

コメントアウトされているものや、デフォルトがnullのものは必要なさそうなので一旦削除してしまいます。

resource "aws_vpc" "test_vpc" {
  cidr_block                           = "10.100.0.0/16"
  enable_dns_hostnames                 = false
  enable_dns_support                   = true
  enable_network_address_usage_metrics = false
  region                               = "ap-northeast-1"
  tags = {
    Name = "test-vpc"
  }
}

こんな感じになりました。
このファイルはもう必要ないのでリファクタしたものはmain.tfに転記しgenerated.tfは削除してしまいましょう。

terraform planを再実行

ソースコードはこんな感じになっています。
main.tf

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_vpc" "test_vpc" {
  cidr_block                           = "10.100.0.0/16"
  enable_dns_hostnames                 = false
  enable_dns_support                   = true
  enable_network_address_usage_metrics = false
  region                               = "ap-northeast-1"
  tags = {
    Name = "test-vpc"
  }
}

import {
  to = aws_vpc.test_vpc
  id = "vpc-03dad4f0931c80148"
}

ではterraform planコマンドを実行していきましょう。
image.png

importの出力が出て、createやdestroyが存在しません。
正しくリソースをimport出来そうですね。

terraform applyを実行

最後にapplyを実行していきましょう。
image.png
planと同様の結果が表示され問題ないことを確認されます。
問題なければ「yes」と入力してimportが完了します。
image.png

後始末

完了後はimportブロックが不要になります。
再度取り込みしようとしてエラーになったり不便なので削除しておきます。
terraform destroyコマンドを実行すれば環境の削除、再度使用したい場合はapplyを実行すれば環境を構築出来て便利ですので利用してみてください。
※EC2、RDSなどのデータは保持されないので実際のワークロード環境でdestroyを使用する際は十分に注意して自己責任でお願いいたします。

まとめ

今回はVPCを取り込みましたが、その他のリソースも同様の手順で取り込んでいくことが可能です。
main.tfに記載する形で実行しましたが、terraformはリソースが増えたりワークロードの環境を使用する際はモジュールを使用するのもいいですね。
terraformは奥が深く面白いですが、難しく感じていた方も多いと思います。
この記事を通じて実際に手を動かしてみる方が増えたらうれしく思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?