주뇽's 저장소
[Git Action] AWS-Lambda 배포 자동화 하기 본문
2024.07.07 - [클라우드서비스] - AWS Lambda + API Gateway를 이용해서 Fast API와 LangChain 서비스 배포
들어가며
FastAPI 앱을 AWS Lambda에 배포하는 과정이 반복적이고 지루하게 느껴진다. 코드 푸시, 도커 빌드, ECR 업로드, Lambda 업데이트... 이 모든 과정을 매번 수동으로 하는 것은 시간 낭비일 수 있다. 오늘은 이 반복적인 작업을 GitHub Actions를 활용해 이전 프로젝트에 적용하여 자동화하는 방법을 알아본다.
배포 시나리오 개요
일반적인 배포 과정은 다음과 같다:
- 코드 변경사항을 GitHub에 푸시한다.
- Docker 이미지를 빌드하고 ECR에 업로드한다.
- 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 함수가 업데이트되었습니다.'
})
주요 포인트: 자동화의 핵심 요소
- 트리거 설정: main 브랜치로의 PR과 fastAPI/ 폴더 변경 시에만 작동한다. 이는 불필요한 실행을 방지하여 리소스를 절약한다.
- 환경 변수: AWS 리전, ECR 저장소, Lambda 함수 이름을 미리 정의한다. 이로써 워크플로우의 재사용성과 유지보수성이 향상된다.
- AWS 인증: GitHub Secrets에 저장된 AWS 키로 안전하게 인증한다. 보안을 최우선으로 고려한 설정이다.
- Docker 이미지 빌드 및 푸시: 코드를 Docker 이미지로 빌드하고 ECR에 푸시한다. 이 과정을 통해 일관된 환경에서의 배포가 가능해진다.
- 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 배포 과정을 완전히 자동화할 수 있다. 이는 개발자의 시간을 절약하고, 인적 오류를 줄이며, 더 빠른 개발 주기를 가능하게 한다.
자동화의 주요 이점은 다음과 같다:
- 수동 작업 감소로 인한 시간 절약
- 일관된 배포 프로세스로 인한 오류 감소
- 보안 강화
- 빠른 피드백 루프로 인한 개발 생산성 향상
이제 여러분의 프로젝트에 이 자동화 과정을 적용해보는 것은 어떤가? 반복적인 작업에서 벗어나 더 창의적인 개발에 집중할 수 있을 것이다.
'Git' 카테고리의 다른 글
Git 충돌, 두려워 말자! 초보자도 쉽게 해결하는 방법 (0) | 2024.08.19 |
---|---|
[Git hub Action]Chat GPT AI를 이용한 GitHub 코드 리뷰어 사용 방법 (6) | 2024.07.24 |
Markdown이란 (0) | 2023.08.19 |