본문으둜 κ±΄λ„ˆλ›°κΈ°

πŸš€ Multi-Region Infrastructure Quick Start

πŸ“‹ κ°œμš”β€‹

DTA-Wide Multi-Region Infrastructureλ₯Ό 5λΆ„ μ•ˆμ— μ΄ν•΄ν•˜κ³  μ‹œμž‘ν•  수 μžˆλŠ” λΉ λ₯Έ κ°€μ΄λ“œμž…λ‹ˆλ‹€.

🎯 ꡬ쑰 ν•œλˆˆμ— 보기​

🌍 DTA-Wide Infrastructure
β”œβ”€β”€ πŸ‡ͺπŸ‡Ί Europe (독일): dta-cloud-de-* @ europe-west3
└── πŸ‡°πŸ‡· Asia (ν•œκ΅­): dta-cloud-* @ asia-northeast3

Project 맀핑​

EnvironmentπŸ‡ͺπŸ‡Ί EuropeπŸ‡°πŸ‡· Asia
Devdta-cloud-de-devdta-cloud-dev
Stagedta-cloud-de-stagedta-cloud-stage
Proddta-cloud-de-proddta-cloud-prod

⚑ 5λΆ„ 배포 κ°€μ΄λ“œβ€‹

1단계: ν™˜κ²½ μ€€λΉ„ (1λΆ„)​

# ν”„λ‘œμ νŠΈ λ””λ ‰ν† λ¦¬λ‘œ 이동
cd infrastructure/terragrunt

# ν™˜κ²½ 선택
export ENVIRONMENT=dev # λ˜λŠ” stage, prod

2단계: Global μ„œλΉ„μŠ€ 배포 (2λΆ„)​

# Global μ„œλΉ„μŠ€ ν•œλ²ˆμ— 배포
terragrunt run-all apply --terragrunt-working-dir $ENVIRONMENT/global/

3단계: Region별 배포 (2λΆ„)​

# Europe region (κΈ°μ‘΄)
terragrunt run-all apply --terragrunt-working-dir $ENVIRONMENT/regions/europe-west3/

# Asia region (μ‹ κ·œ)
terragrunt run-all apply --terragrunt-working-dir $ENVIRONMENT/regions/asia-northeast3/

4단계: 검증 (30초)​

# μ„œλΉ„μŠ€ μƒνƒœ 확인
curl https://dta-wide-api-dev-eu-xxxxxxxx-ey.a.run.app/health
curl https://dta-wide-api-dev-asia-xxxxxxxx-an.a.run.app/health

🎯 일반적인 μž‘μ—…λ“€β€‹

νŠΉμ • Region만 배포​

# πŸ‡ͺπŸ‡Ί EU만 배포
terragrunt run-all apply --terragrunt-working-dir dev/regions/europe-west3/

# πŸ‡°πŸ‡· Asia만 배포
terragrunt run-all apply --terragrunt-working-dir dev/regions/asia-northeast3/

νŠΉμ • μ„œλΉ„μŠ€λ§Œ μ—…λ°μ΄νŠΈβ€‹

# CloudSQL μ—…λ°μ΄νŠΈ (λͺ¨λ“  region)
terragrunt apply --terragrunt-working-dir dev/regions/europe-west3/cloudsql/
terragrunt apply --terragrunt-working-dir dev/regions/asia-northeast3/cloudsql/

# Cloud Scheduler μ—…λ°μ΄νŠΈ (Asia only)
terragrunt apply --terragrunt-working-dir dev/regions/asia-northeast3/cloud-scheduler/

μ„€μ • 검증​

# 전체 μ„€μ • 검증
terragrunt validate --terragrunt-working-dir dev/

# νŠΉμ • region 검증
terragrunt validate --terragrunt-working-dir dev/regions/asia-northeast3/

πŸ”§ 자주 ν•˜λŠ” μž‘μ—…β€‹

μƒˆλ‘œμš΄ Region 좔가​

Step 1: Region μ •μ˜β€‹

# shared/regions.hcl에 μΆ”κ°€
"us-central1" = {
region = "us-central1"
zone = "us-central1-a"
timezone = "America/Chicago"
url_suffix = "us"
}

Step 2: Project 맀핑​

# dev/env.hcl에 μΆ”κ°€
projects = {
europe = { ... } # κΈ°μ‘΄
asia = { ... } # κΈ°μ‘΄

us = {
project_id = "dta-cloud-us-dev"
region = "us-central1"
}
}

Step 3: 배포​

# κΈ°μ‘΄ region 볡사
cp -r dev/regions/europe-west3 dev/regions/us-central1

# region.hcl μˆ˜μ • ν›„ 배포
terragrunt run-all apply --terragrunt-working-dir dev/regions/us-central1/

ν™˜κ²½λ³„ 배포​

# Dev β†’ Stage β†’ Prod 순차 배포
for env in dev stage prod; do
echo "πŸš€ Deploying $env environment..."
terragrunt run-all apply --terragrunt-working-dir $env/
done

둀백​

