756 Views
December 11, 23
スライド概要
2023-12-09 JAWS-UG金沢 x AWS Startup Community プレゼンツ『北陸でStartupをはじめよう・みつけよう』
で行われたイベントの登壇資料です。
Flashでのライブストリーミング開発からWeb業界に入りました。 バックエンド勉強中です。
政務活動費DXにおける DB分割とCognitoの利用 株式会社エイブルコンピュータ
自己紹介
自己紹介 永井 伸明 1987年2月22日 北海道出身 LiveStreamingサービス(7年) バックエンド保守(6年) Adobe Media Server / Wowza Streaming Engine ActionScript3 / PHP / Golang / MySQL
目次
目次 自社プロダクトの Semkan を事例に、 1. マイクロサービス化によるDB分割 2. Cognitoを使った話
まず、Semkanとは ● 政務活動費のDX 書類作成、領収書のスキャン、プリントアウト、付 箋、メモ書き等 アナログな手法を取っている 紙自体のコスト、物理的移動コストの削減 ● 議員名簿管理 議員のプロフィールを管理 ● 認証
マイクロサービス化によるDB分割
モノリシックな構成を テーブル サービスA テーブル ・ ・ ・ サービスB サービスC
マイクロサービス化したい テーブル サービスA テーブル サービスB テーブル サービスC
サービスの拡張もしやすい マイクロサービスA マイクロサービスB マイクロサービスC マイクロサービスD +
課題:DB分割が難しい ユーザーマスタ 議員プロフィール 会派情報 議会情報 委員会情報 報告書 予算 支出 等など、扱うデータの種類が多い マイクロサービス化 を考慮すると、 どのようにデータを分割していくか悩ましい
例えば 複数のサービスからアクセスするデータの場合、 どこのサービスに収めるべきか判断に迷う 政務活動費管理 議員名簿管理 ? ? 会派情報 議員情報 どちらにも必要な情報だが、 どのサービスに持たせるか?
例えば ● 将来的に追加する必要があるデータをどこに置くか ● データをどのサービスに置いたか分からなくなってしまう
DB分割の困り事への対処 ● 共通データをどこのDBに収めるか ● 将来的に必要になるデータをどこに収めるか 共通データを扱うサービスを構築 ● どのデータをどこに置いたか分からなくなってしまう レイヤーでデータを分類
共通データを扱うサービスを構築 共通データ 会派情報 議員情報 ・ ・ 政務活動費管理 議員名簿管理
共通データを扱うサービスを構築 共通データ 政務活動費管理 【メリット】 データが散らからない為、アクセス経路がキレイになる 【デメリット】 会派情報 議員名簿管理 データ取得に必ずAPI通信を行う必要がある 議員情報 ・ ・
レイヤーでデータを分類 レイヤー4 サービス 書類 支出 予算 ・・・ レイヤー3 共通データ 議会 会派 議員 ・・・ レイヤー2 契約情報 契約 レイヤー1 認証 ・・・ ユーザーマスタ ・・・
レイヤーでデータを分類 レイヤー4 【メリット】 サービス 書類 支出 予算 ・・・ レイヤー3 データが整理整頓されるので、構造が理解しやすくなる 議会 会派 議員 共通データ ・・・ 【デメリット】 レイヤー2 レイヤー1 契約 契約情報 ・・・ 細分化しすぎると、そのレイヤーのマイクロサービス化 が必要になる等、コストパフォーマンスが下がる ユーザーマスタ 認証 ・・・
Cognito を使った話
Cognitoとは ● ログイン機能を手軽に作ることができるサービス ● OIDC、OAuth2.0、SAML等の規格をサポート
Why 何故 Cognito を使ったのか
課題:開発スピードを上げる必要がある ● プロジェクトは常に人手不足 ● リソース確保に四苦八苦 ● 現状のリソースで、効率良く開発を進めたい ● 新メンバーへの学習コストを下げたい
開発スピードを上げる為の一つの要素として ● 車輪の再発明を極力避ける ○ ビルトインのパッケージを使う ○ 外部のパッケージやミドルウェアを使う ○ クラウドサービスを使う
開発スピードを上げる為の一つの要素として ● 車輪の再発明を極力避ける ○ ビルトインのパッケージを使う ○ 外部のパッケージやミドルウェアを使う ○ クラウドサービスを使う Cognitoを使うことで、 認証機能開発の工数削減を図った
Amazon Cognito の機能 一通り機能は揃ってます
Amazon Cognito の機能 エンドポイントでの認証 Cognitoの エンドポイント にHTTPリクエストを行い、ログイ ン処理等を行う
Amazon Cognito の機能 ID連携 facebookのアカウント情報を用いて、 ログイン処理を行う
Amazon Cognito の機能 Cognitoが用意したUIを使用 デザインの変更も可能
Amazon Cognito の機能 AWS SDK を使って カスタマイズも出来ます
AWS SDKとは ● アプリケーションからAWSのサービスを 利用する為のライブラリ一式 ● 複数の言語やフレームワークに対応 .NET / Python / Ruby / Golang 等
AWS SDKとは リファレンスもしっかりしています
構成例 APIからCognitoに対して 問い合わせを行う ② ① HTTP Request gin-gonicフレームワークを用いて、 AWS SDK を組み込んだAPIを作成
構成例 ④ レスポンス Cognito への問い合わせ後、 必要に応じてDB操作などの任意の処理を行う ③
もう少し踏み込んだ例:SSO Redis Service A Client Cognito 認証API Service B
もう少し踏み込んだ例:SSO ① Redis Service A ② Client 認証 Cognito ログイン 認証API Service B
もう少し踏み込んだ例:SSO Session値 Accessトークン ① Cookieに Session値 をセット Redis Service A ② Session データ書き込み Client Cognito 認証API Service B
もう少し踏み込んだ例:SSO ② Redis Service A Sessionデータ取得 ③ ① アクセス Accessトークンのチェック Cognito Cookieヘッダーに Session値が含まれる 認証API Client Service B
Cognitoは便利ですが ノウハウが無い中で いきなりCognitoを使うのは大変です
なので 一度、入門書を読んでおくと、 Cognitoをスムーズに使えます
まとめ
まとめ マイクロサービス化を考慮したDB分割 共通データ用のマイクロサービスを構築 レイヤーでデータを分類することで 理解しやすく Cognito等のクラウドサービスを積極活用 開発工数の削減が可能
一緒に働いてみませんか? 株式会社エイブルコンピュータ プロジェクトマネージャ デザイナー エンジニア au スマートパス 募集中です au 5Gチャンネル 受託案件もお待ちしております