Flask &Zappa를 사용하여 서버 없는 마이크로 서비스 배포
16700 단어 pythonawsmicroservicesserverless
간단한 소개👇
이 블로그에서 우리는 Zappa라는 훌륭한 배치 도구를 볼 것이다.우리는 3분 안에 AWS에서 Flask를 사용하여 서버 없는 마이크로 서비스를 배치할 것이다.사람의 마음을 감동시키다.
Google의 작은 마이크로 서비스는 API 단점으로 JSON 응답 형식으로 무작위 데이터 집합을 되돌려줍니다.source code here을 볼 수 있습니다.우리 시작합시다!
선결 조건:
자파가 뭐야?🔍
Zappa는 AWS Lambda+API 게이트웨이에서 서버, 이벤트 구동 없이 파이썬 앱을 쉽게 구축하고 배치할 수 있는 도구다.
파이썬 프로그램의 '서버 없음' 웹 트레이드로 볼 수 있습니다.즉, 무제한으로 확장되고, 다운타임이 전혀 없으며, 유지 보수가 전혀 없으며, 현재 배포의 일부에 불과합니다.
프로젝트 작성✅
우리가 해야 할 첫 번째 일은 Flask와 Zappa를 설치하는 가상 환경을 만드는 것이다.일을 질서정연하게 하기 위해서, 나는 나의
src
폴더를 추가하는 것을 좋아한다. 그 중에는virtualenv 폴더에 있는 응용 프로그램 파일이 포함되어 있다.$ virtualenv -p python3 persongenerator
$ cd persongenerator && source bin/activate
$ mkdir src && cd src
$ pip install flask zappa
상기 명령을 실행하면 app.py
이라는 새 파일을 만들고 아래에 코드 세그먼트를 추가합니다.Flask 코드는 매우 간단합니다. 우리는 Flask 대상을 만들고 그 위에 루트 장식 함수를 추가했습니다. 이 함수는 우리의 경로를 정의합니다.이 예에서는 "/"이므로 홈 페이지입니다.from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, world!", 200
# This is for local development
if __name__ == '__main__':
app.run()
flask run
을 실행하고 브라우저 localhost:5000
을 방문하여 Hello World 응용 프로그램이 정상적으로 작동하는지 확인할 수 있습니다좋아, 좋아, 일을 시작했어.배치할 때가 됐어!
준비됐습니다.배포!🚀
우선 이 애플리케이션에 AWS S3 버킷을 생성했는지 확인합니다.이 작업은 AWS 콘솔로 이동한 다음 위쪽 메뉴의 링크 서비스에서 수행할 수 있습니다.그런 다음 제목 저장소에서 S3 링크를 클릭합니다.
버킷 만들기 단추를 누르고 버킷을 추가합니다.
주의: 이 버킷은 정적 사이트가 아니기 때문에 사이트 파일을 포함하지 않습니다.그러니까 이 통은 공개할 필요 없어.나는 잠시 후의 게시물에서 왜 우리가 이 통을 필요로 하는지 설명할 것이다.
프로젝트 루트 디렉터리에
zappa_settings.json
이라는 새 파일을 만듭니다.이것은 기본적으로 우리의 자파 설정이다.{
"dev": {
"s3_bucket": "your_s3_bucket",
"app_function": "app.app"
}
}
이것은'dev'라는 환경을 정의합니다. (잠시 후'staging '과'production' 환경을 추가해야 할 수도 있습니다.)또한 배포할 S3 스토리지 통의 이름도 정의합니다.마지막으로 Zappa는 WSGI와 호환되는 함수를 가리키며 이 예에서는 Flask app 대상입니다.이제 우리는 배치할 준비가 되었다!잠깐만요.뭐?!😱
네, 농담 아니에요.다음 명령을 실행합니다.
$ zappa deploy dev
우리의 마이크로 서비스는 아직 살아 있다.명령줄 프롬프트에 표시되는 URL 끝점은 무엇입니까?너무 빨라!🔥🔥그래.천천히.우리가
zappa deploy dev
명령을 실행할 때, 막후에서 도대체 무슨 일이 일어났습니까?자파장:
"Hello World"마이크로 서비스를 확장하고 다음 부분에 랜덤 인원 생성기를 만듭니다.
랜덤 캐릭터 생성기 만들기👥
우선 프로젝트 루트 디렉터리에
functions.py
이라는 파일을 만듭니다.Flask 보기에 논리를 채우는 것이 아니라 프로그램에 논리를 추가할 것입니다.나는 구글을 시작해서 유행하는 이름과 성 목록을 검색했다.나는
first_name.txt
과 last_name.txt
이라는 두 개의 텍스트 파일에 이런 내용을 추가했다.이 텍스트 파일은 Github repo에서 찾을 수 있습니다!그래서 이 텍스트 파일에서 무작위 이름을 선택하려면 작은 함수가 필요합니다. (무작위 이름과 성이 필요하기 때문입니다.)코드를 쓰겠습니다.
import random
def random_line(filename):
with open(filename) as f:
lines = f.readlines()
return random.choice(lines).strip()
이 함수는 파일 이름을 매개 변수로 하여 이름과 성 텍스트 파일을 반복해서 사용할 수 있습니다.그래서 우리는 파일을 열고 무작위로 한 줄을 선택해서 그것을 되돌려줍니다.나는 이름 뒤에 빈칸이 없도록 .strip()
을 쳤다.좋아, 멋있어. 그래서 우리는 무작위 이름과 성씨를 얻을 수 있는 방법이 있어.현재 무작위 주소로 우리의 데이터 집합을 완성합니다.나는 인터넷에서 300개의 무작위 주소가 포함된 JSON 파일을 찾았다.형식은 다음과 같습니다.
{
"addresses": [
{
"address1": "1745 T Street Southeast",
"address2": "",
"city": "Washington",
"state": "DC",
"postalCode": "20020",
"coordinates": {
"lat": 38.867033,
"lng": -76.979235
}
},
{
"address1": "6007 Applegate Lane",
"address2": "",
"city": "Louisville",
"state": "KY",
"postalCode": "40219",
"coordinates": {
"lat": 38.1343013,
"lng": -85.6498512
}
}
......
]
}
그래서 우리는 이 그룹에서 무작위 주소를 얻기 위해 다른 함수를 작성해야 한다. 그리고 이 두 함수를 연결하는 최종 함수가 필요하다.이 코드는 매우 간단하기 때문에 기술적으로 말하자면, 우리도 하나의 함수에서 모든 코드를 작성할 수 있고, 심지어는 Flask 보기에 직접 쓸 수 있다.그러나 나는 코드를 작은 블록으로 나누는 것을 좋아해서 모든 내용을 다시 사용할 수 있고 오류가 발생하기 쉽다.응용의 크기를 막론하고 나는 이 원칙을 견지한다.
알겠습니다. 파이썬 함수에서 JSON 파일을 열고 무작위 주소를 되돌려야 합니다.다음과 같은 코드를 사용할 수 있습니다.
import random
import json
def random_address(filename):
with open(filename) as f:
data = json.load(f)
random_address = random.choice(data['addresses'])
return random_address
우리 이전의 함수 같죠?따라서 우리는 JSON 파일을 열고 json.load
을 호출합니다. 이것은 우리의 JSON을 Python 사전으로 변환합니다.random.choice
으로 전화를 걸기 위해서 목록이 필요합니다.그래서 우리는 data['addresses']
을 사용하여 우리가 원하는 형식을 얻을 수 있습니다. 마지막으로 우리는 우리의 무작위 주소로 돌아갑니다!마지막 함수를 계속합시다. 이 두 함수를 무작위 데이터 집중에 연결합니다.
import random
import json
def get_random_person():
data = random_address('address.json')
data['firstName'] = random_line('first_name.txt')
data['lastName'] = random_line('last_name.txt')
return data
여기에서 우리는 우선 무작위 주소를 얻어 변수 data
에 저장합니다.이 변수는 우리의 사전을 포함한다.그리고 우리는 새 키를 하표로 사용하고 random_line()
함수를 사용하여 그 값을 분배하여 무작위 이름을 얻는다.마지막으로, 우리는 데이터를 되돌려줍니다.전체
functions.py
파일은 다음과 같습니다.import random
import json
def random_line(filename):
with open(filename) as f:
lines = f.readlines()
return random.choice(lines).strip()
def random_address():
with open('address.json') as f:
data = json.load(f)
random_address = random.choice(data['addresses'])
return random_address
def get_random_person():
data = random_address()
data['firstName'] = random_line('first_name.txt')
data['lastName'] = random_line('last_name.txt')
return data
이제 업데이트 app.py
파일만 남았습니다.따라서, 여기에서 우리는 우리가 만든 함수를 가져오고, 우리의 마이크로 서비스에 추가 Flask 단점을 추가합니다.Flask에 내장된 jsonify
을 사용하여 Python 사전을 올바른 JSON으로 변환합니다.from flask import Flask
from flask import jsonify
from functions import get_full_person
app = Flask(__name__)
@app.route('/')
def index():
return "Hello, world!", 200
@app.route('/random-person')
def get_person():
data = get_full_person()
return jsonify(data)
# This is for local development
if __name__ == '__main__':
app.run()
이제 남은 것은 다음 Zappa update 명령으로 서버가 없는 Lambda 함수를 업데이트하는 것입니다.이것은 자동으로 모든 코드를 업데이트합니다. 새 randomperson 단점은 dev/randomperson에서 사용할 수 있습니다.$ zappa update dev
curl
으로 빠르게 테스트해 보겠습니다.$ curl 'https://xdsk3y7413.execute-api.eu-central-1.amazonaws.com/dev/random-person'
답변은 다음과 같습니다.{
"address1":"8502 Madrone Avenue",
"address2":"",
"city":"Louisville",
"coordinates":{
"lat":38.1286407,
"lng":-85.8678042
},
"firstName":"Jennifer",
"lastName":"Jenkins",
"postalCode":"40258",
"state":"KY"
}
매우 매력적으로 일한다!😄결론⚡
자, 이제 Flask와 Zappa를 사용하여 서버가 없는 마이크로 서비스를 배치하는 것이 얼마나 쉬운지 보실 수 있습니다!
이전 블로그 글에서도 람다 함수를 검토했지만 자파와 같은 배치 도구는 100배 쉬워졌다.다음 단계는 저희 마이크로 서비스에 사용자 정의 영역을 추가하는 것입니다. 이것은 다른 글에서 소개할 것입니다.
다음에 또 만나요!👋
Reference
이 문제에 관하여(Flask &Zappa를 사용하여 서버 없는 마이크로 서비스 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rafrasenberg/deploying-a-serverless-microservice-with-flask-zappa-4c7b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)