# νŠΉμ • μ„œλΉ„μŠ€ λ‘€λ°±
git checkout HEAD~1 -- infrastructure/terragrunt/dev/regions/asia-northeast3/cloudsql/
terragrunt apply --terragrunt-working-dir dev/regions/asia-northeast3/cloudsql/

# 전체 ν™˜κ²½ λ‘€λ°±
git checkout HEAD~1 -- infrastructure/terragrunt/dev/
terragrunt run-all apply --terragrunt-working-dir dev/

πŸ” λͺ¨λ‹ˆν„°λ§ λΉ λ₯Έ 확인​

μƒνƒœ 체크​

# λͺ¨λ“  region μƒνƒœ ν•œλ²ˆμ— 확인
./scripts/health-check-all.sh dev

# μ„±λŠ₯ λ©”νŠΈλ¦­ 확인
gcloud monitoring metrics list \
--filter="metric.type=run.googleapis.com/request_latencies" \
--project=dta-cloud-dev

λΉ„μš© 확인​

# 월별 λΉ„μš© 확인
gcloud billing budgets list \
--billing-account=01A3DE-04193F-06C496 \
--filter="displayName:DTA-Wide"

# Region별 λΉ„μš© 비ꡐ
./scripts/cost-breakdown.sh

🚨 κΈ΄κΈ‰ 상황 λŒ€μ‘β€‹

πŸ”₯ μž₯μ•  λŒ€μ‘ (3λΆ„ μ•ˆμ—)​

1λΆ„μ§Έ: 문제 νŒŒμ•…β€‹

# λΉ λ₯Έ μƒνƒœ 확인
./scripts/emergency-check.sh

2λΆ„μ§Έ: νŠΈλž˜ν”½ μš°νšŒβ€‹

# 문제 region νŠΈλž˜ν”½ 차단
gcloud compute backend-services update dta-wide-backend \
--global \
--remove-backends=<problem-region>-neg

3λΆ„μ§Έ: νŒ€ μ•Œλ¦Όβ€‹

# Slack μ•Œλ¦Ό
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"🚨 Multi-Region Infrastructure Alert: <region> is down"}' \
$SLACK_WEBHOOK_URL

πŸ”„ λΉ λ₯Έ 볡ꡬ​

# μžλ™ 볡ꡬ 슀크립트
./scripts/auto-recovery.sh <environment> <region>

# μˆ˜λ™ 볡ꡬ (μžλ™ μ‹€νŒ¨μ‹œ)
terragrunt destroy --terragrunt-working-dir $ENV/regions/$REGION/$SERVICE/
terragrunt apply --terragrunt-working-dir $ENV/regions/$REGION/$SERVICE/

πŸ“š ν•™μŠ΅ λ¦¬μ†ŒμŠ€β€‹

ν•„μˆ˜ 읽기​

  1. Multi-Region μ•„ν‚€ν…μ²˜ - 🌍 전체 ꡬ쑰 이해 (10λΆ„)
  2. Multi-Region 관리 - πŸ”§ 일상 운영 방법 (15λΆ„)

상황별 κ°€μ΄λ“œβ€‹

μ‹€μŠ΅ μ˜ˆμ œβ€‹

κΈ°λ³Έ 배포 μ‹€μŠ΅β€‹

# 1. Dev ν™˜κ²½μ— μƒˆλ‘œμš΄ μ„œλΉ„μŠ€ μΆ”κ°€
mkdir infrastructure/terragrunt/dev/regions/europe-west3/new-service

# 2. κΈ°λ³Έ terragrunt.hcl 생성
cat > infrastructure/terragrunt/dev/regions/europe-west3/new-service/terragrunt.hcl << EOF
include "root" {
path = find_in_parent_folders("root.hcl")
expose = true
}

terraform {
source = "../../../../terraform/modules/new-service"
}

locals {
region_vars = read_terragrunt_config("../region.hcl")
}

inputs = {
project_id = local.region_vars.locals.project_id
region = local.region_vars.locals.region
}
EOF

# 3. 배포
terragrunt apply --terragrunt-working-dir dev/regions/europe-west3/new-service/

Cross-Region μ„€μ • μ‹€μŠ΅β€‹

# 1. Asia region에도 동일 μ„œλΉ„μŠ€ 배포
cp -r dev/regions/europe-west3/new-service dev/regions/asia-northeast3/

# 2. μ–‘μͺ½ region에 배포
for region in europe-west3 asia-northeast3; do
terragrunt apply --terragrunt-working-dir dev/regions/$region/new-service/
done

🎯 μ²΄ν¬λ¦¬μŠ€νŠΈβ€‹

배포 μ „ μ²΄ν¬λ¦¬μŠ€νŠΈβ€‹

  • Terragrunt/Terraform μ΅œμ‹  버전인가?
  • GCP ν”„λ‘œμ νŠΈκ°€ μƒμ„±λ˜μ–΄ μžˆλŠ”κ°€?
  • Service Account κΆŒν•œμ΄ μ„€μ •λ˜μ–΄ μžˆλŠ”κ°€?
  • ν•„μš”ν•œ APIsκ°€ ν™œμ„±ν™”λ˜μ–΄ μžˆλŠ”κ°€?
  • terragrunt validate ν†΅κ³Όν•˜λŠ”κ°€?

