-
[terraform] Error: creating Amazon S3 (Simple Storage) Bucket BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it.Infra/AWS 2023. 8. 4. 18:19
terraform destroy를 하고 난 후,
s3에 버킷이 여전히 존재 한다면?다시 apply를 할때 중복 에러가 발생된다.
나는 destroy 하더라도 s3 bucket은 그대로 유지하면서 활요하고 싶다.
이유는 테스트 하면서 빈번히 생성/삭제을 하게 되고 terraform.tfstate를 s3에서 관리하기 때문에, 버킷이 지워지는걸 원치 않는다.
이미 버킷이 존재하는 경우, terraform apply를 하게되면 에러가 발생된다.
original code :
# main.tf ... resource "aws_s3_bucket" "new_bucket" { bucket = "new_bucket" tags = { Name = "new_bucket" } } resource "aws_s3_bucket_acl" "new_bucket" { bucket = aws_s3_bucket.new_bucket.id acl = "private" depends_on = [aws_s3_bucket_ownership_controls.s3_bucket_acl_ownership] } resource "aws_s3_bucket_ownership_controls" "s3_bucket_acl_ownership" { bucket = aws_s3_bucket.new_bucket.id rule { object_ownership = "BucketOwnerPreferred" } } resource "aws_s3_bucket_versioning" "new_bucket_versioning" { bucket = aws_s3_bucket.new_bucket.id versioning_configuration { status = "Enabled" } }
Error: creating Amazon S3 (Simple Storage) Bucket (buckect-name): BucketAlreadyOwnedByYou: Your previous request to create the named bucket succeeded and you already own it.
그래서 몇가지 설정을 해줘야 한다.
solution code:
# main.tf ... # 기존 버킷이 있는지 확인하는 데이터 블록을 만듭니다. data "aws_s3_bucket" "existing_bucket" { bucket = "new_bucket" # 기존에 만들어진 버킷의 이름을 지정합니다. } # 새로운 버킷을 생성할지 여부를 설정하는 변수를 정의합니다. variable "create_new_bucket" { type = bool default = true } resource "aws_s3_bucket" "new_bucket" { count = var.create_new_bucket && data.aws_s3_bucket.existing_bucket.bucket == null ? 1 : 0 bucket = "new_bucket" tags = { Name = "new_bucket" } } resource "aws_s3_bucket_acl" "new_bucket" { count = var.create_new_bucket && data.aws_s3_bucket.existing_bucket.bucket == null ? 1 : 0 bucket = aws_s3_bucket.new_bucket[count.index].id acl = "private" depends_on = [aws_s3_bucket_ownership_controls.s3_bucket_acl_ownership] } resource "aws_s3_bucket_ownership_controls" "s3_bucket_acl_ownership" { count = var.create_new_bucket && data.aws_s3_bucket.existing_bucket.bucket == null ? 1 : 0 bucket = aws_s3_bucket.new_bucket[count.index].id rule { object_ownership = "BucketOwnerPreferred" } } resource "aws_s3_bucket_versioning" "new_bucket_versioning" { count = var.create_new_bucket && data.aws_s3_bucket.existing_bucket.bucket == null ? 1 : 0 bucket = aws_s3_bucket.new_bucket[count.index].id versioning_configuration { status = "Enabled" } } # 새로운 버킷이 없으면 데이터 블록을 사용하여 기존 버킷의 정보를 가져옵니다. data "aws_s3_bucket" "existing_bucket_info" { count = var.create_new_bucket && data.aws_s3_bucket.existing_bucket.bucket != null ? 1 : 0 bucket = data.aws_s3_bucket.existing_bucket.bucket } # 새로운 버킷이 생성되지 않았을 경우에만 데이터 블록의 정보를 사용합니다. locals { existing_bucket_info = data.aws_s3_bucket.existing_bucket_info[0] }
해결~!
'Infra > AWS' 카테고리의 다른 글