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版が欲しい方は使ってみてください。いちおう自分でも使っているので、今後もメンテはするつもりです。また完全にフォークしたほうがよさそうならいずれそうしようかなと思います。