MeWrite Docs

Error: Resource already exists

Terraformで既に存在するリソースを作成しようとした場合に発生

概要

Terraformで管理外のリソースが既に存在する場合、または状態ファイルと実際のインフラが不整合な場合に発生するエラーです。

エラーメッセージ

Error: Error creating S3 bucket: BucketAlreadyExists: The requested bucket name is not available.

原因

  1. リソースが手動で作成済み: コンソールやCLIで作成された
  2. 状態ファイルが古い/破損: tfstateが実際のリソースを反映していない
  3. 名前の衝突: グローバルに一意な名前が重複
  4. 別のTerraformプロジェクト: 同じリソースを別の場所で管理

解決策

1. 既存リソースをインポート

1
2
3
4
5
# リソースをTerraform管理下にインポート
terraform import aws_s3_bucket.example my-existing-bucket

# インポート後に設定を確認
terraform plan

2. リソース名を変更

1
2
3
4
5
6
7
resource "aws_s3_bucket" "example" {
  bucket = "my-unique-bucket-name-${random_id.suffix.hex}"
}

resource "random_id" "suffix" {
  byte_length = 8
}

3. 状態をリフレッシュ

1
2
3
4
5
# 実際のインフラから状態を更新
terraform refresh

# または
terraform plan -refresh=true

4. 状態からリソースを削除

1
2
# Terraformの管理から外す(実際のリソースは削除されない)
terraform state rm aws_s3_bucket.example

5. create_before_destroyを使用

1
2
3
4
5
6
7
resource "aws_s3_bucket" "example" {
  bucket = "my-bucket"

  lifecycle {
    create_before_destroy = true
  }
}

6. データソースとして参照

1
2
3
4
5
6
7
8
# 既存リソースを作成せずに参照
data "aws_s3_bucket" "existing" {
  bucket = "existing-bucket-name"
}

output "bucket_arn" {
  value = data.aws_s3_bucket.existing.arn
}

7. 条件付きリソース作成

1
2
3
4
5
6
7
8
9
variable "create_bucket" {
  type    = bool
  default = true
}

resource "aws_s3_bucket" "example" {
  count  = var.create_bucket ? 1 : 0
  bucket = "my-bucket"
}

Terraform の他のエラー

最終更新: 2025-12-09