Django

Zappa로 AWS Lambda를 사용해서 Django 서버리스 배포하기

UserDonghu 2024. 12. 30. 19:09

AWS Lambda 서비스를 이용하면 로드 밸런싱, 오토 스케일링등을 크게 신경 안쓰고 쉽게 서버를 배포할 수 있다.


AWS 키 발급

export AWS_ACCESS_KEY_ID='new_access_key_id' # 현재 셀의 환경변수 설정
export AWS_SECRET_ACCESS_KEY='new_secret_access_key_id' # 현재 셀의 환경변수 설정

 

가상환경(venv)에서 zappa 설치

pip install zappa

 

zappa 초기 설정

zappa init

# zappa 환경 이름 설정 (기본 dev)

# lambda 함수와 관련된 파일들을 관리할 zappa S3 버킷 이름 설정 (기본 랜덤값, 기본 해도 상관없음)

# Django settings.py의 경로 설정 (Django에서 쓸 settings.py 경로 입력 ex)myproject.settings)

# 글로벌적 서비스를 위해 모든 사용 가능한 리전에서 배포할건지 설정 (N 추천)

 

만들어진 zappa_settings.json 수정.

aws_region이랑 서버에서 사용할 env key값 넣기

{
    "dev": {
        "django_settings": "myproject.settings",
        "aws_region": "ap-northeast-2", # 배포할 리전 꼭 설정
        "exclude": [
            "boto3",
            "dateutil",
            "botocore",
            "s3transfer",
            "concurrent"
        ],
        "profile_name": null,
        "project_name": "myproject",
        "runtime": "python3.12",
        "s3_bucket": "zappa-asdfasdf",
        "environment_variables": { # env key는 이렇게 넣음
            "SECRET_KEY": "",
            "AWS_ACCESS_KEY_ID": "",
            "AWS_SECRET_ACCESS_KEY": "",
            "AWS_STORAGE_BUCKET_NAME": "",
            "AWS_S3_REGION_NAME": ""
        }
    }
}

 

환경 변수는 settings.py에서 이런식으로 가져오면 된다

import os

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')

 

Zappa 배포

zappa deploy dev(환경 이름)

 

코드 업데이트 됐을때 재배포

zappa update dev

 

배포 취소

zappa undeploy dev

 

settings.py ALLOWED_HOSTS 에 내 배포 주소 추가

ALLOWED_HOSTS = ['asdfasdf.execute-api.ap-northeast-2.amazonaws.com']

AWS IAM 키 permission error 주의. lambda 함수 권한이 있어야 함