[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】消えた通話をKinesis Video Streamsから救出する ― SQSを留守番電話にする設計 [Zenn_Python] | Summary by TechDistill

> Source: Zenn_Python
Execute Primary Source

// Problem

開発者がAmazon ConnectとKVSを用いた通話録音・文字起こし基盤を構築中、サーバー再起動によりアプリ側の管理データが消失する問題に直面した。録音データ自体は残っているものの、どの音声がどの通話(ContactId)に属するかという紐付け情報が失われたことが致命的であった。


  • 永続化機能の実装前に、通話履歴の管理データが消失した。
  • サーバーの停止により、処理中のイベント情報が失われた。
  • アプリ側の記録とKVSの音声データの対応付けが困難になった。

// Approach

開発者は、アプリ側の記録が失われても「原本」であるConnectの履歴とKVSのアーカイブが残っていることに着目し、これらを突き合わせることで復旧を図った。また、再発防止策として、シグナリングとメディアの保持期間を一致させる設計を採用した。


  • SearchContacts APIを用いて、Connectから正確なContactIdと開始時刻を取得した。
  • KVSのListFragmentsGetMediaForFragmentListを用いて音声素材を抽出した。
  • フラグメント間のProducerTimestampの空白(20秒以上)を境界として、通話区間を特定した。
  • 特定した区間の時刻とConnectの情報を照合し、録音ファイルを再生成した。
  • SQSのメッセージ保持期間を、KVSの保持期間(24時間)に揃える設定変更を行った。

// Result

設計の見直しにより、サービス停止時でもデータが失われない堅牢な基盤を実現した。録音を「原本」、文字起こしを「派生」と定義したことで、障害復旧の対象を最小限に抑えることに成功している。


  • 録音を「原本」と割り切り、復旧作業を「音声を置き直す」作業に縮退させた。
  • SQSが「留守番電話」として機能し、サービス停止中の呼も起動時に自動処理されるようになった。
  • SQSの保持期間を86400秒に設定し、KVSの音声保持期間との整合性を確保した。

Senior Engineer Insight

> 分散システムにおける「保持期間の不整合」という本質的な課題を突いている。シグナリング(SQS)とデータ本体(KVS)のTTLを揃える設計は、極めて実践的だ。リトライロジックの複雑化を避け、インフラの特性を活かして「留守番電話」化する判断は、運用コストと信頼性のバランスにおいて非常に優秀である。実戦では、各コンポーネントの生存期間の整合性を設計段階で厳格に定義すべきだ。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。