Serverless란?
서버리스란 개발자가 서버를 관리할 필요 없이 개발에만 집중 하며 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델이다.
프로덕트를 서버에서 실행시키지 않고, 자원을 분산시켜 함수는 함수대로 DB는 DB대로 각각 나누어 연동시켜 프로덕트를 동작하게 한다고 할 수 있다.
그래서 진짜로 서버가 없는 것이 아니라 그 서버를 관리해야하는 지식의 수준과 번거로움이 많이 줄어들며, 개발자는 배포를 위해 코드를 컨테이너에 패키징하기만 하면 된다는 것이다.
Zappa란?
Zappa(공식 Zappa Gitgub)란 AWS기능들을 활용한 서버리스 구조를 활용해 Python Back-end 코드를 배포하는데 도움을 주는 패키지이다. Zappa를 통해 API Gateway, S3연동같은 작업들을 좀 더 쉽게 할 수 있으며 배포과정도 상당히 쉽게 할 수 있도록 도와준다.
AWS 설정하기
우선 AWS에 회원가입을 해야한다. 자세한 가입 방법은 아래 링크를 참고하면 된다.
▶ 회원가입 따라하기
1. IAM 액세스 키 생성
우측 상단에 계정 클릭후에 [내 보안 자격 증명](Security Credentials) 클릭
-> 액세스 키(액세스 키 ID 및 비밀 엑세스 키) 클릭
-> 새 액세스 키 만들기 클릭
-> 파일 다운로드 (csv file안에 액세스 키와 비밀 키가 있음)
2. AWS CLI2 Download
- Linux에서 AWS CLI 버전 2 설치, 업데이트 및 제거
- macOS에서 AWS CLI 버전 2 설치, 업데이트 및 제거
- Windows에서 AWS CLI 버전 2 설치, 업데이트 및 제거
Linux 환경
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ sudo ./aws/install
설치 완료.
3. AWS Configure
$ 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는 서울을 뜻함.
이렇게 AWS 설정까지 다 끝났으므로 파이썬 환경을 설정하도록 하자.
파이썬 환경설정 하기
파이썬에서 가상환경을 세팅 후 작업할 것이다.
1. 가상환경 Setting
Linux & Mac
- 가상환경 생성
$ sudo pip install virtualenv $ virtualenv [가상환경이름]
- 가상환경 실행
$ source [가상환경이름]/bin/activate
- 가상환경 종료
$ deactivate
Windows
- 가상환경 생성
$ python -m venv [가상환경이름]
- 가상환경 실행
$ [가상환경이름]\Scripts\activate.bat
- 가상환경 종료
$ deactivate
2. 모듈 install
우선 가상환경을 실행 한뒤에 모듈들을 install시켜준다
$ source [가상환경이름]/bin/activate
$ pip install --upgrade pip
$ pip install flask
$ pip install zappa
3. 앱 실행하기
#run.py
import sys
from flask import Flask, redirect, request, jsonify, url_for, render_template
app = Flask(__name__, static_url_path='')
@app.route('/', methods=['GET'])
def index():
return 'hello zappa!!!!!@@'
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 run.py
성공적으로 뜬 것을 확인 했다.
Zappa 환경설정 하기
1. Zappa init
zappa환경을 셋팅하기 위해 $ zappa init
명령어를 사용해준다.
그러면 아래와 같은 질문들이 나올 것이다.
What do you want to call this environment (default 'dev'): dev
...
What do you want to call your bucket? (default 'zappa-*******'): zappa-app
...
...
It looks like this is a Flask application.
What's the modular path to your app's function?
This will likely be something like 'your_module.app'.
We discovered: my_app.app
Where is your app's function? (default 'run.app'): run.app
...
Would you like to deploy this application globally? (default 'n') [y/n/(p)rimary]: n
- 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파일을 넣어주면 된다.
2. zappa_settings.json
- app_function : 람다에서 실행시킬 함수를 말한다.
- aws_region : 람다 서버-> ap-northeast-2는 서울이라는 뜻이다.
- profile_name : aws configure profile 이름
- project_name
- 람다에 올라갈 프로젝트 이름, default로 폴더명이 된다.
- 람다에는 [project_name]-[stage_name]으로 올라간다.
- runtime : 파이썬 버전
- s3_bucket : 코드를 올릴 s3 버킷 이름
3. Zappa 배포하기
zappa deploy dev
deploy 뒤에 아까 zappa 환경을 dev로 만들어주었기 때문에 뒤에 dev를 붙여준다.
https://htvk11xq6l.execute-api.ap-northeast-2.amazonaws.com/dev 라는 링크가 생성되었는데 여기가 내 Flask web app이 띄워지는 곳이다.
잘 보여지는 것을 확인했고, 이제 수정을 했을 때 업데이트를 시켜보겠다.
https://sn9pw7av47.execute-api.ap-northeast-2.amazonaws.com/dev
4. Zappa 업데이트하기
화면에 출력되는 hello zappa 뒤에 느낌표 하나만 오게끔 run.py를 수정하고 업데이트 시켜보자.
$ zappa update dev
를 실행 시키면 수정했던 파일들을 업데이트 시켜주게 된다.
5. Zappa 배포 중단하기
$ zappa undeploy dev
위 명령어를 통해 배포된 Flask앱을 중단 시킬 수 있다.
Zappa Custom domain
https://www.codingforentrepreneurs.com/blog/custom-domains-zappa-projects-django-serverless
https://www.youtube.com/watch?v=jZ7IWmmkHKM&list=PLaUvk0d2cDLt08OCKWqD2csEZu-U8_ZU8&index=5
Reference
https://towardsaws.com/server-less-api-with-zappa-flask-aws-38886bb8df00
https://ohdowon064.tistory.com/304
'개발' 카테고리의 다른 글
BeautifulSoup (0) | 2024.05.13 |
---|---|
Fork된 Repository 업데이트 하기 (0) | 2024.05.13 |
[Flask] SQLAlchemy ORM 활용법 (0) | 2024.05.13 |
Gtithub SHH Key 설정 (0) | 2024.05.13 |
Flask+Vue+Nginx+MySQL Dockerize on Linux - [Setting Up] (0) | 2024.05.13 |
IT/보안