はじめに
この記事では 手を動かしながらMomentoが提供する初の真のサーバーレスキャッシュMomentoを学習していく記事です。主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。
今回はMomentoではなく、Momento SDKのコードを読み、Momentoで利用するMOMENTO_AUTH_TOKENをデコードして中身を見てみました。
そもそもMomentoとは
Momentoが提供する真のサーバーレスキャッシュサービスです。
Momentoの主な特徴としては以下のようなものがあります。
- 月50GB無料
- データの送受信に対して$0.5/GB
- メモリーインスタンスへの課金なし
- Elasticache for Redis と比較して60%低いコストで利用できる
- Pub/Sub型
- 様々なデータ型に対応
- 複数のプログラミング言語に対応※
Momentoを利用すると開発者への負担を減らしつつ可用性を向上させてキャッシュコストを削減できます。
※料金体系:https://jp.gomomento.com/pricing
はじめかた
以下のURLから始めることができます。
https://docs.momentohq.com/getting-started
Momento を操作するSDK
Momento にはキャッシュを操作する為のSDKがOSSで提供されており、中身は全てGitHubで公開されています。さらに管理用インターフェイスには専用のCLI、momento cli
があります。
今回はMomentoではなく、Momento SDKのコードを読み、Momentoで利用するMOMENTO_AUTH_TOKENをデコードして中身を見てみました。
なぜ中身を見ようと思ったのか
理由は簡単です。
他のキャッシュサービスではリーダーエンドポイントとアクセストークンによる接続であることに対してMomentoはAUTH_TOKEN
だけあれば、接続できるところです。
例えば、Redisの場合はリーダーエンドポイントとアクセストークンのセットでアクセスが可能です。
また、ものによってはIDとパスワードで認証することもあるでしょう。
少なくともキャッシュアクセスにはペアとなる文字列情報が必要になるというのが私の頭の中にあり、単一のトークンでアクセスできるということに違和感がありました。
リージョン情報は? APIキーは? キャッシュの識別は?
色々疑問に思ったのでSDKのソースを読んだところ、疑問が解決しました。
MomentoのAuth Tokenをデコードしてみた
事前準備
momento_auth_token_decoder - GitHubをDesktop にCloneします。
cd ~/Desktop
git clone https://github.com/ymd65536/momento_auth_token_decoder.git
ディレクトリを変更します。
cd ./momento_auth_token_decoder
getting startedを参考にMomento のトークンを作成します。
環境変数MOMENTO_AUTH_TOKEN
を作成してYOUR_AUTH_TOKEN
を取得したMomento のトークンに置き換えます。
export MOMENTO_AUTH_TOKEN=YOUR_AUTH_TOKEN
スクリプトの実行
環境変数にあるMomento のトークンをデコードします。
python ./example/decoder/main.py
{
"endpoint": "cell-{リージョン名}-1.prod.a.momentohq.com",
"api_key": "キーの羅列"
}
※シークレット情報が含まれる為、一部書き換えています。
まとめ
Momentoには以下のような特徴があることがわかりました。
- 低コストでアプリケーションにキャッシュを導入することができること
- サーバーレスキャッシュの為、インスタンスの管理が不要であること
- 接続には
MOMENTO_AUTH_TOKEN
が必要であること
そして、今回分かったこととしてMOMENTO_AUTH_TOKEN
はbase64でエンコードがなされており
デコードするとエンドポイントやAPIキーがわかることです。
実は実装をよく見るとエンドポイントにプレフィックスをつけていることもわかります。おそらく、Momentoにアクセスした後、どのキャッシュにアクセスするかを認識する為の識別だと思われます。
紹介
動画