1+ name : Deploy to Amazon ECS - Monitoring
2+
3+ # release, develop 브랜치에 푸시되거나 PR이 닫힐 때마다 실행되는 워크플로우입니다.
4+ on :
5+ push :
6+ branches :
7+ - " release"
8+ - " develop"
9+
10+ permissions :
11+ contents : write
12+ pull-requests : write
13+
14+ jobs :
15+ deploy :
16+ runs-on : ubuntu-latest
17+ steps :
18+
19+ # 1. 소스코드 체크아웃(환경변수(yml)가 있는 서브모듈 가져오기)
20+ - name : Checkout
21+ uses : actions/checkout@v3
22+ with :
23+ token : ${{ secrets.ACTION_TOKEN }}
24+ submodules : true
25+
26+ # 2. AWS 자격 증명 구성
27+ - name : Configure AWS credentials
28+ uses : aws-actions/configure-aws-credentials@v2
29+ with :
30+ aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
31+ aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
32+ aws-region : ap-northeast-2
33+
34+ # 3. Amazon ECR에 로그인
35+ - name : Login to Amazon ECR
36+ id : login-ecr
37+ uses : aws-actions/amazon-ecr-login@v2
38+
39+ # 4. Prometheus 설정 파일 복사 (환경별)
40+ - name : Prepare Prometheus config - release
41+ if : github.ref == 'refs/heads/release'
42+ run : cp config/prod/application-prometheus-prod.yml ./prometheus.yml
43+
44+ - name : Prepare Prometheus config - develop
45+ if : github.ref == 'refs/heads/develop'
46+ run : cp config/dev/application-prometheus-dev.yml ./prometheus.yml
47+
48+ # 5. Prometheus Docker 이미지 빌드 & 푸시
49+ - name : Build Prometheus image - release
50+ if : github.ref == 'refs/heads/release'
51+ id : build-prometheus-release
52+ run : |
53+ docker build --platform linux/amd64 -f monitoring/Dockerfile -t ${{ secrets.ECR_REPO_NAME_PROMETHEUS_PROD }} .
54+ docker tag ${{ secrets.ECR_REPO_NAME_PROMETHEUS_PROD }}:latest ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-2.amazonaws.com/${{ secrets.ECR_REPO_NAME_PROMETHEUS_PROD }}:latest
55+ docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-2.amazonaws.com/${{ secrets.ECR_REPO_NAME_PROMETHEUS_PROD }}:latest
56+ echo "image=${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-2.amazonaws.com/${{ secrets.ECR_REPO_NAME_PROMETHEUS_PROD }}:latest" >> $GITHUB_OUTPUT
57+
58+ - name : Build Prometheus image - develop
59+ if : github.ref == 'refs/heads/develop'
60+ id : build-prometheus-dev
61+ run : |
62+ docker build --platform linux/amd64 -f monitoring/Dockerfile -t ${{ secrets.ECR_REPO_NAME_PROMETHEUS_DEV }} .
63+ docker tag ${{ secrets.ECR_REPO_NAME_PROMETHEUS_DEV }}:latest ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-2.amazonaws.com/${{ secrets.ECR_REPO_NAME_PROMETHEUS_DEV }}:latest
64+ docker push ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-2.amazonaws.com/${{ secrets.ECR_REPO_NAME_PROMETHEUS_DEV }}:latest
65+ echo "image=${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.ap-northeast-2.amazonaws.com/${{ secrets.ECR_REPO_NAME_PROMETHEUS_DEV }}:latest" >> $GITHUB_OUTPUT
66+
67+ # 6. ECS Task Definition에 Prometheus 이미지 주입
68+ - name : Render ECS task definition (monitoring) - release
69+ if : github.ref == 'refs/heads/release'
70+ id : task-def-monitoring-prod
71+ uses : aws-actions/amazon-ecs-render-task-definition@v1
72+ with :
73+ task-definition : task-definition-monitoring-prod.json
74+ container-name : prometheus
75+ image : ${{ steps.build-prometheus-release.outputs.image }}
76+
77+ - name : Render ECS task definition (monitoring) - dev
78+ if : github.ref == 'refs/heads/develop'
79+ id : task-def-monitoring-dev
80+ uses : aws-actions/amazon-ecs-render-task-definition@v1
81+ with :
82+ task-definition : task-definition-monitoring-dev.json
83+ container-name : prometheus
84+ image : ${{ steps.build-prometheus-dev.outputs.image }}
85+
86+
87+ # 7. ECS 서비스 배포
88+ - name : Deploy Monitoring to ECS - release
89+ if : github.ref == 'refs/heads/release'
90+ uses : aws-actions/amazon-ecs-deploy-task-definition@v1
91+ with :
92+ task-definition : ${{ steps.task-def-monitoring-prod.outputs.task-definition }}
93+ service : ${{ secrets.ECS_SERVICE_NAME_PROMETHEUS_PROD}}
94+ cluster : ${{ secrets.ECS_CLUSTER_NAME }}
95+ wait-for-service-stability : true
96+
97+ - name : Deploy Monitoring to ECS - dev
98+ if : github.ref == 'refs/heads/develop'
99+ uses : aws-actions/amazon-ecs-deploy-task-definition@v1
100+ with :
101+ task-definition : ${{ steps.task-def-monitoring-dev.outputs.task-definition }}
102+ service : ${{ secrets.ECS_SERVICE_NAME_PROMETHEUS_DEV }}
103+ cluster : ${{ secrets.ECS_CLUSTER_NAME }}
104+ wait-for-service-stability : true
0 commit comments