AWS Lambda는 서버리스 공간을 개척했습니다. 많은 개발자들은 서버리스가 개발의 미래라고 생각합니다. 진정한 종량제 모델을 제공하고 백엔드 인프라의 유지 관리 및 확장을 덜어줍니다. 하지만 도전도 따릅니다. 그 중 하나는 무국적 상태입니다. 외부 데이터 저장소에 상태를 유지해야 합니다. 불행히도 대부분의 인기 있는 데이터 저장소는 연결 기반입니다. 그러나 이 게시물에서 설명했듯이 서버리스에서는 연결 관리가 어려울 수 있습니다. 그렇기 때문에 Upstash Redis 위에 고성능 REST API를 개발했습니다. 이 블로그 게시물에서는 REST API를 사용하여 AWS Lambda 및 Upstash Redis에서 매우 기본적인 상태 저장 API(페이지 카운터)를 구현합니다.
라이브 데모 보기:https://3jyz1n07o8.execute-api.us-east-1.amazonaws.com/count
코드 참조:https://github.com/upstash/examples/tree/master/aws-lambda-redis-rest
프로젝트 설정
서버리스 프레임워크를 사용하여 애플리케이션을 배포합니다.
git:(master) ✗ serverless
Serverless: No project detected. Do you want to create a new one? Yes
Serverless: What do you want to make? AWS Node.js
Serverless: What do you want to call this project? aws-lambda-redis-rest
Project successfully created in 'aws-lambda-redis-rest' folder.
코드
npm install node-fetch
를 통해 가져오기 설치 . 그런 다음 Upstash 콘솔에서 데이터베이스를 생성합니다. REST API 버튼을 클릭하고 URL과 토큰을 복사합니다. 아래와 같이 handler.js를 업데이트합니다.
const fetch = require("node-fetch");
module.exports.hello = async (event) => {
const url =
"https://us1-last-panther-33620.upstash.io/incr/counter?_token=AACQgMzYyNGM0OGMtZWQ3MC00OTRlLWFmOGEtODc3ZWQxYWQyZGJjZjgyOTlkM2JhNWIxE3OTJlNmE2NGVjNGM=";
let data = await fetch(url);
let result = await data.text();
return { statusCode: 200, body: result };
};
아래와 같이 serverless.yml에 API 엔드포인트를 추가합니다.
service: aws-lambda-redis-rest
frameworkVersion: '2'
provider:
name: aws
runtime: nodejs12.x
lambdaHashingVersion: 20201221
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /count
method: get
실행 및 배포
로컬에서 다음과 같은 기능을 수행할 수 있습니다.
serverless invoke local -f hello
다음을 사용하여 배포할 수 있습니다.
serverless deploy
이 명령은 브라우저에서 확인할 수 있는 URL을 출력합니다.
메모
- 최상의 성능을 위해서는 데이터베이스와 AWS Lambda 함수가 동일한 리전에 있어야 합니다.
- REST API 덕분에 데이터베이스 연결을 관리할 필요가 없고 Redis 클라이언트가 필요하지 않습니다.
- API 토큰을 공개적으로 공유하지 마십시오. 실수로 유출된 경우 데이터베이스의 비밀번호를 재설정하여 철회할 수 있습니다.
- 하나의 함수에서 여러 명령을 실행하려면 파이프라인 API를 사용하여 최상의 성능을 얻으세요.