-
[AWS] Lambda + API Gateway 사용기 ☁️기타 2022. 9. 18. 02:32
https://ko.wikipedia.org/wiki/AWS_%EB%9E%8C%EB%8B%A4 유저에게 발송하던 알림톡을 AWS Lambda에 구성하기로 했다. 이런 결정을 하게 된 이유는 1) 알림톡 벤더사를 변경하기로 결정하면서 현재 구조를 고집할 필요가 없어졌고 2) 프로젝트마다 알림톡 템플릿이 분산되어있어 관리가 힘들었던 탓이다. AWS Lambda를 사용하게 된다면 현재 4개의 프로젝트에 분산되어있는 템플릿을 Lambda 함수 코드 하나에서 관리할 수 있게 된다. 알림톡 수정이 필요한 경우, Lambda 함수에 있는 코드만 신경 써도 된다는 이야기다! (물론 알림톡을 호출하는 부분도 수정해야 하지만 이전에 비해 일이 줄어든다.)
람다의 스펠링을 Lamda로 알고 있었을 정도로 람다에 대해 무지했던 상태에서 작업을 진행했으며, 이 작업을 통해 알게 된 내용을 기록해본다.
1. 람다 함수 생성 방법
함수 이름을 입력 후 언어 및 버전을 선택한 뒤 함수 생성 버튼을 클릭하면 람다 함수 생성은 끝난다. 생성한 함수를 클릭 하면 코드를 작성할 수 있다.
함수를 실행하기 위해선 트리거를 생성해야 한다. 트리거 추가 버튼을 클릭하자.
특정 API를 호출하면 람다 함수가 실행되기를 원했기 때문에 API Gateway를 선택했다.(이 외에도 여러 가지 트리거 종류를 제공하니 필요에 따라 선택하면 된다.) 서버에서 POST 메소드를 통해 API를 호출할 것이고 보안적인 측면에서 API key를 사용할 것이므로 REST API를 선택했다.
API Gateway 페이지로 이동하면 생성한 API를 확인할 수 있다. API를 클릭하고 API key를 확인하자.
헤더의 x-api-key 값으로 API key를 넣어준 뒤 API 호출하면 정상적인 응답 값을 확인할 수 있다.
2. 테스트 및 로그 확인
Test 버튼 옆에 있는 화살표를 클릭 후 테스트 이름과 JSON 타입의 파라미터를 입력한다. 그 후 Test 버튼을 클릭하면 테스트 결과를 확인할 수 있다.
트리거를 통해 람다 함수가 실행된 경우, 모니터링 > CloudWatch에서 로그 보기에서 로그를 확인할 수 있다.
3. AWS Lambda 런타임을 Node.js 16.X에서 Python 3.9로 변경한 이유
Node.js 서버에서 트리거를 통해 AWS 람다 함수를 정상적으로 실행시키고 그에 대한 응답까지 받았다. 그런데 한 가지 문제가 생겼다. 람다 함수에서 외부 API를 호출해야 하는데, 이에 필요한 axios 및 몇 가지 모듈이 없다는 에러가 발생했다. 모듈을 람다 함수에서 사용하기 위해서 모듈이 설치된 폴더를 압축해서 업로드해야 된다. 그런데 이 과정이 너무나 번거롭게 느껴졌다. 그래서 생각한 방법은 Python을 이용하는 것이었다. Python 내장 라이브러리에 urllib3이 있기 때문에 별도 설치 없이 외부 API를 호출할 수 있었다.
4. 기타 사항
AWS 웹사이트에서 비용 계산기를 제공하는 건 처음 알았다. 비용이 걱정된다면 사용량을 예측하여 계산해보면 좋을 것 같다. https://calculator.aws/#/addService/Lambda
AWS Pricing Calculator
calculator.aws
참고 자료
- https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-%EB%9E%8C%EB%8B%A4Lambda-%EC%9A%94%EA%B8%88-%EC%A0%95%EC%B1%85-%EA%B3%84%EC%82%B0%EB%B2%95
- https://docs.aws.amazon.com/ko_kr/apigateway/latest/developerguide/http-api-vs-rest.html
- https://aws.amazon.com/ko/premiumsupport/knowledge-center/lambda-deployment-package-nodejs/
- https://medium.com/signal9/aws-lambda-layer-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-node-js-8c299a1d0a6f
'기타' 카테고리의 다른 글
Node.js 프로젝트 수동 배포 (0) 2023.03.27 비인증 결제 백엔드 개발할 때 만난 이슈와 삽질 기록 (0) 2022.12.29 윈도우 프로세스 확인 및 강제 종료 명령어 (0) 2022.07.13 맥북 피그마 단축키 (0) 2022.05.01 동일한 내용의 메일을 중복해서 보낼 시 Gmail에서 내용 숨김처리됨 (0) 2022.02.25