ElastiCacheServerlessはアリなのか

[AWS for Games Advent Calendar 2023](https://qiita.com/advent-calendar/2023/aws-for-games) 14日目
&
[フリューAdvent Calendar 2023](https://qiita.com/advent-calendar/2023/furyu) 14日目
のクロスポスト記事となります。

# はじめに

末端エンジニアのUjoです。
本記事ではAWS re:Invent 2023で発表されたElastiCache Serverlessがアリなのかを確認してみようと思います。
二番煎じ三番煎じ感がありますがご了承ください。

# ElastiCache
ElastiCacheがどういったものなのかを下記を参照してください。

https://aws.amazon.com/jp/elasticache/

前提として弊社では現在Amazon ElastiCache for Memcachedを利用しています。
今回はこれをServerlessに置き換えた場合のメリット・デメリットについて確認していきます。

# ElastiCache Serverless
そして本題であるServerlessに関してはこちら。

https://aws.amazon.com/blogs/aws/amazon-elasticache-serverless-for-redis-and-memcached-now-generally-available/?sc_icampaign=launch_reinvent23-amazon-elasticache-serverless&sc_ichannel=ha&sc_icontent=awssm-3190_launch_reinvent23&sc_iplace=banner&trk=bb0cc908-ef7e-4ea1-8b82-54deebdfa4fc~ha_awssm-3190_launch_reinvent23


見てみる限り、私として享受できそうなメリットは
・エンジンバージョンなどのアップグレードがアプリケーションに影響が出ない形で自動で行われる
・デフォルトでmulti-AZであり、高可用性が担保されている
・スケーリングを気にする必要がない
といった点でしょうか。管理コストの削減が見込めます。

対して、デメリットは従量課金のため
・コスト
がやはりネックになってしまいそうに見えます。

とはいえ、ワークロードに依存する部分ではあるので、
このコストの部分について、実際にcloudwatchメトリクスの数値を使いつつ、
どのようになるかを見てみようと思います。

# コスト試算
Serverlessに関するコストは下記を参照してください。
（コストに関する公式資料は投稿時点では日本語ページでは確認ができないので、
英語のページにて見るようにしてください。私は地味に詰まりました。）

https://aws.amazon.com/elasticache/pricing/?nc1=h_ls

コストの試算はAWSPricingCalculatorを使うことで出すことができます。

https://calculator.aws/#/addService/ElastiCache

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620223/c6ebd9f0-e24a-1bc1-7853-142bcf634340.png)


サーバレスで試算をする場合
・Average cache data size (in GB)　平均キャッシュデータサイズ
・Average simple request rate　平均シンプルリクエストレート
を入力する必要があるようです。

サンプルとしてcache.m5.largeで稼働させているノードからデータをとってこようと思います。
ちなみにcache.m5.largeの場合オンデマンドだと 
<b>$0.201*24(h)*31(day)= 149USD</b>
が月額費用になると思います。

Average cache data sizeはキャッシュクラスターIDのBytesUserdForCacheItemsメトリクスから見ることができます。実際にサンプルで確認すると下記のような感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620223/5d99a660-c2c0-a53f-8556-371eaf54ae30.png)

平均で92.3MBといったところでしょうか。しかしサーバレスストレージ設定は1GB～。
ですので、1で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620223/609af773-bf37-ee54-92e5-ff0a3cee8587.png)

試算にデータを入れると一か月のストレージ利用料が出ています。
東京リージョンの場合<b>110.23USD</b>かかるようです。
実質この価格が、最低利用価格となるかと思います。

続いてAverage simple request rateです。
こちらはCmdGet, CmdSet から算出できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620223/e2a12fdd-b98f-ddfc-82d7-4a209f470898.png)
ざっくりではありますが、150万リクエスト/hで入力してみます。

そして結果が以下となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620223/e38be9d2-6db9-c607-242d-2b963177a3b0.png)

Total ElastiCache Serverless Cost (monthly): <b>114.7195 USD</b>

ということで本サンプルの場合114USD/月でServerlessを利用することができそうです。

オンデマンドノードで近しい価格帯のノード比較してみると
<b>
cache.t4g.medium 73USD/月
Serverless 114USD/月
cache.m5.large 149USD/月
cache.m6g.large 137USD/月
</b>
となります。

# まとめ

こう見てみると、Elasticache Serverlessは管理コストの削減と引き換えに極端なコスト高になるというのは一概にそうとは言えなさそうです。

もちろん最低利用料である1GBストレージ料（東京の場合 110.23USD）の壁は超えられないので、バーストインスタンスなどの小さいノードで構成する場合はその限りではありませんし、
今回試した単一ノード構成且つオンデマンドというところで実際の運用と比べるとどうなの…？ですとか、コストパフォーマンスで考えたときは…など意見は様々かと思いますが、個人的にはノード別の管理はとてもめんどくさいのでアリなのかなと思いました。

また使い続ける云々は別の使い方として、とりあえず利用初期にServerlessを使って状況を確認し、オンデマンド（リザーブ）ノードで最適化する…という使い方もいいのかなとも思いました。

私としてはこの後実際に使って、しばらく動かしてみて確かめてみようかなと思っています。
ぜひ皆さんも実際に調べてみてはいかがでしょうか。