Terraform Importを使うと、Terraformで管理していない既存のクラウドリソースをTerraformの管理下に置くことができます。
Terraform Importには主に2つの方法があります。
- import コマンドを使う方法
- import ブロックを記述する方法
本記事では、Terraformの管理外にあるリソースを、Terraform配下に取り込むTerraform Importについて紹介します。
Terraform importとは
Terraform Importとは、すでに存在しているクラウドインフラのリソース(例:AWSのEC2インスタンスやIAMユーザーなど)を、Terraformで管理可能な状態にする機能です。
例えば、AWSのマネジメントコンソールやAWS CLIで作成されたリソースは、Terraformでは管理されていないため、コードで修正・削除ができません。
Terraform Importを使うことで、これらのリソースをTerraformの状態ファイル(terraform.tfstate)に取り込むことができ、以降はTerraformを使って管理・運用ができます。
Terraform Importの方法は主に以下の2つです。
import
コマンドを使う方法import
ブロックを使う方法(Terraform 1.5以降で利用可能)
公式ドキュメントはこちらです:

Terraform Importコマンドについて
terraform import
コマンドは、既存のリソースをTerraformの状態ファイル(terraform.tfstate
)に登録します。
この機能により、Terraformで管理していなかったリソースを、Terraform管理下に取り込むことができます。
ただし、Terraform構成ファイル(.tf
ファイル)には自動で何も追加されません。
そのため、インポート対象に対応する resource
ブロックを、事前に自分で正確に記述しておく必要があります。
さらに、Terraformはインポートされたリソースの構成内容(属性や設定)をHCL形式で自動出力する機能を持っていません。
そのため、AWS CLIやマネジメントコンソールを使って既存リソースの設定内容を確認し、Terraform構文に変換して .tf
ファイルに記述する作業が求められます。
Terraform Importブロックについて
Terraform 1.5から導入された import
ブロックを使う方法では、インポートの宣言をコードに記述できます。
コードベースでインポートを管理できるため、可読性が高く、チームでのレビューやCI/CDへの統合もしやすくなります。
また、terraform plan
の中で、インポート対象が明示的に表示されるため、どのリソースを取り込むか明確になります。
import
ブロックは、モダンなTerraformの運用においておすすめの方法です。
ここからはterraform-dev-user
を例にimportコマンド/importブロックの使い方について紹介します。

Terraform importコマンドの実行
terraform import
コマンドを使う場合、まず対象のresourceブロックを .tf
ファイルに記述します。
たとえば、IAMユーザーを取り込む場合は以下のように書きます。
# terraform-dev-userのimport
resource "aws_iam_user" "terraform_dev_user" {
name = "terraform-dev-user"
}
追加した状態で以下のコマンドを実行します。
% terraform import aws_iam_user.terraform_dev_user terraform-dev-user
aws_iam_user.terraform_dev_user: Importing from ID "terraform-dev-user"...
aws_iam_user.terraform_dev_user: Import prepared!
Prepared aws_iam_user for import
aws_iam_user.terraform_dev_user: Refreshing state... [id=terraform-dev-user]
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.tfstate
にIAMユーザーの情報が取り込まれたことが確認できます。

その後 terraform plan
を実行すると、差分がないこと(=リソースが一致していること)が分かります。

Terraform importコマンドのメリット/デメリット
メリット
- Terraform構成ファイルさえ用意すれば、即座に既存リソースを状態ファイルに取り込める
- Terraform v1.0以前から利用可能で、幅広いバージョンで使える
- 小規模なリソースや検証環境など、スピーディに取り込みたいときに便利
デメリット
- 構成ファイル(HCL)を自動生成してくれないため、手動で正確に記述する必要がある
- 既存リソースの属性を確認しながら書く作業が煩雑で、ミスの原因になりやすい
- インポート操作が .tf ファイル上に残らないため、再現性や可読性に乏しい(チーム運用には不向き)
Terraform importブロックの実行
import
ブロックを使用するには、次のように .tf ファイルに import を記述します。
# terraform-dev-userのimport
import {
to = aws_iam_user.terraform_dev_user
id = "terraform-dev-user"
}
resource "aws_iam_user" "terraform_dev_user" {
name = "terraform-dev-user"
}
その後、terraform plan
を実行すると、次のようなメッセージが表示されます。
Terraform will perform the following actions:
# aws_iam_user.terraform_dev_user will be imported
resource "aws_iam_user" "terraform_dev_user" {
arn = "arn:aws:iam::xxxxxxxxxx:user/terraform-dev-user"
id = "terraform-dev-user"
name = "terraform-dev-user"
path = "/"
permissions_boundary = null
tags = {}
tags_all = {}
unique_id = "AIDASE5KRLPEOF7RLZD7Y"
}
Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.

このように、コード上でインポートが明示されるため、変更管理がしやすいのが特徴です。
Terraform importブロックのメリット/デメリット
メリット
- コードベースでインポートできるため、管理・再現性が高い
- CI/CDに組み込む運用がしやすい
terraform plan
でインポート内容が確認できる
デメリット
- Terraform 1.5以降でのみ使用可能
- すべてのリソースに対して直感的とは限らず、事前に構成を理解しておく必要がある
まとめ
Terraform Importは、Terraform管理外のリソースを管理下に取り込む非常に有用な手段です。
従来の import
コマンドに加え、Terraform 1.5以降では import
ブロックを活用することで、より柔軟かつチーム開発に適した形で運用ができます。
既存のインフラをコードで一元管理したい場合、Terraform Importを活用して、段階的にインフラをIaC(Infrastructure as Code)化していきましょう。