DynamoDB 勉強会を開催してもらいました

こんにちは。弁護士ドットコム SRE チームの中村です。
弁護士ドットコム株式会社では様々なサービスを運営していますが、私は主にクラウドサインの信頼性向上や運用の改善を担当しています。
今回、新機能のデータストアに DynamoDB を採用することになり AWS のソリューションアーキテクトの成田様 (@oranie) に勉強会を開催してもらいました。

経緯

新機能を検討する中で、システム内の特定のログをデータベースに保管しておきたいという要件が発生しました。
参照頻度やデータの規模から RDS を利用することも検討したのですが、単純増加が想定されること、また書込みが高頻度で発生する機能の実装を今後検討していること等から検証の意味も込めて DynamoDB というデータベースを利用してみることにしました。

Amazon DynamoDB はフルマネージドで安定したパフォーマンスが提供される NoSQL データベースです。書込みや保存による負荷をオフロードさせて既存のデータベースに影響を与えずに新機能の開発を進めることができるのではと考えました。

公式ドキュメントや過去資料を中心に設計や検証を進めていく中で運用や細かい機能について疑問がでてきました。そんな中 Twitter 上で DynamoDB 勉強会を実施したという成田様のツイートを見かけ、気づいたときには日程調整を行っていました。

勉強会の目的

勉強会を通して知りたかったのは以下のような点でした。

- DynamoDB 自体の製品知識の共有
- テーブルの構造管理をどのレイヤーで持つべきか
- 環境を分ける場合どう運用するのがよいか
- フルマネージドではあるが運用する場合のポイント
- 監査対応等で操作記録を残す場合の留意点

今回は DynamoDB に関する基本的な内容の講義と課題に関するディスカッションという形で実施してもらうこととなりました。

勉強会当日

クラウドサインのエンジニアを中心に弁護士ドットコムBUSINESS LAWYERS のエンジニアも参加して行われました。

写真:DynamoDB勉強会の様子

内容について一部紹介します。

テーブルの構造管理をどのレイヤーで持つべきか

規模や運用によってアプリケーションのソース内で管理しても、Terraform 等の構成管理ツールで管理してもよい。とのことでした。
今回はローカル環境や CI 上での利用を考慮しアプリケーション側で持つことになりそうです。

環境を分ける場合どう運用するのがよいか

予想はしていましたが AWS アカウントを分けることが推奨されるようです…。こちらは SRE チームとしての課題でもあるので今後の検討です。
一旦は IAM による管理で制御を行うことになりそうです。

監査対応等で操作記録を残す場合の留意点

DynamoDB Streams を利用することで変更履歴をストリーミングし、ストレージに保管することで対応できそうでした。
監査要件次第ではありますがこちらも試して見る予定です。

パフォーマンスについて

また、パフォーマンス面では AWS SUMMIT で DynamoDB のプロダクトマネージャーが発表した内部実装に関する資料も合わせて説明していただきました。

既に DynamoDB を利用していたエンジニアにとっては知識の整理と疑問の解決に。今後利用していくエンジニアには基礎知識と概念の習得ができ、非常に有意義な時間となりました。

勉強会を終えて

タイミング良く(悪く?)ソリューションアーキテクトが「ツイートしすぎ」と怒られたという話を見かけましたが、今回はツイート起因で相談でき、勉強会を開催していただけ大変ありがたかったです。これからも気軽に相談していこうと思います。

個人的には DAX(DynamoDB Accelerator)を利用したキャッシュの話や DynamoDB Streams を利用して Lambda や別の AWS のサービスと連携させる話は興味深かったです。
特定のサービスありきで問題を解決しようとするのではなく、組み合わせで負荷をオフロードし適材適所で利用すること。またそれを可能とするアーキテクチャを設計しておくことの重要さを改めて感じました。

クラウドサインを始めとして、これからもサービスを安定して提供するために、変化を取入れ続けていきたいと考えています。

なんとかやっていきたい