[AWS] VPC 구성 및 ECS 배포 해보기(+기본개념) [5. Github action pipeline 구성]

Heechan Kang·2023년 12월 4일
0

AWS ECS 배포하기

목록 보기
5/7
post-thumbnail

AWS VPC 구성부터 ECS 배포까지

Github action?

  • 깃허브에서 제공하는 CI/CD 서비스
  • Public Repo에서는 무제한 무료로 사용 가능
  • Private Repo에서는 월 2000분까지 무료로 사용 가능
  • 필요시 self-host를 통해 무료로 사용 가능!
  • 기타 세부사항 참조

Github action을 사용하는 이유?

  • Github에서 직접 제공하다보니 편의성이 좋고, 기능이 꽤나 강력해졌습니다.
  • AWS CodeBuild, CodeDeploy, CodePipeline등을 대부분 대체할 수 있습니다.
  • 상기해 두었듯이, 무료로 사용 할 수 있습니다.

사용방법

  • 사용하고자 하는 레포지토리의 .github/workflows 디렉토리에 *.yml 파일을 생성하면 됩니다.
    • *.yml 파일은 여러개를 생성할 수 있고, 각각의 파일은 하나의 workflow를 의미합니다.

예시 - 테스트, ECS 배포

간단한 테스트를 위한 workflow

name: test on push CI

on:
  push:
    branches:
      - main

jobs:
  test:
    runs-on: ubuntu-22.04 # ubuntu 22.04 버전에서 실행

    steps:
      - name: Checkout # 레포지토리를 체크아웃
      uses: actions/checkout@v4.0.0

      - name: Setup node
        uses: actions/setup-node@v3.8.1
        with:
          node-version: '20'
          cache: 'npm'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm run test
  • name : workflow의 이름
  • on : workflow가 실행되는 조건
    • push : 푸시가 발생했을 때
    • branches : 푸시가 발생한 브랜치
  • jobs : workflow가 실행되는 job
    • runs-on : job이 실행되는 환경
    • steps : job이 실행되는 과정
      • name : step의 이름
      • uses : step에서 사용하는 action
      • with : action에 전달하는 인자
      • run : step에서 실행하는 명령어

ECS 배포를 위한 workflow 개략안

name: Test and Deploy

on:
  pull_request:
    branches:
      - stage
      - main
    types:
      - closed

permissions:
  id-token: write
  contents: read
  pull-requests: write

env:
  ...

jobs:
  test:
    name: test nestjs
    runs-on: ubuntu-22.04

    steps:
      ...

  build_and_deploy:
    if: github.event.pull_request.merged == true  # PR이 merge되었을 때만 실행
    name: build docker image and ecs deploy
    runs-on: ubuntu-22.04
    needs: test # test job이 성공적으로 끝나야 실행

    steps:
      - name: checkout  # 레포지토리를 체크아웃
        ...

      - name: configure AWS Credentials	# AWS 인증정보 획득
        ...

      - name: Login to Amazon ECR # ECR에 로그인
        ...

      - name: Build and push NestJS
        ...

      - name: Fill in the new image ID in the Amazon ECS task definition  # 새로운 이미지 ID를 ECS task definition에 채워넣음
        ...

      - name: Deploy Amazon ECS task definition # ECS task definition을 배포
        ...
  • pull_request : PR이 생성되거나 업데이트 되었을 때
    • branches : PR이 생성되거나 업데이트 된 브랜치
    • types : PR이 생성되거나 업데이트 된 타입
      • opened : PR이 열렸을 때
      • closed : PR이 닫혔을 때
      • merged : PR이 merge되었을 때
  • permissions : workflow에서 사용하는 권한
    • id-token : 워크플로우가 id-token을 사용할 수 있도록 허용, OIDC를 사용하는 경우에 필요
    • contents : 워크플로우가 레포지토리의 내용을 읽을 수 있도록 허용
    • pull-requests : 워크플로우가 PR에 코멘트 등 쓰기 권한을 가질 수 있도록 허용

ECS 배포를 전 알아야 할 것

인증수단 선정

1. AWS IAM User의 Access Key와 Secret Access Key 사용

  • 장점: 사용이 간단하고, AWS IAM User의 권한을 그대로 사용할 수 있습니다.
  • 단점: 보안상 좋지 않습니다.
    • 물론 당연히 노출되지 않는게 맞으니 무슨 상관이냐 싶을 수 있습니다.
    • 하지만 특성상 Access Key는 장기적으로 사용되는 경우가 많습니다.
    • 또한 장점에서 상기했듯, 권한을 그대로 사용 할 수 있기에 남용될 가능성이 높습니다.

2. Github OIDC를 통한 AWS Role의 임시 인증토큰 사용

  • 장점: 보안상 좋습니다.
    • Access Key와 Secret Access Key를 사용하지 않기 때문에 노출될 가능성이 없습니다.
    • 또한 임시 인증토큰이기 때문에, 일정 시간이 지나면 만료되어 더욱 안전합니다.
  • 단점: 초기 세팅이 다소 복잡합니다.
    • 별도의 IAM Role을 생성해야 합니다.
    • Github OIDC를 사용하기 위해 별도의 OIDC Provider 등 세팅이 필요합니다.

다음 글에서 본격적으로 workflow를 구성해보고, 두 가지 인증수단을 각각 활용해서 배포를 해 보도록 하겠습니다.

profile
안녕하세요!

0개의 댓글