🐡

Cloudflare Workers からMomento Cacheを呼び出す その2 (WEB-SDK版)

2023/09/15に公開

https://momentocommunity.connpass.com/event/296165/
こちらのイベント用に前回、Cloudflare Workers からMomento Cacheを呼び出すという記事をアップしました。Momentoからは2種類のDeploy方法が提供されています。http-api版とweb-sdk版です。
前回の記事ではhttp-api版を触りましたが、今回の記事ではweb-sdk版を触ります。

早速やってみる

まずは前回の記事を終わらせておきましょう。完了したら作業開始です。手順はここにあります。
https://github.com/momentohq/client-sdk-javascript/tree/main/examples/cloudflare-workers/web-sdk
以下の記載がありました。

The Web SDK is heavier-weight than using Momento's HTTP API; you need to add a dependency on the SDK. However, it supports the full Momento API (including collections like Dictionaries and SortedSets, plus the ability to publish to Momento Topics). It also has a complete TypeScript/JavaScript API that makes it simpler to write code to interact with Momento. This can save you time and effort when developing your Worker.

HTTP-API版に比べると少し処理が重たいようです。パフォーマンスにこだわっているんだなぁ、と感じました。この辺り技術に正直なのはCloudflareと少し似ているかもしれないです。まず以下のコマンドでSDKを展開します。

git clone https://github.com/momentohq/client-sdk-javascript.git
cd client-sdk-javascript/examples/cloudflare-workers/web-sdk
npm install

その後wrangler.tomlを以下のように修正します。

name = "momento-cloudflare-worker-web"
main = "src/worker.ts"
compatibility_date = "2023-07-10"

[vars]
MOMENTO_CACHE_NAME = "demo-cache"

#を取り除いて使いたいキャッシュの名前を"で囲んで入力します。
次に.dev.varを修正します。
MOMENTO_API_KEYとなっていますが、正しくはMOMENTO_AUTH_TOKENなのでそれに書き直します。

MOMENTO_AUTH_TOKEN="ey<snip>=="

完了したら

npm run deploy

でデプロイします。以下のようにvalueと値が出てくれば完了です。

少しだけ中身をみてみる

HTTP-APIの時は以下でclientを宣言し

const client = new MomentoFetcher(env.MOMENTO_AUTH_TOKEN, env.MOMENTO_REST_ENDPOINT);

このように値を書き込んでいました

const setResp = await client.set(cache, key, value);

Web-SDKでは

const momento = new CacheClient({
	configuration: Configurations.Laptop.v1(),
	credentialProvider: CredentialProvider.fromString({
	authToken:env.MOMENTO_AUTH_TOKEN
		}),
	defaultTtlSeconds: 60,
	});
const client = new MomentoFetcher(momento);

でクライアントを作成し

await client.set(cache, key, value);

で値を書き込んでいます。

Web-SDKHTTP-APIと異なりSDKに依存する分、環境依存が少なく、Topicsの実装、WebSocket通信の実現等より複雑な処理ができるとのことです。私の現時点での知識ではこれ以上解説ができませんので、きになるかたは
https://momentocommunity.connpass.com/event/296165/
でMomentoのアドボケイトの方に聞いてみましょう。

Discussion