技術メモ/
Ruby on RailsでセッションストアにDynamoDBを使う
Ruby on Railsでセッションデータの保存先として、一番の候補になるのはRedisだと思いますが、AWSを使っている場合は別途Redisのサーバー立てるのが面倒くさいので、DynamoDBに保存したいなと思うことがあります。
で、DynamoDBをセッションストアとして使うためのaws-sessionstore-dynamodb-rubyというGemがあります。
このGemはAWS公式のRuby on Rails向け SDKにも同梱されています。
がしかし、このGemはRack::Session::Abstract::Persistedを継承しているため、何かとカスタマイズしにくいところがあり、我々の環境ではある条件で例外が発生する不具合がありました。また当時はRack2までしか対応していないという問題もありました。
なのでフォークしてActionDispatch::Session::AbstractSecureStoreを継承してみました。
要件
- Rack3に対応
- Rack::Session::Abstract::Persistedの代わりにActionDispatch::Session::AbstractSecureStoreを継承
- 過去のaws-sessionstore-dynamodb-rubyのセッションデータがそのまま使える
修正済みのがこちら
公式にPRを送ってみましたが、基本好意的ではあったものの、RailsアプリケーションだけではなくてRackアプリケーションにも対応したいからという理由で不採用。残念。
その後公式もRack3には対応してもらえたみたいですが、RailsのRedisStoreやCookieStore、ActiveRecordStoreなどはすべてAbstractSecureStoreを継承することでシンプルな実装になっているので、もしこれらのDynamoDB版が欲しい方は使ってみてください。いちおう自分でも使っているので、今後もメンテはするつもりです。また完全にフォークしたほうがよさそうならいずれそうしようかなと思います。