반드시 알아가야 할 것
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 가입하기
위 링크에 자세하게 나와있어서 참고하세요. MFA 활성화는 생략해도 좋습니다. 불안하시면 하는 걸 추천합니다.
2. IAM 액세스 키 생성
AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스이다.
1. 우측 상단 계정 클릭 후 [내 보안 자격 증명 클릭]
2. 액세스 키 탭에서 새 액세스 키 생성 클릭
생성되는 root_key csv파일을 다운로드 받는다.
3. AWS CLI2 설치
- Linux에서 AWS CLI 버전 2 설치, 업데이트 및 제거
- macOS에서 AWS CLI 버전 2 설치, 업데이트 및 제거
- Windows에서 AWS CLI 버전 2 설치, 업데이트 및 제거
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]
AWS 람다에 들어가면 zappa deployment라는 설명으로 어플리케이션이 람다에 배포된 것을 확인할 수 있다.
10. zappa 업데이트
$ zappa update [stage_name]
11. zappa 배포취소
$ zappa undeploy [stage_name]
'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 |