Momento (Node)でのAPIキーの設定方法
この記事は、「Momento Advent Calendar 2023」の19日目の記事です。Momentoを使う際には、CredentialProviderにAPIキーを渡す方法が2つあります。fromEnvironmentVariableは、SDKが環境変数を読み込むアプリケーションに適しており、fromStringはAPIキーの値そのものを渡す方法です。環境変数にAPIキーを保存している場合はfromEnvironmentVariableを、APIキーを暗号化して管理している場合はfromStringを使用すると良いです。また、MomentoではAPIキーのローテーションも可能です。
目次
この記事は「Momento Advent Calendar 2023」19日目の記事です。
Momentoを使う際、CredentialProvider
にAPIキーを渡す方法が2種類あります。この2種の違いに気付けず、すこし時間を取られたことがありましたので、短いですが覚書としてまとめました。
fromEnvironmentVariable
はSDKが環境変数を読みに行く
Next.jsなどのアプリケーションでは、環境変数を.env
や.env.local
などに保存します。Momentoの場合、ここでAPIキーを保存することになります。(今回は便宜上APIキーのリフレッシュについては割愛します)
MOMENTO_API_KEY=eyJlbmRwb2ludCxxxxx
CredentialProvider.fromEnvironmentVariable
を利用する場合、process.env.MOMENTO_API_KEY
ではなく「環境変数の名前」を渡す必要があります。
import { CacheClient, Configurations, CredentialProvider } from '@gomomento/sdk';
const cacheClient = await CacheClient.create({
configuration: Configurations.Laptop.v1(),
credentialProvider: CredentialProvider.fromEnvironmentVariable({
environmentVariableName: "MOMENT_API_KEY",
}),
defaultTtlSeconds: 60,
});
環境変数名を渡すことで、SDK側が環境変数( process.env
)からデータを取得してくれます。基本的にはこの方法で問題ないのですが、Cloudflare Workers / Pages functionsなど、環境変数に設定したデータを取得する方法が異なるインフラではうまく動作しません。
fromString
でAPIキーの値を直接設定する
もう一つの方法はfromString
を使うやり方です。こちらはprocess.env.MOMENTO_API_KEY
のようにAPIキーの値そのものを渡します。
const cacheClient = await CacheClient.create({
configuration: Configurations.Laptop.v1(),
credentialProvider: CredentialProvider.fromString({
apiKey: process.env.MOMENT_API_KEY as string
}),
defaultTtlSeconds: 60,
});
AWSやGCPなどでAPIキーを暗号化して管理している場合、環境変数にはAPIキー情報が保存されていないことがあります。そういった場合にも、こちらの実装方法を使うと良さそうです。
おわりに
短いですが、2つの使い分けを簡単にまとめました。MomentoはAPIキーのローテーションもできる様子ですので、できるのならば、AWSのSecrets Managerなどを使って定期的にAPIキーを交換しても良いかもしれません。この辺りもトライでき次第紹介したいと思います。