Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

RedisRESTを使用したステートフルAWSLambda

AWS Lambdaは、サーバーレススペースのパイオニアです。多くの開発者は、サーバーレスが開発の未来であると考えています。真の従量制モデルを提供し、バックエンドインフラストラクチャのメンテナンスとスケーリングから解放されます。しかし、それには課題も伴います。それらの1つはその無国籍です。状態を外部データストアに保持する必要があります。残念ながら、人気のあるデータストアのほとんどは接続ベースです。ただし、この投稿で説明したように、サーバーレスでは接続の管理が面倒になる可能性があります。そのため、UpstashRedis上に高性能RESTAPIを開発しました。このブログ投稿では、RESTAPIを使用してAWSLambdaとUpstashRedisに非常に基本的なステートフル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 };
};

以下のように、APIエンドポイントをserverless.ymlに追加します:

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を出力します。

メモ
  • 最高のパフォーマンスを得るには、データベースとAWSLambda関数が同じリージョンにある必要があります。
  • REST APIのおかげで、データベース接続を管理する必要がなく、Redisクライアントも必要ありません。
  • APIトークンを公に共有しないでください。誤って漏洩した場合は、データベースのパスワードをリセットすることで取り消すことができます。
  • 1つの関数で複数のコマンドを実行する場合は、パイプラインAPIを使用して最高のパフォーマンスを実現します。

  1. サーバーレスRedisのパイプラインRESTAPI

    Upstashは、ネイティブのRedisAPIに加えてRESTAPIをサポートしています。 REST APIは、開発者がサーバーレスおよびエッジ関数からの接続の問題なしにRedisにアクセスするのに役立ちます。ただし、同じ関数で複数のRedisコマンドを実行する場合、これはデータベースを複数回呼び出すことを意味します。コミュニティメンバーの1人(@MasterGates)が、Discordチャンネルで素晴らしい提案をしてくれました。パイプラインAPI: パイプラインAPI Pipeline APIは、RedisPIPELINEコマンドをRESTAPIに適合させたものです。 1つのhtt

  2. CloudflareワーカーとのRedis@Edge

    エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、