본문 바로가기

DevOps

Gihub Action을 통한 AWS Fargate 자동 배포 처리

반응형

아래 글은 Github Repository를 바탕으로 AWS 의 IAM , ECR , Fargate  아키텍쳐가 구성되있다는 전제로 글을 시작한다.

AWS Fagate 아키텍쳐로  개발시 AWS  Console을 통한 배포시 많은 시간을 소요하게 된다 
Gihub Action을 이용한 배포 자동화 방법을 공유한다.

1. Github 레파지토리의 에서 AWS Secret 정보를 등록한다.

[1-1]

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]

2.1 Github 해당 프로젝트 Repository 선택 >  [2-1] 화면에서 Actions 선택 > New workflow 선택

[2-2]

2.2 [2-2] 화면에서 Deploy to Amazon ECS 의 Set up this workflow 를 클릭한다.

[2-3]

2.3 해당 aws.yml에  본인의 AWS 정보로 아래 항목들만 현행화 하면 된다.

AWS_REGION: ap-northeast-2 (아시아 태평양/서울)
ECR_REPOSITORY: ddori-chat-server-repository
    - AWS
Elastic Container Registry 의 그림 [2-4] 의 프로젝트 리포지토리 이름 입력

[2-4]

ECR_SERVICE : ddori-chat-server-service
   - AWS Elastic Container Service의 그림 [2-5] 서비스 이름 입력

[2-5 - AWS 화면]

ECR_CLUSTER: ddori-service-cluster
   - AWS Elastic Container Service의 그림[2.6] 해당 클러스터 이름을 입력

[2.6 - AWS 화면]

ECS_TASK_DEFINITION: ddori-chat-server-task
    - AWS Elastic Container Service의 작업정의 이름을 입력한다.

[2.7 - AWS 화면]

CONTAINER_NAME: ddori-chat-server-container 
     - AWS Elastic Container Service의 세부정보의 컨테이너 이름을 입력한다.

[2.8 - AWS 화면]

ECS_TASK_DEFINITION: task-definition.json (중요) - AWS 작업 정의 관련 설정 정의된 json 파일
   - 본인 프로젝트의 Root 폴더에 task-definition.json 파일을 생성한다. 
   - 아래 그림 2-9의 작업 정의 화면에서 작업 정의설정값 JSON 내용을 복사한다.
   - 복사한 내용을 생성한 task-definition.json 파일에 붙여 넣는다.

[2.9 - AWS 화면]


푸시할때 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을 통해 커밋한다.

[2.10 - github 화면]


해당 내역을 프로젝트에서 풀받고 푸시하면 자동으로 ecr 등록 -> 작업정의 -> 서비스 업데이트 과정이 자동화 된다.

해당 내용은 아래 그림 2.11의  github > 해당 repository > Action에서 내역을  확인 할수 있다.

[2.11 - github 화면]


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