Computer >> 컴퓨터 >  >> 프로그램 작성 >> Redis

Redis REST를 사용한 상태 저장 AWS Lambda

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를 사용하여 최상의 성능을 얻으세요.