Skip to content
49 changes: 44 additions & 5 deletions deploy/deploy-prod.sh
Original file line number Diff line number Diff line change
@@ -1,13 +1,52 @@
#!/usr/bin/env bash
set -euo pipefail

# 1) 환경변수 로드
echo "🔧 Deploying with image: $BACKEND_IMAGE"
# —————————————————————————————————
# 0) 필수 환경변수
: "${BACKEND_IMAGE:?Need to set BACKEND_IMAGE (e.g. <ECR_URI>:<TAG>)}"
: "${AWS_DEFAULT_REGION:?Need to set AWS_DEFAULT_REGION}"

# 2) ECS 서비스 업데이트
# ECS 리소스 이름
ECS_CLUSTER="focussu-backend"
ECS_SERVICE="focussu-backend-prod-service"
# —————————————————————————————————

echo "🔧 Deploying image → $BACKEND_IMAGE"

# 1) 현재 서비스에 연결된 Task Definition ARN 조회
CURRENT_TD_ARN=$(aws ecs describe-services \
--cluster "$ECS_CLUSTER" \
--services "$ECS_SERVICE" \
--query 'services[0].taskDefinition' \
--output text)
echo "ℹ️ Current task definition ARN: $CURRENT_TD_ARN"

# 2) Task Definition 상세 가져오기
TD_JSON=$(aws ecs describe-task-definition \
--task-definition "$CURRENT_TD_ARN" \
--output json \
--query 'taskDefinition')

# 3) register-task-definition 에 넘길 JSON로 정리
TD_REG_INPUT=$(echo "$TD_JSON" | jq \
'del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities, .registeredAt, .registeredBy)
| .containerDefinitions[0].image = "'"$BACKEND_IMAGE"'"'
)
Comment on lines +30 to +34
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

jq 변수 인젝션 방식 개선 제안
현재 문자열 연결로 이미지를 삽입하고 있는데, 이미지 이름에 특수문자가 포함되면 JQ 쿼리가 깨질 수 있습니다. 아래처럼 --arg 옵션을 활용해 변수를 안전하게 전달하세요.

- TD_REG_INPUT=$(echo "$TD_JSON" | jq \
-   'del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities, .registeredAt, .registeredBy)
-    | .containerDefinitions[0].image = "'"$BACKEND_IMAGE"'"'
- )
+ TD_REG_INPUT=$(echo "$TD_JSON" | jq --arg IMAGE "$BACKEND_IMAGE" \
+   'del(.taskDefinitionArn, .revision, .status, .requiresAttributes, .compatibilities, .registeredAt, .registeredBy)
+    | .containerDefinitions[0].image = $IMAGE'
+ )


# 4) 새 Task Definition 리비전 등록
NEW_TD_ARN=$(aws ecs register-task-definition \
--cli-input-json "$TD_REG_INPUT" \
--query 'taskDefinition.taskDefinitionArn' \
--output text)
echo "🆕 Registered new task definition ARN: $NEW_TD_ARN"

# 5) 서비스 업데이트 + 강제 재배포
aws ecs update-service \
--cluster focussu-backend \
--service focussu-backend-prod-service \
--cluster "$ECS_CLUSTER" \
--service "$ECS_SERVICE" \
--task-definition "$NEW_TD_ARN" \
--force-new-deployment \
--region "$AWS_DEFAULT_REGION" \
--output json

echo "✅ Deployment triggered!"