8. Terraform으로 S3 버킷에 데이터 동기화
발행: (2026년 2월 7일 오후 02:58 GMT+9)
4 분 소요
원문: Dev.to
Source: Dev.to

실험실 정보
데이터 마이그레이션 프로젝트의 일환으로 팀은 다음을 수행해야 합니다:
- devops-sync-31997이라는 새 프라이빗 S3 버킷을 생성하고 버킷 이름을 변수
KKE_BUCKET에 저장합니다. - 기존 버킷 devops-s3-17362의 모든 데이터를 새 버킷으로 마이그레이션합니다.
- 마이그레이션 후 두 버킷에 동일한 데이터가 존재하는지 확인합니다.
이 모든 작업은 Terraform을 사용하여 기존 main.tf를 업데이트하는 방식으로 진행합니다(별도의 리소스 파일을 만들지 않음). 필요한 파일은 다음과 같습니다:
variables.tf–KKE_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" 입력

간단한 설명
| 요구 사항 | 솔루션이 이를 만족하는 방법 |
|---|---|
variables.tf를 사용해 새 프라이빗 S3 버킷 생성 | 버킷 이름은 var.KKE_BUCKET에서 가져오며, ACL은 private으로 설정됩니다. |
| 기존 버킷의 모든 데이터 마이그레이션 | aws s3 sync 명령이 폴더 구조를 유지하면서 모든 객체를 복사합니다. |
| 데이터 일관성 보장 | sync 작업을 안전하게 재실행할 수 있어 소스와 대상이 일치하게 됩니다. |
| 모든 작업을 Terraform으로 수행 | Terraform이 새 버킷을 프로비저닝하고 ACL을 설정하며, null_resource를 통해 마이그레이션을 트리거합니다. |
리소스용 별도 .tf 파일을 만들지 않음 | 모든 리소스는 기존 main.tf에 추가되고, variables.tf와 outputs.tf만 별도로 존재합니다. |
리소스 및 다음 단계
- 전체 코드 저장소: KodeKloud Learning Labs
- 심층 탐구: Whispering Cloud Insights
- 토론 커뮤니티: DEV Community
크레딧
- 실험실 내용은 **KodeKloud**에서 원본을 가져왔습니다.