주뇽's 저장소

[Git Action] AWS-Lambda 배포 자동화 하기 본문

Git

[Git Action] AWS-Lambda 배포 자동화 하기

뎁쭌 2024. 8. 2. 20:15
728x90
반응형

2024.07.07 - [클라우드서비스] - AWS Lambda + API Gateway를 이용해서 Fast API와 LangChain 서비스 배포

 

AWS Lambda + API Gateway를 이용해서 Fast API와 LangChain 서비스 배포

0. 사전 준비- AWS 액세스 키와 시크릿 키 발급- AWS CLI 설치1. 프로젝트 구조 설정먼저, 다음과 같은 디렉토리 구조를 설정한다:my-fastapi-app/├── app│ ├── controller│ │ ├── __init__.py│ │

jypark1111.tistory.com

 

들어가며

FastAPI 앱을 AWS Lambda에 배포하는 과정이 반복적이고 지루하게 느껴진다. 코드 푸시, 도커 빌드, ECR 업로드, Lambda 업데이트... 이 모든 과정을 매번 수동으로 하는 것은 시간 낭비일 수 있다. 오늘은 이 반복적인 작업을 GitHub Actions를 활용해 이전 프로젝트에 적용하여 자동화하는 방법을 알아본다.

배포 시나리오 개요

일반적인 배포 과정은 다음과 같다:

  1. 코드 변경사항을 GitHub에 푸시한다.
  2. Docker 이미지를 빌드하고 ECR에 업로드한다.
  3. Lambda 함수를 새 Docker 이미지로 업데이트한다.

이제 이 과정을 GitHub Actions로 자동화해 본다.

GitHub Actions 워크플로우 설정: 자동화의 비결

1. 워크플로우 파일 생성

프로젝트의 루트 디렉토리에 .github/workflows/ 폴더를 만들고, 그 안에 deploy.yml 파일을 생성한다. 이 파일이 자동화의 핵심이 된다.

2. 워크플로우 내용 작성

deploy.yml 파일에 다음 내용을 작성한다:

name: FastAPI CI/CD with ECR and Lambda

on:
  pull_request:
    branches:
      - main
    paths:
      - 'fastAPI/**'

env:
  AWS_REGION: ap-northeast-2
  ECR_REPOSITORY: my-fastapi-app
  LAMBDA_FUNCTION_NAME: nickname-generate

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 코드 체크아웃
      uses: actions/checkout@v4

    - name: AWS 자격 증명 구성
      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 }}

    - name: ECR 로그인
      id: login-ecr
      uses: aws-actions/amazon-ecr-login@v1

    - name: Docker 이미지 빌드 및 ECR 푸시
      env:
        ECR_REGISTRY: ${{ secrets.ECR_REGISTRY }}
      run: |
        docker build -t $ECR_REGISTRY/${{ env.ECR_REPOSITORY }}:latest fastAPI/
        docker push $ECR_REGISTRY/${{ env.ECR_REPOSITORY }}:latest

    - name: Lambda 함수 업데이트
      env:
        ECR_REGISTRY: ${{ secrets.ECR_REGISTRY }}
      run: |
        aws lambda update-function-code \
          --function-name ${{ env.LAMBDA_FUNCTION_NAME }} \
          --image-uri $ECR_REGISTRY/${{ env.ECR_REPOSITORY }}:latest

    - name: PR 댓글 달기
      uses: actions/github-script@v6
      with:
        github-token: ${{secrets.GITHUB_TOKEN}}
        script: |
          github.rest.issues.createComment({
            issue_number: context.issue.number,
            owner: context.repo.owner,
            repo: context.repo.repo,
            body: '🚀 배포 완료! Docker 이미지가 ECR에 푸시되었고 Lambda 함수가 업데이트되었습니다.'
          })

주요 포인트: 자동화의 핵심 요소

  1. 트리거 설정: main 브랜치로의 PR과 fastAPI/ 폴더 변경 시에만 작동한다. 이는 불필요한 실행을 방지하여 리소스를 절약한다.
  2. 환경 변수: AWS 리전, ECR 저장소, Lambda 함수 이름을 미리 정의한다. 이로써 워크플로우의 재사용성과 유지보수성이 향상된다.
  3. AWS 인증: GitHub Secrets에 저장된 AWS 키로 안전하게 인증한다. 보안을 최우선으로 고려한 설정이다.
  4. Docker 이미지 빌드 및 푸시: 코드를 Docker 이미지로 빌드하고 ECR에 푸시한다. 이 과정을 통해 일관된 환경에서의 배포가 가능해진다.
  5. Lambda 함수 업데이트: 새로 푸시된 Docker 이미지로 Lambda 함수를 자동으로 업데이트한다. 이로써 배포 프로세스가 완성된다.

보안 고려사항

워크플로우에서 사용되는 중요 정보는 모두 GitHub Secrets에 저장하여 사용한다:

  • AWS_ACCESS_KEY_ID: AWS 접근 키 ID
  • AWS_SECRET_ACCESS_KEY: AWS 비밀 접근 키
  • ECR_REGISTRY: ECR 레지스트리 주소

이렇게 중요 정보를 Secrets에 저장함으로써, 워크플로우 파일에 직접 노출되는 것을 방지하고 보안을 강화한다.

마치며

이 GitHub Actions 워크플로우를 설정함으로써, FastAPI 애플리케이션의 AWS Lambda 배포 과정을 완전히 자동화할 수 있다. 이는 개발자의 시간을 절약하고, 인적 오류를 줄이며, 더 빠른 개발 주기를 가능하게 한다.

자동화의 주요 이점은 다음과 같다:

  1. 수동 작업 감소로 인한 시간 절약
  2. 일관된 배포 프로세스로 인한 오류 감소
  3. 보안 강화
  4. 빠른 피드백 루프로 인한 개발 생산성 향상

이제 여러분의 프로젝트에 이 자동화 과정을 적용해보는 것은 어떤가? 반복적인 작업에서 벗어나 더 창의적인 개발에 집중할 수 있을 것이다.