8. Terraform으로 S3 버킷에 데이터 동기화

발행: (2026년 2월 7일 오후 02:58 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

Cover image for 8.Sync Data to S3 Bucket with Terraform

실험실 정보

데이터 마이그레이션 프로젝트의 일환으로 팀은 다음을 수행해야 합니다:

  • devops-sync-31997이라는 새 프라이빗 S3 버킷을 생성하고 버킷 이름을 변수 KKE_BUCKET에 저장합니다.
  • 기존 버킷 devops-s3-17362의 모든 데이터를 새 버킷으로 마이그레이션합니다.
  • 마이그레이션 후 두 버킷에 동일한 데이터가 존재하는지 확인합니다.

이 모든 작업은 Terraform을 사용하여 기존 main.tf를 업데이트하는 방식으로 진행합니다(별도의 리소스 파일을 만들지 않음). 필요한 파일은 다음과 같습니다:

  • variables.tfKKE_BUCKET을 정의합니다.
  • outputs.tf – 새 버킷 이름과 ACL을 노출합니다.

실험실 솔루션

1️⃣ variables.tf

variable "KKE_BUCKET" {
  type = string
}

2️⃣ terraform.tfvars

KKE_BUCKET = "devops-sync-31997"

3️⃣ main.tf 업데이트 (기존 코드에 추가)

# Existing bucket (source)
resource "aws_s3_bucket" "wordpress_bucket" {
  bucket = "devops-s3-17362"
}

resource "aws_s3_bucket_acl" "wordpress_bucket_acl" {
  bucket = aws_s3_bucket.wordpress_bucket.id
  acl    = "private"
}

# New private bucket (destination)
resource "aws_s3_bucket" "sync_bucket" {
  bucket = var.KKE_BUCKET
}

resource "aws_s3_bucket_acl" "sync_bucket_acl" {
  bucket = aws_s3_bucket.sync_bucket.id
  acl    = "private"
}

# Data migration using the AWS CLI
resource "null_resource" "s3_sync" {
  provisioner "local-exec" {
    command = "aws s3 sync s3://devops-s3-17362 s3://${var.KKE_BUCKET}"
  }

  depends_on = [
    aws_s3_bucket.sync_bucket
  ]
}

4️⃣ outputs.tf

output "new_kke_bucket_name" {
  value = aws_s3_bucket.sync_bucket.bucket
}

output "new_kke_bucket_acl" {
  value = aws_s3_bucket_acl.sync_bucket_acl.acl
}

5️⃣ 구성 적용

terraform init
terraform validate
terraform apply   # 프롬프트가 나오면 "yes" 입력

Terraform apply output

간단한 설명

요구 사항솔루션이 이를 만족하는 방법
variables.tf를 사용해 새 프라이빗 S3 버킷 생성버킷 이름은 var.KKE_BUCKET에서 가져오며, ACL은 private으로 설정됩니다.
기존 버킷의 모든 데이터 마이그레이션aws s3 sync 명령이 폴더 구조를 유지하면서 모든 객체를 복사합니다.
데이터 일관성 보장sync 작업을 안전하게 재실행할 수 있어 소스와 대상이 일치하게 됩니다.
모든 작업을 Terraform으로 수행Terraform이 새 버킷을 프로비저닝하고 ACL을 설정하며, null_resource를 통해 마이그레이션을 트리거합니다.
리소스용 별도 .tf 파일을 만들지 않음모든 리소스는 기존 main.tf에 추가되고, variables.tfoutputs.tf만 별도로 존재합니다.

리소스 및 다음 단계

크레딧

  • 실험실 내용은 **KodeKloud**에서 원본을 가져왔습니다.
Back to Blog

관련 글

더 보기 »