はじめに
処方箋データ連携チームでエンジニアをしている岩佐(孝浩)です。
カケハシには「岩佐」さんが複数名在籍しており、社内では「わささん」と呼ばれています。
私が所属する処方箋データ連携チームでは、これまで Slack App を用いて社内管理画面を構築・運用してきました。
しかし、運用を続ける中でいくつかの課題が明らかになってきたため、現在は Lambda Web Adapter を利用した Web アプリケーションへの移行を進めています。
本投稿では、Slack App から Web アプリケーションへの移行に至った背景と、移行前後のシステム構成についてご紹介します。
移行の背景
Slack App 選定の経緯
Slack App の構築当初、私はまだカケハシに入社していませんでしたが、チームのメンバーからのヒアリングによると、以下のような理由から Slack App が選定されたようでした。
- アジリティ: Bolt を使うことで、Slack で動作するアプリケーションを迅速に開発できる
- ユーザビリティ: 業務で日常的に利用する Slack 上で動作するため、利便性が高い
- コスト効率: AWS の API Gateway + Lambda を使うことで、非常に低コストで運用可能
ちょっとしたツールのような実装において、Slack App は非常に強力な選択肢だと思います。
処方箋データ連携チームで生じた課題
当初は Slack App での運用に問題はありませんでしたが、管理機能が増えるにつれて、以下のような課題が目立つようになってきました。
UI に関する課題
- テーブルコンポーネントが提供されておらず、データの一覧表示が困難
- Modal Update による疑似的な画面遷移は可能だが、複雑な導線を持つ画面の実装が難しい
開発プロセスの課題
開発フローが以下のような手順となっており、ローカルでの動作確認やデバッグが煩雑:
- コードを書く
- デプロイする
- Slack 上で動作確認する
- ログを確認する
- 問題があれば 1 に戻る
Fargate や EC2 を利用していれば Slack API Socket Mode を利用することで解決できそうですが、常時起動するためコスト負担が重くなります。
メンテナンスの課題
- 保守には Slack API や Bolt の知識が求められ、新メンバーの学習コストが高い
- Bolt 独自の設計思想に沿った開発が必要(3秒ルール等)
これらの課題を解決するため、Slack App から Lambda Web Adapter を用いた Web アプリケーションへの移行を進めることにしました。
Web アプリケーションへの移行
移行前のシステム構成
以下が移行前のシステム構成です。
移行後のシステム要件
技術的に瑣末な要件を除くと、以下が重要な要件でした。
- 移行対象は社内管理画面のため、ランニングコストを抑えたい
- Web アプリケーションのバックエンドは Docker コンテナにしたい
- Slack ユーザーは、社内管理画面用のアカウントを作成しなくてもログインできるようにしたい
移行後のシステム構成
以下が移行後の構成です。
構成の特徴:
- Web アプリケーションのバックエンドは、Docker コンテナとして起動する
- Web アプリケーションのフロントエンドは、CloudFront で配信する
- Lambda Web Adapter により、Lambda 上で Docker コンテナを実行する
- Cognito を利用することで下記を実現する
- OIDC 連携により、Slack ユーザーは Slack アカウントでログインできる
- Web アプリケーション用のアカウント作成もできる
- 将来的に OIDC や SAML 連携により、EntraID, Google 等のアカウントも利用可能になる
Lambda Web Adapter の利点:
- Dockerfile に 1 行追加するだけで Lambda 対応が可能
- Lambda 上で動作するため、非常に低コストで運用できる
- 将来的に ECS/Fargate への移行が容易
Web アプリケーションに移行した感想
Slack App で生じていた課題を、「ランニングコストを抑えて」解決するという点に大きく寄与したのが Lambda Web Adapter です。
Lambda Web Adapter は以下のようなケースで特に有効です。
- 小規模な Web アプリケーション:手軽に迅速に立ち上げたい場合
- コスト効率を重視する場合:Lambda の従量課金モデルを活かしたい場合
- 将来のスケールアップを視野に入れている場合:柔軟な移行性が求められる場合
逆に、以下のようなケースでは ECS/Fargate などの他の選択肢の検討をおすすめします。
- 大規模な Web アプリケーション:Lambda のメモリや実行時間制限に注意が必要
- リアルタイム性が求められる場合:Lambda のコールドスタートがボトルネックになる可能性あり
Lambda Web Adapter の仕組みについては、公式リポジトリや builders.flash の記事を参考にしていただければと思います。
まとめ
本記事では、Slack App から Lambda Web Adapter を用いた Web アプリケーションへの移行についてご紹介しました。
小規模な管理画面のランニングコストを下げたいというケースは多いと思いますが、Lambda Web Adapter はそのニーズにぴったりのツールです。
Web アプリケーションへの移行によって、処方箋データ連携チームで生じていた課題は解消されつつあります。
同様のケースでお悩みの方の参考になれば幸いです。