Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ビジネス要件から逆算するマイクロサービスアーキテクチャ選定の「思考プロセス」
Search
akira345
March 27, 2026
Technology
88
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ビジネス要件から逆算するマイクロサービスアーキテクチャ選定の「思考プロセス」
おもにクラウドの話してます - 広島 #6 発表スライドです。
akira345
March 27, 2026
More Decks by akira345
See All by akira345
回路設計のバイブコーディング
akira345
0
110
インシデント対応
akira345
0
570
えれくら!〜電気電子工作系制作・交流会〜#29
akira345
0
66
脱・同期処理!マイクロサービスにおける負荷分散の勘所
akira345
0
170
AWSデプロイツール紹介
akira345
0
94
40歳でやったこと
akira345
0
74
回路を読むために必要なこと
akira345
0
70
おれのAWSがこんなに辛い訳がない!!
akira345
0
65
Dockerを触ってみよう
akira345
0
130
Other Decks in Technology
See All in Technology
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
400
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
140
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
250
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
0
1k
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
230
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
120
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
0
120
grill-me(grilling):AI駆動開発を超助けてくれるSkill / grill me
mathbullet
0
110
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
220
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
990
Tab5をRubyで動くパソコンにする
kishima
1
190
動画配信アプリでの Engage SDK 導入 — TVer Android が Play ストアにコンテンツを届けるまで
techtver
PRO
0
120
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
エンジニアに許された特別な時間の終わり
watany
108
250k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
810
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
510
Docker and Python
trallard
47
4.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Mobile First: as difficult as doing things right
swwweet
225
10k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
Transcript
2026/03/27 Akira345 おもにクラウドの話してます - 広島 #6 ビジネス要件から逆算する マイクロサービスアーキテクチャ選定の 「思考プロセス」
自己紹介 • 金田 晃(HN) • 所属:某社 • I like Cloud.
I like AWS. • 自宅サーバ(Docker、Proxmox、Hyper-V) • 電子工作(分解・破壊・修理) 個人検証を地味にやっていたりします・・・
題材: IP電話サービスの録音データ蓄積システム構築 • 背景 • トラブル防止のため通話録音とトランスクリプトを証跡として残したい • 利用中のIP電話サービスの録音保存期間が短い(保存期間1ヶ月 or 300時間/月)
• 録音ファイル永続化オプションが高額なので、自前で蓄積・管理をしたい • 使用中のIP電話サービスは外部API連携が可能
ふむふむ 色々気になるけど とりあえず王道パターンを想定するか
要件整理
王道パターンで仮置き トリガとデータ取得方式。データ保存戦略 • 終話をトリガにWebHookを呼び出せるなら、イベント駆動でデータ取得が可能 • API Gateway or HTTP API
+ Lambda or ECS が候補。EC2やk8sは不要 • 取得対象は音声ファイルとトランスクリプトの2種類 • WAV/MP3いずれにしてもファイルサイズは問題にならない • 永続保管が目的なので、保存先はS3が最適 • ライフサイクルポリシーで費用面も有利 • ファイル名の命名規則やパスの設計が重要。通話頻度やユースケースの確認が必要
ここでの視点 お客様の言葉を「非機能要件」に翻訳する 「証跡を残したい」 • 可用性・完全性が最優先 • 欠損は極力避ける • 証跡を残す事が主目的→検索性は優先度 が低い
「費用を抑えたい」 • AWSマネージドサービス活用 • 運用コスト最小化 • インフラ費用の削減 「1ヶ月/300hで消える」 • 取得時間は十分にある • リアルタイム性は不要 • 非同期処理で十分可能
技術検証
技術面での深掘り 連携先APIの仕様把握と制約の可視化 • APIレート制限の確認 • 秒間10回の制約あり → バースト時のリトライ戦略が必要 • データ取得におけるAPIの依存関係
• WebHookのリクエストは識別子のみ(音声・トランスクリプトファイルは含まれない) • 音声ファイルは架電・受電側で分かれている トランスクリプト取得も合わせると1トリガに対し3つのAPIコールが必要 • トランザクション管理の視点が必要 • 3つのAPIコールの部分成功時にどう扱うか?冪等性をどう持たせるか? • 開発環境の制約 • 開発環境用のサンドボックスAPIや環境提供はあるか?要確認
選定の分岐点 単一Lambdaかステートマシン(StepFunctions)か 複数のAPIを組み合わせて呼び出す必要がある。どう設計するか? 単一Lambda構成 1つのLambda内で3つのAPIを叩く ✓ シンプル構成 ✗ 処理時間増大に伴う ラムダのタイムアウト
✗API呼び出しの部分失敗の考慮 StepFunctions構成 各API取得Lambdaを並列実行 ✓ 監視・リトライ制御が容易 ✗ 構成要素が増える ✗構築が職人芸になりがち SQS/SNS + 複数Lambda キュー経由で分散実行 ✓ 疎結合 ✗ メリット少なく複雑化
現実的なアプローチ 技術自慢に囚われていないか? • 個人的にはステートマシンを組みたい! • しかし現実的にはどうか? • 音声ファイルは多くても100MB程度。ほとんどは数MBでダウンロード時間は問題にならない • 失敗しても再取得の時間的猶予は十分にある
• Lambda内リトライ不要 → SQSキュー制御でOK • API部分成功時は再実行で上書きすればよく、ゴミファイル掃除の考慮も不要 • 取得済みファイルの再取得もダウンロード時間は問題にならない • 取得済みファイルについて、API側で自動消去されることもないため再取得で問題なし • → 単一Lambda構成で十分可能
設計と実装
None
設計の勘所 失敗を前提としたシステム構成 API Gateway → SQS 直接接続 • WebHookに即座にステータス200を応答 •
バースト時の取りこぼし防止にキューイング (API Gatewayのスループット注意!) • 非同期処理でLambdaタイムアウト回避 (API Gateway 30秒制約回避) • DLQ通知による手動リトライ構成 • 冪等性はファイル上書きで担保 不正アクセス対策 • WebHookには不正リクエストの可能性あり • 無効IDは処理スキップ+成功応答 • 無駄なリトライを回避する設計
運用を見据えたデータ設計 人間系処理からシステム化まで • S3ディレクトリ構成は YYYYMM/DD で人間の探索性+将来のDynamoDBパス格納を両立 • 現在のS3はPrefixのランダム性が不要なため、ハッシュ値より視認性を優先 • ファイル名は
[開始時刻]_[通話ID(電話番号+識別子)].[拡張子] を想定 • 証跡検索時の情報は「いつ」「だれ」→ 並び替え・人間による探索を容易にする設計 • 将来的にライフサイクルポリシーによる自動アーカイブにも対応可能 • S3 Standard → S3 Glacier へ自動移行でストレージコストを削減
まとめ
思考のポイント 外部連携は「失敗前提」で設計する • APIのリクエスト耐性を確認 • 回復可能エラーの判別が可能か?リトライ戦略 • 代替手段・リカバリプランの確保 将来性・拡張性を想定する •
システムの制約を把握した上で拡張性を確保 • 将来の検索要件や拠点追加に対応可能か 運用監視のコスト判断 • 運用監視にかけるコストの見極め • あえて作らない選択肢もある(RPA/AI等) 開発・検証はセット • 本番と同じ挙動を再現できるか? • 本番環境でしか検証できない場合どうする?
アーキテクチャ選定の本質 ビジネス要件を技術で実現する • フワッとした要件を制約に基づき現実的 なアーキテクチャに落とし込む 最善の選択をする • 「俺が考えた最強のシステム」ではなく 業務要件を満たす運用可能な最善を選ぶ •
「機能要件を満たすこと」が最低限。 頼まれてもいない最強のシステムは蛇足 外部連携が入ると警戒すべし • 外部連携の境界は責任分解点 • 失敗前提の設計 • 思い込みを排除し「常識」のすり合わせ を怠らない