포스팅 개요
이번 포스팅은 AWS Chalice에 대해서 알아보려고합니다.
AWS Chalice는 파이썬(Python) 기반의 serverless microframework로 알려져 있는데요~
serverless? 이게 뭘까요? 이 서버리스(serverless)가 무엇인지도 알아봅니다.
그리고 AWS lambda를 쉽게 사용할 수 있게 지원해주므로 AWS lambda에 대해서도 알아볼거에요.
나아가, AWS Chalice 설치하는 방법, 어떻게 사용하는지도 간단하게 작성하려고 합니다.
해당 포스팅은 아래 글들을 참조하였습니다.
- 핵심 내용을 정말 잘 설명해준 블로그 : https://jangseongwoo.github.io/lambda/chalice_tutorial/
- https://github.com/aws/chalice
- https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/welcome.html
포스팅 본문
이제 본격적으로 AWS Chalice에 대해서 알아보도록 합니다. 먼저, AWS Chalice에 대해서 알아보아야겠죠?
AWS Chalice란?
AWS Chalice란 무엇일까요? 제가 개요에 남긴 출처 중 github에 보시면 chalice github가 있는데요. 거기에 자세히 설명되어 있습니다.
Chalice is a microframework for writing serverless apps in python.
It allows you to quickly create and deploy applications that use AWS Lambda.
It provides:
- A command line tool for creating, deploying, and managing your app
- A decorator based API for integrating with Amazon API Gateway, Amazon S3, Amazon SNS, Amazon SQS, and other AWS services.
- Automatic IAM policy generation
저렇게 영어로 뭐라뭐라 쓰어져있는데요.
쉽게 설명하면 아래와 같습니다.
- AWS labmda를 사용해서 빠른 create, deploy가 가능하도록 해준다.
- 파이썬(Python)을 활용해 serverless app을 사용하기 위한 microfamework이다.
그러면 여기서 또 궁금해지죠. AWS lambda? AWS 람다가 뭐지? 하실겁니다.
아시는 분들은 아시겠지만, 모르시는 분들을 위해 간단하게 언급하고 넘어가겠습니다.
AWS lambda란?
AWS lambda란 AWS에서 제공하는 서버리스(serverless) 서비스입니다. 필요시에만 코드를 실행하고 코드가 실행되지 않을 때는 요금이 부여되지 않는 서비스이죠.
쉽게 말해서, 내가 필요할 때 코드를 실행하고 그때만 어떤 처리를 한 뒤 response를 받고 종료합니다. 그리고 그것에 대한 비용만 처리하면 되는 것이죠.
그렇기 때문에 프로비저닝 상태로 서비스를 유지하는데요. 이는 곧, user 요청사항에 맞게 시스템 자원 등을 할당, 배포해 두었다가 어떤 요청이 들어오면 즉시 사용할 수 있도록 상태를 만들어두는 것입니다.
여기서 serverless란 개념이 나오는데요. 이 서버리스(serverless)란 무엇일까요?
Serverless란?
서버리스(serverless)란 간단히 말해서 application을 실행하기 위한 별도의 서버 set이 필요하지 않고 바로 코드를 실행해주는 서비스입니다. 그래서 고정 비용없이, 사용 시간에 대해서만 비용이 발생하죠.
사실상, aws lambda에서 설명해준 특징 그대로입니다.
즉, 항상 서버가 떠있는 상태가 아니라 내가 필요할 때만 코드를 실행하고 그에 대한 비용을 지불하는 것입니다.
AWS Chalice 설치 및 Chalice 사용 방법
자! 그럼 이 AWS Chalice를 어떻게 활용할 수 있을까요? 또한, Chalice 설치는 어떻게 할까요?
간단하게 해봅시다! 이 튜토리얼은 개요에 나왔던 처음 2개의 링크를 참조해서 진행하였습니다.
먼저, AWS Chalice 설치는 Python 환경에서 진행할 것입니다.
Python이 설치된 환경에서 pip install chalice를 쳐줍니다.
그러면 뭔가 쭉쭉 설치가 될 것입니다. 제 기억이 맞다면 굉장히 많은? 설치가 진행됩니다.
설치가 다 끝나셨다면 이제 프로젝트를 하나 만들어야합니다!
chalice new-project 프로젝트명 을 입력하시면 간단하게 프로젝트를 하나 생성할 수 있습니다
위와 같이말이죠!
자, 이 상태에서 디렉토리 구조를 보면요
이렇게 app.py와 requirements.txt 파일 등이 생성되어 있으실겁니다.
이게 기본적인 셋팅인데요.
지금 아무것도 하지 않는 상태에서 이제 Chalice를 실행해볼게요~
AWS에 배포하지 않고 일단 local 환경에서 AWS Chalice를 실행해보겠습니다.
chalice local --port=8000 의 명령어로 실행하면, local에서 실행이 됩니다.
그러면 Serving on http://127.0.0.1:8000 이라는 문구가 뜨죠?
웹 브라우저를 띄어서 저 주소를 들어가면
짜잔! 이렇게 {"hello": "world"} 가 나오게 됩니다 ㅎㅎ 일반적으로 그냥 hello world만 나오는데 JSON처럼 나오죠
자! 그러면 뭔가 기능을 넣어야겠죠? AWS Chalice의 장점은 REST API 형식으로 데이터를 호출할 수 있습니다.
그렇기 위해서는 아까 app.py를 조금 수정해서 기능을 넣으면 되는데요.
app.py를 아래와 같이 바꿔줍시다.
아까 저희가 들어갔던 localhost:8000을 들어가면 @app.route('/')에 타고 들어가 hello world가 나오게 되었던 것입니다.
이것을 우리만의 path를 만들어보죠!
@app.route('/soojin')과 같이 만들고 그에대한 return 값으로 'msg' : 'i`m soojin'이라고 하겠습니다.
자! 이렇게 저장을 하면 chalice 상에서 자동으로 업데이틀 해줍니다.
웹 브라우저에 다시 들어가서 localhost:8000/soojin 으로 들어가면
방금 우리가 만들었던 그 자료가 나오게 됩니다!
좀 더 다양한 케이스를 만들어볼까요?
아래처럼 만들어보죠.
/check_data/{data}의 형식으로 path를 app.route에 설정합니다.
그러면 {data}는 변수로써 작용되어 아래 datas[data]안에 있는 data에 맞춰지게 됩니다.
그리고 datas는 맨 위에 Python dictionary로 변수를 하나 만들어두었습니다.
따라서, 웹 브라우저에서 localhost:8000/check_data/name 을 하게 되면 이 name이 datas 딕셔너리에 들어가 그 값이 나오게 됩니다!
만약에, 올바르지 않은 값을 넣게 되면?
이렇게 에러가 딱! 나오게 됩니다.
좀 더 해볼게요.
REST API는 GET, PUT, POST, DELETE 연산이 있는데요. AWS Chalice는 REST API를 지원해주기 때문에 GET, PUT 등의 연산도 당연히 가능합니다.
아래처럼요!
위는 GET, PUT의 method를 /soojin/{key}가 왔을 때 받겠다는 기능을 정의한 것입니다. 그러면 GET, PUT 외에는 동작이 되지 않겠다는 것이죠.
즉, 저 soojin 이라는 함수는 GET, PUT만 되는 것입니다.
만약에 PUT으로 데이터가 들어오게 된다면 OBJECT라는 곳에 데이터를 넣고, GET이 오게 되면 데이터를 가져오는 형식으로 함수가 동작이 됩니다.
이것을 조금 쉽게 테스트 하기 위해서 Python 터미널(terminal)에서 http 동작이 되도록 패키지를 하나 설치하겠습니다.
pip install httpie 입니다.
이렇게 쭉쭉 설치를 하면 Python 커널에서 http 명령어를 사용할 수 있습니다.
예를 들어 아래처럼
http GET localhost:8000/soojin/get_test를 해봅니다.
soojin이라는 path에 key 값을 get_test를 넣었는데요. 그걸 GET으로 가져옵니다. 근데, 우리는 아직 데이터를 넣은 것이 없기 때문에 NotFoundError가 나오게 됩니다.
이거를 똑같이 웹 브라우저에서 열어볼까요?
localhost:8000/soojin/get_test로 들어가면 됩니다.
똑같이 나오죠? http를 사용하면 굳이 이렇게 웹 페이지에 들어가지 않아도 바로바로 데이터를 확인할 수 있습니다.
자! 근데 아까 우리가 soojin 이라는 것을 GET, PUT만 가능하도록 했습니다. 그러면 POST와 같이 설정하지 않은 것을 요청하면 어떻게 될까요?
아래처럼 나옵니다.
http POST localhost:8000/soojin/get_test
그러면 에러 메세지가 NotFoundError가 아닌, MethodNotAllowedError로 바뀌었습니다.
즉, POST 연산은 지원하지 않는다! 라는 것이죠.
자, 그러면 GET, PUT 중 이제 PUT을 해봅니다. 이제 데이터를 진짜 넣어보는 것이죠 ㅎㅎ
http PUT localhost:8000/soojin/get_test를 하게 되면 get_test라는 값을 넣게됩니다.
HTTP/1.1 200 OK 라는 메세지가 나오면서 잘 되었다는 메세지가 나옵니다.
즉, 성공한 것이죠!
그러면 바로 GET 해봐야죠?
get을 하게 되면 아까처럼 NotFoundError가 나오지 않고 get_test 값이 나오는 것을 확인할 수 있습니다.
결론
이번 포스팅은 AWS Chalice에 대해서 알아보았습니다.
그리고 부가적으로 필요한 정보인 AWS lambda와 Serverless에 대한 개념도 알아보았구요.
간단하게 local에서 AWS Chalice를 설치하고 사용하는 방법도 알아보았습니다.
다음 포스팅에서는 실제 AWS lambda에 AWS Chalice를 배포하고 사용하는 방법에 대해서 작성하겠습니다.
'Data Engineering 및 Infra' 카테고리의 다른 글
kubeflow pipeline 사용해보기 - kubeflow pipeline example with iris data (22) | 2020.04.07 |
---|---|
kubeflow 설치하기 - Machine Learning pipeline kubeflow install (14) | 2020.04.05 |
머신러닝 파이프라인이란? - ML Pipeline에 대하여 (6) | 2020.03.29 |
쿠버네티스(kubernetes) example - Python Django 웹 페이지 배포하기 (8) | 2020.03.22 |
Data Version Control(DVC)이란? - Data와 ML model의 버전(version)을 관리하자. (4) | 2020.02.13 |