배포 ν›„ μ²΄ν¬λ¦¬μŠ€νŠΈβ€‹

  • λͺ¨λ“  μ„œλΉ„μŠ€κ°€ 정상 λ™μž‘ν•˜λŠ”κ°€?
  • API μ—”λ“œν¬μΈνŠΈ μ‘λ‹΅ν•˜λŠ”κ°€?
  • λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°λ˜λŠ”κ°€?
  • μŠ€μΌ€μ€„λŸ¬κ°€ 정상 λ™μž‘ν•˜λŠ”κ°€?
  • λͺ¨λ‹ˆν„°λ§ λ©”νŠΈλ¦­μ΄ μˆ˜μ§‘λ˜λŠ”κ°€?

문제 λ°œμƒμ‹œ μ²΄ν¬λ¦¬μŠ€νŠΈβ€‹

  • μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό μ •ν™•νžˆ ν™•μΈν–ˆλŠ”κ°€?
  • 둜그λ₯Ό ν™•μΈν•΄λ΄€λŠ”κ°€?
  • κΆŒν•œ λ¬Έμ œλŠ” μ•„λ‹Œκ°€?
  • λ„€νŠΈμ›Œν¬ 연결은 정상인가?
  • 둀백이 ν•„μš”ν•œκ°€?

πŸŽ‰ 성곡 확인​

배포 성곡 μ§€ν‘œβ€‹

# βœ… 성곡 체크
echo "πŸŽ‰ Multi-Region Infrastructure Health Check"

# 1. λͺ¨λ“  API μ—”λ“œν¬μΈνŠΈ 응닡
curl -f https://dta-wide-api-dev-eu-xxxxxxxx-ey.a.run.app/health # EU
curl -f https://dta-wide-api-dev-asia-xxxxxxxx-an.a.run.app/health # Asia

# 2. λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²°
gcloud sql connect db-dta-wide-dev-eu --project=dta-cloud-de-dev # EU DB
gcloud sql connect db-dta-wide-dev-asia --project=dta-cloud-dev # Asia DB

# 3. μŠ€μΌ€μ€„λŸ¬ λ™μž‘
gcloud scheduler jobs list --project=dta-cloud-de-dev --location=europe-west3
gcloud scheduler jobs list --project=dta-cloud-dev --location=asia-northeast3

echo "βœ… All systems operational!"

μ„±λŠ₯ 검증​

# μ§€μ—°μ‹œκ°„ μΈ‘μ •
echo "⚑ Performance validation..."

# EU region
time curl -s https://dta-wide-api-dev-eu-xxxxxxxx-ey.a.run.app/health

# Asia region
time curl -s https://dta-wide-api-dev-asia-xxxxxxxx-an.a.run.app/health

echo "πŸ“Š Performance targets:"
echo " EU users: < 50ms βœ…"
echo " Asia users: < 100ms βœ…"

πŸ†˜ 도움 μš”μ²­β€‹

문제 ν•΄κ²° μˆœμ„œβ€‹

  1. πŸ“– λ¬Έμ„œ 확인: 이 κ°€μ΄λ“œ 및 κ΄€λ ¨ λ¬Έμ„œ
  2. πŸ” 둜그 확인: gcloud logging read ...
  3. πŸ§ͺ 간단 ν…ŒμŠ€νŠΈ: terragrunt validate, curl ν…ŒμŠ€νŠΈ
  4. πŸ‘₯ νŒ€ 문의: Slack #devops 채널
  5. πŸ†˜ κΈ΄κΈ‰ 상황: PagerDuty escalation

μœ μš©ν•œ λͺ…λ Ήμ–΄ λͺ¨μŒβ€‹

# λΉ λ₯Έ μƒνƒœ 체크
alias check-eu="terragrunt validate --terragrunt-working-dir dev/regions/europe-west3/"
alias check-asia="terragrunt validate --terragrunt-working-dir dev/regions/asia-northeast3/"
alias check-global="terragrunt validate --terragrunt-working-dir dev/global/"

# λΉ λ₯Έ 배포
alias deploy-eu="terragrunt run-all apply --terragrunt-working-dir dev/regions/europe-west3/"
alias deploy-asia="terragrunt run-all apply --terragrunt-working-dir dev/regions/asia-northeast3/"
alias deploy-global="terragrunt run-all apply --terragrunt-working-dir dev/global/"

# λΉ λ₯Έ λ‘€λ°±
alias rollback-asia="git checkout HEAD~1 -- infrastructure/terragrunt/dev/regions/asia-northeast3/"

🎯 λ‹€μŒ 단계​

배포가 μ™„λ£Œλ˜μ—ˆλ‹€λ©΄:

  1. πŸ“Š μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§ μ„€μ •
  2. πŸ”’ λ³΄μ•ˆ κ°•ν™”
  3. πŸ’° λΉ„μš© μ΅œμ ν™”
  4. 🌎 US Region ν™•μž₯ κ³„νš