아래 글은 Github Repository를 바탕으로 AWS 의 IAM , ECR , Fargate 아키텍쳐가 구성되있다는 전제로 글을 시작한다.
AWS Fagate 아키텍쳐로 개발시 AWS Console을 통한 배포시 많은 시간을 소요하게 된다
Gihub Action을 이용한 배포 자동화 방법을 공유한다.
1. Github 레파지토리의 에서 AWS Secret 정보를 등록한다.
1.1 Github 해당 프로젝트 Repository 선택 > Settings 선택 > [1-1] 화면의 Secrets 선택 > New repository secret 선택후 AWS AmazonECS_FullAccess 권한이 있는 IAM 사용자의 Access 정보를 추가한다.
AWS_ACCESS_KEY_ID , AWS_SCRET_ACCESS_KEY
2. Github Action Work Flow 생성
2.1 Github 해당 프로젝트 Repository 선택 > [2-1] 화면에서 Actions 선택 > New workflow 선택
2.2 [2-2] 화면에서 Deploy to Amazon ECS 의 Set up this workflow 를 클릭한다.
2.3 해당 aws.yml에 본인의 AWS 정보로 아래 항목들만 현행화 하면 된다.
AWS_REGION: ap-northeast-2 (아시아 태평양/서울)
ECR_REPOSITORY: ddori-chat-server-repository
- AWS Elastic Container Registry 의 그림 [2-4] 의 프로젝트 리포지토리 이름 입력
ECR_SERVICE : ddori-chat-server-service
- AWS Elastic Container Service의 그림 [2-5] 서비스 이름 입력
ECR_CLUSTER: ddori-service-cluster
- AWS Elastic Container Service의 그림[2.6] 해당 클러스터 이름을 입력
ECS_TASK_DEFINITION: ddori-chat-server-task
- AWS Elastic Container Service의 작업정의 이름을 입력한다.
CONTAINER_NAME: ddori-chat-server-container
- AWS Elastic Container Service의 세부정보의 컨테이너 이름을 입력한다.
ECS_TASK_DEFINITION: task-definition.json (중요) - AWS 작업 정의 관련 설정 정의된 json 파일
- 본인 프로젝트의 Root 폴더에 task-definition.json 파일을 생성한다.
- 아래 그림 2-9의 작업 정의 화면에서 작업 정의설정값 JSON 내용을 복사한다.
- 복사한 내용을 생성한 task-definition.json 파일에 붙여 넣는다.
푸시할때 Action이 동작할 브랜치로 수정한다.
on:
push:
branches: [main]
AWS 인증정보를 위의 Github Sercret에 설정한 정보오 aws.yml의 환경변수로 수정한다.
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
위의 과정을 완료후 아래 그림 [2.10] Start Commit을 통해 커밋한다.
해당 내역을 프로젝트에서 풀받고 푸시하면 자동으로 ecr 등록 -> 작업정의 -> 서비스 업데이트 과정이 자동화 된다.
해당 내용은 아래 그림 2.11의 github > 해당 repository > Action에서 내역을 확인 할수 있다.
Java Gradle Project 일경우 추가 사항
스프링 프로젝트의 경의 보통 빌드된 jar를 github으로 관리를 하지 않으므로 위 aws.yml에 빌드 과정이 추가 되야한다.
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Adopt 11
uses: actions/setup-java@v2
with:
distribution: adopt
java-version: 11
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
기존 CheckOut 다음 Aws 인증과정 사이 위소스 코드처럼 gradle build step을 추가 해줘야 정상적으로 처리 된다
위의 java 관련 키워드는 아래를 참조한다.
https://github.com/actions/setup-java
GitHub - actions/setup-java: Set up your GitHub Actions workflow with a specific version of Java
Set up your GitHub Actions workflow with a specific version of Java - GitHub - actions/setup-java: Set up your GitHub Actions workflow with a specific version of Java
github.com
'DevOps' 카테고리의 다른 글
내 공개 아이피 확인 (0) | 2021.07.10 |
---|---|
[리눅스] 타임존 변경 (한국시간으로) (0) | 2020.05.11 |