Flask + Serverless — AWS Lambda의 API를 사용하는 쉬운 방법
해결책
Flask와 서버리스 프레임워크의 강력한 콤보를 사용합니다. Django와 같은 모든 WSGI 애플리케이션도 작동할 수 있습니다. 견적 서비스를 이용하겠습니다.
레시피
장치에 다운로드 및 설치Python한 다음 pip 및 virtualenv 패키지를 설치합니다.
pip install virtualenv
서버리스 프레임워크 설치see full instructions
$ npm install -g serverless
기본 폴더를 만들고 "따옴표"라고 부를 수 있습니다. 그런 다음 python venv를 만듭니다.
mkdir quotes
cd quotes
virtualenv venv -p python3
(venv) pip install Flask
(venv) pip freeze > requirements.txt
이제 venv 폴더가 생기고 quotes/venv/Scripts로 이동하여 "활성화"를 실행하여 가상 환경을 활성화합니다.
기본 폴더/quotes에서 견적 서비스를 포함할 app.py 파일을 만든 다음 아래 정보를 추가합니다.
from collections import namedtuple
from random import choice
from flask import Flask, jsonify
Quote = namedtuple("Quote", ("text", "author"))
quotes = [
Quote("Talk is cheap. Show me the code.", "Linus Torvalds"),
Quote("Programs must be written for people to read, and only incidentally for machines to execute.", "Harold Abelson"),
Quote("Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live",
"John Woods"),
Quote("Give a man a program, frustrate him for a day. Teach a man to program, frustrate him for a lifetime.", "Muhammad Waseem"),
Quote("Progress is possible only if we train ourselves to think about programs without thinking of them as pieces of executable code. ",
"Edsger W. Dijkstra")
]
app = Flask(__name__)
@app.route("/")
def hello_from_root():
return jsonify(message='Hello from root!')
@app.route("/quote", methods=["GET"])
def get_random_quote():
return jsonify(choice(quotes)._asdict())
서버리스 프레임워크와 연결하십시오. 그렇게 하려면 serverless.yml 파일(루트에서)을 수동으로 생성해야 합니다. 파일은 다음과 같습니다.
service: quotes #name this whatever you want
provider:
name: aws
runtime: python3.6
region: us-east-1
memorySize: 128
2개의 서버리스 플러그인을 설치합니다. 첫 번째로 필요한 것은 Lambda가 WSGI(Flask/Django가 사용하는 프로토콜)를 이해하도록 하는 것입니다. 두 번째는 Serverless가 Python 요구 사항을 배포 패키지에 포함하도록 만드는 것입니다.
$ sls plugin install -n serverless-wsgi
$ sls plugin install -n serverless-python-requirements
필요한 플러그인 및 추가 정보로 serverless.yml 파일을 업데이트합니다.
service: quotes-serverless #name this whatever you want
provider:
name: aws
runtime: python3.6
region: us-east-1
memorySize: 128
plugins:
- serverless-wsgi
- serverless-python-requirements
custom:
wsgi:
app: app.app
packRequirements: false
functions:
app:
handler: wsgi_handler.handler
events:
- httpApi: '*'
deprecationNotificationMode: error #add this for debugging
configValidationMode: error #add this for debugging
`);
해당 플러그인에 대한 구성을 보유하는 새 섹션(사용자 정의)을 볼 수 있습니다. wsgi 부분은 앱이 있는 위치를 말하고 요구 사항 패킹을 해제합니다. 마지막 부분(함수)은 서비스에 포함된 내용을 선언합니다. 하나의 서비스 내에서 더 많은 기능을 가질 수 있으며 특정 권한이 필요합니다. 이 경우 모든 요청은 설치된 플러그인에서 제공하는 WSGI 핸들러를 통해 처리됩니다.
requirements.txt 업데이트
Flask==1.1.4
Werkzeug==1.0.1
markupsafe==2.0.1
'Werkzeug' 버전을 확인하세요. 배포하는 동안 오류가 발생할 수 있습니다.
서비스를 테스트하기 위해 로컬 배포를 수행하고 다음을 실행합니다.
$ serverless wsgi serve
server을 특정 경로로 열 수 있습니다(예: http://localhost:5000/).
use /quotes to see the random quotes.
프로젝트를 AWS에 배포하기 전에 다음을 수행해야 합니다create an account.
see more instruction in here
프로젝트 폴더의 루트에 새 파일 nodemon.json을 편집하여 환경 변수를 저장하는 데 사용할 파일을 편집합니다. nodemon을 사용하지 않는 경우 .env 파일을 생성합니다.
set AWS_ACCESS_KEY_ID=<your-key-here>
set AWS_SECRET_ACCESS_KEY=<your-secret-key-here>
# AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY are now available for serverless to use
serverless deploy
# In Linux use 'export' instead of 'set'
프로젝트를 배포하고 아래 명령을 실행합니다.
$ serverless deploy
이제 endpoint에서 서버를 볼 수 있습니다. AWS Cloudformation에서 이제 배포된 프로젝트의 스택이 있습니다.
If you get an internal error or want to see recent logs, open CloudWatch in your AWS console or just type: serverless logs -f app
이 블로그contains와 함께 이 저장소를 자유롭게 방문하십시오.
Reference
이 문제에 관하여(Flask + Serverless — AWS Lambda의 API를 사용하는 쉬운 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/icchatechnologies/flask-serverless-api-in-aws-lambda-the-easy-way-416l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)