Zappa 배포
Zappa 배포 방법
- aws iam 계정 생성
- /.aws/credentials 파일 작성
- virtual envrionment 생성
pip
를 이용해서 Zappa
모듈 설치
- 쉘에서 django 프로젝트 디렉토리 에서
zappa init
입력
- zappa setting.json에 세팅 값 입력
- 꿀팁
"touch" : false
세팅으로 get 호출을 멈출 수 있음
- touch 옵션은 “/”엔드포인트에 get 호출을 해서 정상 작동 하는지 확인하는 옵션
"delete_s3_zip": false
세팅으로 버전별 빌드 파일을 s3에 저장 가능
- default 세팅은 true값으로 s3에 업로드 후 자동으로 삭제 됨
- 쉘에서
zappa deploy dev / prod / stage
명령어로 배포
- 이후 업데이트 시
zappa update dev / prod / stage
쉡에 입력
Zappa 작동 원리
- venv에서 zappa 모듈 찾음
- 배포하는 환경이 venv가 아니면 안됨(에러 발생함)
- 프로젝트의 manage.py 를 찾아서 lambda handler 함수 작성
- 작성된 함수들을 .zip 파일로 생성
- 연결된 AWS IAM 을 통해서 Role 생성, S3 버킷 생성 후 파일 업로드
- AWS Lambda에 파일 이동 후 Zappa에서 Event Trigger, APIGate 구축
→ 모든게 zappa deploy/update
하나로 끝남
Zappa Django Deploy 시
도입점
- Django를 AWS Lambda에 올리기 매우 쉬운 라이브러리
- 단순 aws credential 작성 후
zappa deploy
명령어로 배포 가능
- Github Action을 연동 시 손쉽게 CI/CD 파이프라인 구축 가능
한계점
- 최초 Zappa로 Deploy시 로컬 터미널에서 배포해줘야함
- AWS가 아닌 타 클라우드 플랫폼에서 사용 불가
- lambda layer는 아직 지원 안함
- .env, model, 중요 로직이 바뀌었을 때 동시에 바꿔줘야함
- 특히 .env파일이 바뀌면 로컬 터미널에서 zappa 라이브러리를 이용하여 update, deploy를 해줘야함
- 혹은 git secret을 업데이트 해서 배포 해야함
- .env 파일을 github action을 이용해서 옮기는 방법에서 문제점 발생
- .env 파일이 있지만 읽지 못하는 상황(추측) 발생
- 지속된 502 에러 발생
- 로컬에서 똑같은 소스로 update시도 후 호출 → 정상작동
- 문제점을 제대로 파악하지 못함
도입 문제점
- lambda_handler를 찾지 못함
- Zappa Build시 lambda_handler를 만들어 주는데, aws lambda에서 핸들러를 찾지 못해 함수 구동에 문제가 생김
→ 해결: Zappa 라이브러리 안에 있는 lambda_handler 파일을 직접 지명해서 해결
주의점
- 깃액션에서 venv 를 구성하고 바로 zappa 배포를 하는게 좋음
- 잘못된 세팅으로 인해서 venv 환경 자체가 올라가지 않는 상황이 발생할 수 있음
- 터미널에서 배포할 때와 깃액션으로 배포되는 패키지의 용량이 지나치게 차이나면서 알게되었음
첨언
- 굳이 django를 Zappa에 올리는것 보다는 그냥 lambda 함수를 파이썬으로 짜서 올리거나, node를 활용해서 올리는게 훨씬 맘편하고 좋을것 같습니다.
현재 상황
- python3.7.15, django=3.2.6, zappa=0.56.1로 구축
- github action workflow로 자동 CI/CD 파이프라인 구성