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を使用して最高のパフォーマンスを実現します。
-
サーバーレスRedisのパイプラインRESTAPI
Upstashは、ネイティブのRedisAPIに加えてRESTAPIをサポートしています。 REST APIは、開発者がサーバーレスおよびエッジ関数からの接続の問題なしにRedisにアクセスするのに役立ちます。ただし、同じ関数で複数のRedisコマンドを実行する場合、これはデータベースを複数回呼び出すことを意味します。コミュニティメンバーの1人(@MasterGates)が、Discordチャンネルで素晴らしい提案をしてくれました。パイプラインAPI: パイプラインAPI Pipeline APIは、RedisPIPELINEコマンドをRESTAPIに適合させたものです。 1つのhtt
-
CloudflareワーカーとのRedis@Edge
エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、