既存の AWS リソースを Terraform 管理下に置く方法(VPC や S3 例)
🏗️ はじめに
Terraform は新しいリソースを作成するだけでなく、既存のクラウドリソースを Terraform の管理下に置く こともできます。
これを実現するのが terraform import コマンドです。
本章では、既存の AWS リソース(VPC、S3 など)を Terraform 管理下に置く手順を、実例とともに解説します。
🌍 terraform import とは?
terraform import は、Terraform の state に既存リソースを登録 するためのコマンドです。
- リソース自体は作成されません。
- Terraform は 既存リソースを state に記録 するだけです。
- その後、HCL コードを記述して管理できます。
terraform import <resource_type>.<name> <resource_id>
| パラメータ | 説明 |
|---|---|
resource_type |
Terraform のリソースタイプ(例:aws_vpc, aws_s3_bucket) |
<name> |
Terraform 内でのリソース名 |
<resource_id> |
クラウド上のリソース ID(例:VPC ID、S3 バケット名) |
⚙️ 実際の例:VPC をインポートする
既存の VPC ID が vpc-0a1b2c3d4e5f6g7h の場合、Terraform で管理するには以下の手順です。
1️⃣ HCL ファイルにリソース定義(最小限)を作成
resource "aws_vpc" "existing_vpc" {
# インポート後、属性は自動取得されます
}
2️⃣ Terraform import 実行
terraform import aws_vpc.existing_vpc vpc-0a1b2c3d4e5f6g7h
🔹 成功すると、state に既存 VPC が登録されます。
その後、terraform planでコードとリソースの差分を確認できます。
3️⃣ 属性の補完
インポート後は、HCL コードに 必須属性やタグを記述 して、Terraform が管理できるようにします。
resource "aws_vpc" "existing_vpc" {
cidr_block = "10.0.0.0/16"
enable_dns_support = true
enable_dns_hostnames = true
tags = {
Name = "imported-vpc"
}
}
⚙️ 実際の例:S3 バケットをインポートする
既存の S3 バケット名が my-existing-bucket の場合も同様です。
1️⃣ HCL ファイルにリソース定義
resource "aws_s3_bucket" "existing_bucket" {
# インポート後に属性を補完
}
2️⃣ Terraform import 実行
terraform import aws_s3_bucket.existing_bucket my-existing-bucket
3️⃣ 属性の補完
resource "aws_s3_bucket" "existing_bucket" {
bucket = "my-existing-bucket"
acl = "private"
tags = {
Name = "imported-bucket"
}
}
💡 注意:インポート後、HCL ファイルを正確に記述しないと、
terraform plan時に「差分あり」と認識されます。
🔄 注意点とベストプラクティス
- インポートは 既存リソースを Terraform が管理できるようにする 操作であり、リソース自体を変更するわけではありません。
- 必ずコード(HCL)と state の属性を一致 させること。
- チームで作業する場合、インポート後の state は リモート backend(S3 + DynamoDB) に保存して共有すると安全。
- 複雑なリソース(VPC サブネット、セキュリティグループなど)は、依存関係を考慮して順番にインポート。
🧠 まとめ
-
terraform importで既存 AWS リソースを Terraform 管理下に登録できる。 - VPC や S3 バケットなどのリソースで実例が多く、手順は同じ。
- インポート後は HCL コードを正確に記述して差分を解消することが重要。
- チーム開発では、リモート state とロック機能を活用すると安全に運用可能。
🌱 既存リソースも Terraform で管理すれば、IaC の恩恵を最大化できる。