chalice 튜토리얼 (SQS + Lambda) Part I/III

아카·2021년 1월 24일
0

AWS

목록 보기
3/6

읽기 전에

이 포스팅은 많은 부분을 생략하고 있습니다. 여기서 설명하지 않은 부분이 궁금하시거나 실행이 되지 않은 부분이 있으면 댓글로 달아주시면 감사하겠습니다.

서버리스 프레임워크

AWS Lambda를 사용한다고 생각해봅시다. 간단한 로직 하나만을 다뤄야 한다고 생각하면, 개발자 입장에서는 처리하기가 쉽습니다. 그냥 AWS Lambda 콘솔에서 코드 몇줄 친 다음 Deploy하면 되니까요. 하지만 로직이 복잡해지고, 그 로직에 필요한 라이브러리들이 엉키기 시작하면 문제가 발생합니다. 필연적으로 귀찮아지는 거죠.

환경 변수를 추가해야 될 때나, 비슷한 함수인데 요구하는 라이브러리가 다르다거나, 배포를 자동화해서 내가 GIT에 코드를 업데이트하면 자동으로 배포하고 싶을 때 등등... 개발자들은 이런 귀찮은 것들을 싫어합니다(저만 그런 건지는 모르겠습니다). 때문에 이것들을 관리해줄 서버리스 프레임워크들이 하나 둘 씩 나오기 시작했습니다.

서버리스 프레임워크들의 종류는 여러가지가 있겠지만, 이 포스팅에서는 AWS Chalice를 사용하도록 하자.

Chalice?

서버리스 프레임워크다. 자세한 것은 여기를 참조해 주세요.

장점은

  • AWS가 Owner라서 지원 끊길 걱정 별로 없음
  • Flask를 사용해 봤다면 금방 익숙해질 만큼 사용하기 쉬움

단점은

  • Python만 지원
  • AWS 리소스만 지원

Python을 사용하는 입문자라면 이 프레임워크로 입문해보는 것도 나쁘지는 않다고 생각합니다.

이 포스팅에서 다루어 보는 것

SQS와 Lambda를 AWS 콘솔에 최대한 접근하지 않고 만들어봅시다.
(GUI에 익숙해지기 보다는 향후 자동화를 위해서 명령어 타이핑에 익숙해지는 것을 권장합니다.)

여기서는 aws configure와 SQS queue 만들기를 제외한 작업들은 하지 않을 예정입니다. 따라하다가 안 되는 부분이 있다면, 언제든지 이 블로그에 문의 댓글을 남겨 주세요.

우리가 이번에 만들려는 것은 다음과 같습니다.

  1. 특정 주소에 접속하면 큐에 메세지를 등록하는 Lambda Function
  2. 큐에 메세지가 쌓일 때마다 하나씩 그 메세지를 읽는 Lambda Function

우선은, 특정 주소에 접속을 하면 큐에 메세지를 등록하는 Lambda Function을 만들어봅시다. 특정 주소에 접속을 했다는 것을 알기 위해 API Gateway를 사용합니다. /request/blah...라는 URL에 접속을 하면 큐에 {"name": "blah..."}라는 메세지를 push하는 Lambda Function을 만들어봅시다.

첫번째로, 새 폴더를 만듭시다.
그곳에 chalice를 설치하고, 새 프로젝트를 하나 만듭시다.

mkdir chalice-test
cd chalice-test
pip3 install chalice
chalice new-project app

app이라는 폴더가 생기고, 그곳의 app.py를 수정하면 됩니다.

  1. 특정 주소에 접속하면 큐에 메세지를 등록하는 Lambda Function을 만들어봅시다.
    우선은, 큐에 메세지를 등록하지 않고 사용자가 정해진 URL에 접속했을 때 호출되는 Lambda Function을 만들어 봅시다.
... (어쩌구 저쩌구)
@app.route('/request/{name}')
def index(name):
    return {'user': name}

flask를 사용해 보았다면 아주 익숙한 구조입니다. route에 있는 것은 유저가 접속한 URL을 파싱해서, URL이 ~/request/{name}이라면 name이라는 변수에 {name} 값을 넣는다는 뜻입니다다. 예를 들면 ~/request/zetbouaka 라는 URL에 접속했다면 name 변수에 zetbouaka라는 값을 넣습니다. 이 Lambda Function을 실제로 AWS 상에 배포해보자. 배포는 간단합니다.

chalice deploy

하면 다음과 같은 메세지가 반환된다.

Creating deployment package.
Updating policy for IAM role: app-dev
Updating lambda function: app-dev
Updating rest API
Resources deployed:
  - Lambda ARN: ...
  - Rest API URL: https://{{random api string}}.execute-api.ap-northeast-2.amazonaws.com/api/

이 메세지를 보았다면, 다음과 같은 사실을 알 수 있습니다.

  • 이 Lambda Function이 배포에 성공해서,
  • https://blahblahblah.execute-api.ap-northeast-2.amazonaws.com/api/로 접근할 수 있다.

우리가 만든 것은 https://{{random api string}}.execute-api.ap-northeast-2.amazonaws.com/api/request/{name}의 URL에 반응하는 Lambda Function이므로, 다음과 같이 접속해보자.

https://{{random api string}}.execute-api.ap-northeast-2.amazonaws.com/api/request/zetbouaka

그러면 다음과 같은 문자가 브라우저에 나타날 것입니다.

{"user":"zetbouaka"}

여기까지 잘 됬다면, 우리가 만든 Lambda Function이 URL을 성공적으로 받아들일 수 있다는 것이다.

다음 포스팅에서는 실제로 SQS에 메세지를 보내는 Lambda Function을 만들어봅시다.

profile
코딩한량.

0개의 댓글