오도원입니다.

건강과 행복을 위하여

Development/Python

[Python] 파이썬 Zappa로 flask web app을 AWS Lambda에 서버리스로 구현하기

오도원공육사 2020. 10. 13. 02:53
반응형

반드시 알아가야 할 것

1. AWS Lambda 
2. 서버리스 
3. zappa 
4. 파이썬 가상환경 설정하기 
5. AWS 액세스 키 생성 후 AWS configure

 

zappa는 파이썬 3.6 이상에서만 동작하므로 반드시 파이썬 3.6 이상인지 확인하라.

$ python --version

 

목차

1. AWS 가입하기

2. 보안 자격 증명
3. AWS CLI2 설치

4. AWS configure
5. 파이썬 가상환경 생성 및 실행
6. 모듈설치
7. 앱 생성 및 실행
8. zappa init
9. zappa deploy dev
10. zappa update
11. zappa undeploy dev

 

1. AWS 가입하기

goddaehee.tistory.com/175

 

[AWS] 2.AWS 회원가입 따라하기

[AWS] 2.AWS 회원가입 따라하기 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ AWS 회원가입 방법] 입니다. : ) AWS를 글로만 배우면 다 이해가 되지 않을 것이다. 직업 회원 가입하고, 실습해보면 이��

goddaehee.tistory.com

위 링크에 자세하게 나와있어서 참고하세요. MFA 활성화는 생략해도 좋습니다. 불안하시면 하는 걸 추천합니다.

2.  IAM 액세스 키 생성

AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스이다.

 

1. 우측 상단 계정 클릭 후 [내 보안 자격 증명 클릭]

2. 액세스 키 탭에서 새 액세스 키 생성 클릭

rootkey.csv

생성되는 root_key csv파일을 다운로드 받는다.

3. AWS CLI2 설치

 

1. Windows

1) AWS CLI 설치

위 파일을 설치한다.

2) 설치확인

터미널에서 다음 명령어를 실행한다.

$ aws --version

위와 같이 버전이 출력되면 제대로 설치가 된 것이다.

 

2. MacOS

다음 두 명령어를 실행한다.

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /

 

3. Linux

다음 명령어를 실행한다. 실행 전 unzip command를 최신으로 업그레이드한다.

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install

4. AWS Configure

 aws configure를 사용하여 지정하는 자격 증명 정보를 홈 디렉터리의 .aws라는 폴더에 있는 credentials라는 로컬 파일에 저장합니다. AWS 리소스에 접근할 때 사용되는 자격 증명 정보를 로컬에 저장하는 것이다.

 

1) aws configure

* linux, macos, windows 동일

$ aws configure
AWS Access Key ID [None]: 엑세스키값
AWS Secret Access Key [None] : 시크릿키값
Default region name [None] : ap-northeast-2
Default output format [None] : json

ap-northeast-2는 서울을 뜻한다.

 

2) aws configuration 확인

$ aws configure list

여기까지 진행되었다면 이제 AWS 환경설정은 끝난 것이다. 이제 파이썬 환경설정을 하면된다.

5. 파이썬 가상환경 생성

1. windows

1) 가상환경 생성

$ python -m venv [가상환경이름]

2) 가상환경 실행

$ [가상환경이름]\Scripts\activate.bat

3) 가상환경 종료

$ deactivate

2. macos, linux

1) 가상환경 생성

$ sudo pip install virtualenv
$ virtualenv [가상환경이름]

2) 가상환경 실행

$ source [가상환경이름]/bin/activate

3) 가상환경 종료

$ deactivate

6. 모듈설치

Windows

$ [가상환경이름]\Scripts\activate.bat 
$ pip install --upgrade pip
$ pip install flask
$ pip install zappa

MacOS, Linux

$ source [가상환경이름]/bin/activate
$ pip install --upgrade pip
$ pip install flask
$ pip install zappa

7. 앱 생성 및 실행

#zappa-app.py
import sys
from flask import Flask
app = Flask(__name__, static_url_path='')
@app.route('/', methods=['GET'])
def index():
     return '안녕! 나는 오도원이야!'
if __name__ == '__main__':
 if len(sys.argv) > 1:
     app.debug = True
     app.jinja_env.auto_reload = True
     app.config['TEMPLATES_AUTO_RELOAD'] = True
     app.run(host='0.0.0.0', port=4000)
 else:
     app.run(host='0.0.0.0')
$ python zappa-app.py test

정상적으로 작동하는 것을 확인했다.

8. zappa init

1) zappa init

zappa init 명령어는 zappa 환경을 세팅하는 것이다.

$ zappa init
  • What do you want to call this environment (default ‘dev’)
    • APIGateway -> stage와 연결된다. 자신이 현재 만드는 환경을 정의해주면된다. Deploy 용도라면 production등으로 정의해주면 된다. 나중에 변경가능하니, 지금은 dev로 정의하자.
  • What do you want to call your bucket? (default ‘zappa-xxxxxx’)
    • 이미 Lambda function 소스를 zip형태로 적재할 S3 Bucket이 있다면 넣어주고, 없다면 네이밍 해주면 해당 버킷이 S3에 생성된다.
  • Would you like to deploy this application globally? (default ‘n’) [y/n/(p)rimary]
    • 글로벌 하게 사용할 것인지를 묻는데, 각 리전마다 람다를 사용해야 할 경우에만, y로 하자. 혹시 y로 한다면, zappa_settings.json에 리전별 config가 생성이 될것이다.
  • Where is your app’s function?
    • 실행 시킬 혹은 실행 시킬 예정인 py파일을 넣어주면 된다. 나같은 경우 zappa-app.py파일의 app을 실행시킬 예정이니 zappa-app.app이라고 넣었다.

2) zappa_settings.json

$ cat zappa_settings.json
{
    "dev": {
        "app_function": "zappa-app.app",
        "aws_region": "ap-northeast-2",
        "profile_name": "pnu-dsc-korea",
        "project_name": "code",
        "runtime": "python3.7",
        "s3_bucket": "zappa-deploy-test"
    }
}
  • app_function : 람다에서 실행시킬 함수를 말한다.
  • aws_region : 람다 서버 리젼
  • profile_name : aws configure profile 이름
  • project_name
    • 람다에 올라갈 프로젝트 이름, default로 폴더명이 된다.
    • 람다에는 [project_name]-[stage_name]으로 올라간다.
  • runtime : 파이썬 버전
  • s3_bucket : 코드를 올릴 s3 버킷 이름

9. zappa 배포

$ zappa deploy [stage_name]

https://sen7o16pi2.execute-api.ap-northeast-2.amazonaws.com/dev가 해당 url이 된다.

AWS 람다에 들어가면 zappa deployment라는 설명으로 어플리케이션이 람다에 배포된 것을 확인할 수 있다.

10. zappa 업데이트

$ zappa update [stage_name]

11. zappa 배포취소

$  zappa undeploy [stage_name]

code-dev 람다함수가 삭제된 것을 확인할 수 있다.

 

반응형

'Development > Python' 카테고리의 다른 글

poetry repo install  (0) 2023.06.27
[zappa] error  (0) 2020.10.13
[Python] 내장함수 id()  (0) 2020.10.06
(Python) if __name__ == "__main__"이란 무엇인가  (0) 2020.10.06
Python. 깊은 복사와 얕은 복사; deep copy & shallow copy  (1) 2020.09.08