Backend/공통

Github Action을 통한 AWS CI/CD (1)

Dean83 2025. 11. 11. 12:18

가장 많이 사용 하는 방법이다. 하지만 경우에 따라서는 아직 젠킨스를 이용한 방법도 많이 쓰이고 있다. 

먼저 주의할점. Github Action을 통해 도커 이미지 빌드 -> AWS 업로드 후 ECS로 돌릴경우, x86으로 설정해야 한다.

Github Action에서 도커 빌드하는 경우 기본적으로 이미지가 x86으로 빌드하므로, 실행환경이랑 맞춰줘야 한다.

 

순서를 요약하면 다음과 같다. 

  1. AWS 의 IAM 에서 github action 용 계정 생성 및 권한 부여
  2. Github 리파지토리 생성 및 클론
  3. 로컬에서 해당 리파지토리 프로젝트를 오픈
  4. 루트에 .github 폴더 생성
  5. .github 폴더에 workflows 폴더 생성
  6. workflows 폴더에 github workflow 파일 생성 (예 : deploy.yaml)
  7. 문법에 맞추어 내용 작성
  8. 소스코드 push

 

하나씩 살펴보자. 

  • Github Action용 IAM 계정 생성
    • IAM 에서 계정 생성 하고, 원하는 권한을 준다 (예 : EC2ContainerRegistryFullAccess, ECS_FullAccess 등)
    • 보안자격증명에서 Access, Secret 키를 생성하고 잘 기록해 둔다.
      • 생성할때 서드파티 접근으로 체크하고 생성하면 된다.
  • Github 리파지토리 설정
    • 생성방법은 스킵하고, Github 리파지토리 -> Settings -> Security에서 Secrets and variables 메뉴 -> actions 클릭
    • Repository secrets 항목에서, New repository secret 버튼 클릭
    • Name에는 환경변수 이름으로 쓰일 이름을 넣고, 값에는 해당 값을 넣는다. 적어도 다음의 항목이 필요하다
      • AWS의 계정아이디 (숫자로 되어 있는 아이디)
      • Access키
      • Secret키
      • 리전 정보
      • 해당 정보들은, Github worlflow 파일 내용 작성시, 환경변수 값으로서 주입한다.
  • 로컬에서 Github workflow 파일 작성
    • 띄어쓰기 및 탭에 매우 유의해야 한다. 
      • run: | 같이 명령어 다음: 는 붙어야 하고, 이후 한칸 띄고 | 를 작성해야 한다.
      • linux 명령어인 date를 이용할 때, date+(형식) 을 쓸때 date+는 붙어 있어야 한다.
    • 위의 내용에 맞추어 폴더 및 파일 생성을 한 후, 위에서 정의한 환경변수 이름을 참고하여 내용을 작성한다.
    • 아래는 연결 테스트 및 ECR 리파지토리 정보를 가져오는 테스트 파일이다.
name: AWS Connection Test

on:
  workflow_dispatch: # 수동 실행 가능하도록 설정

jobs:
  test-aws-connection:
    runs-on: ubuntu-latest
    steps:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v5.1.0
        with:
          aws-access-key-id: ${{ secrets.AWS_DEPLOY_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_DEPLOY_SECRET_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: Test AWS CLI
        run: |
          aws sts get-caller-identity
          aws ecr describe-repositories --repository-names ECR리파지토리이름
  • jobs: 하위에 있는 test-aws-connection 은 이름이다. 아무거나 지어도 된다. 
  • 이후, 이 내용을 Push한다.
  • Github 리파지토리 -> Actions 에서 해당 워크플로우 이름 (여기서는 AWS Connection Test)를 선택 -> Run workflow 로 실행하여 테스트 한다.

 

  • Github workflow 파일 작성 기본 문법
    • name : 워크플로우 이름
    • on : 워크플로우 트리거 이벤트
      • push : 코드가 푸시됬을때
      • pull_request : PR이 열릴때
      • workflow_dispatch : 수동으로 트리거 (개발자가 github action에 가서 실행해줘야 함)
      • schedule : 특정 시간대에 실행 (cron 표현식을 따른다)
        • - cron : '0 0 * * *'    => 매일 자정에 실행 한다는 뜻.
    • jobs : 수행할 작업 목록. 병렬 혹은 순차적으로 실행된다.
    • runs-on : 작업 실행환경
    • steps : 각 작업 단계
      • uses : 미리 만들어진 Github 액션 불러와서 사용
        • 여러가지 액션들이 많이 있다.
      • run : 명령어 실행
      • with : 액션에 전달할 파라메터
      • env : 환경변수 정의

 

이어서, ECR 에 이미지를 올리는 과정은 다음과 같다 (https://dean83.tistory.com/370)