DEA / ドメイン1 データの取り込みと変換

耐障害性のあるデータパイプライン

データパイプラインは、ネットワークの瞬断、 の、壊れたレコード、ジョブの途中停止など、さまざまな失敗に出会います。のあるパイプラインとは、こうした失敗が起きても、データを失わず、二重に書かず、自動で回復するか、少なくとも安全に止まって知らせるパイプラインです。

DEA では、リトライ、 (デッドレターキュー)、な書き込み、を組み合わせて、性能・可用性・・レジリエンス・耐障害性を満たす設計を選べるかが問われます。

Point
  • Resilience = 回復力 です。障害が起きても元の状態へ戻れる性質を指します。
  • Fault tolerance = 耐障害性 です。一部が壊れても全体が動き続ける性質を指します。
  • Idempotent = 冪等 (べきとう) です。同じ処理を何回実行しても結果が同じになる性質です。
  • DLQ = Dead-Letter Queue の略で、処理できなかったメッセージの退避先です。
  • 和訳

概要

失敗への備えは、「一時的な失敗を自動で乗り越える」「乗り越えられない失敗を隔離する」「やり直しても壊れないようにする」の3層で考えます。

概要の図 一時的な失敗 何度も失敗 冪等な書き込み データソース バッファSQS / Kinesis 処理Lambda / Glue 再試行指数バックオフ DLQ / エラー用プレフィックス隔離して調査 保存先S3 / Redshift / DynamoDB SNS で通知
層目的主な手段
乗り越える一時的な失敗から自動で回復しますとジッター付きの再試行、自動スケーリング
隔離する何度やっても失敗するデータでパイプライン全体を止めません、失敗レコードの退避先 ( のエラー用プレフィックス)、品質チェックによる隔離
やり直しても壊れない再実行や重複配信で結果が変わらないようにしますな書き込み、、

主要技術

①リトライと指数バックオフ ⚠️ 頻出

(呼び出しすぎによる拒否) やネットワークの瞬断は、少し待ってやり直せば成功することが多い失敗です。待ち時間を回ごとに2倍、4倍と伸ばすと、待ち時間にばらつきを入れるジッターを組み合わせます。

場所再試行の仕組み
AWS 標準で再試行します。リトライモード (standard、adaptive) と最大回数を設定できます (#61)。
Retry フィールドで、エラー名ごとに待ち時間、倍率、最大回数を宣言します (#24)。
のイベントソースマッピング・ Streams では最大再試行回数、レコードの最大経過時間、失敗時のバッチ二分割を設定します。
Lambda の非同期呼び出し失敗時に自動で再試行し、最後は失敗時の送信先 (、 など) へ送ります。
ジョブジョブの最大再試行回数を設定できます。
()タスクごとに retries と retry_delay を設定します。

再試行は、回数と待ち時間の上限を必ず決めます。無限に再試行すると、壊れたデータを永遠に処理し続けたり、下流のサービスを過負荷にしたりします。


②DLQ と失敗レコードの退避

何度再試行しても失敗するデータ (形式が壊れたレコードなど) を「毒入りメッセージ」と呼ぶことがあります。これを取り除かないと、同じデータで処理が止まり、後続のデータまで遅れます。

サービス退避先動き
(別の SQS キュー)受信回数が最大受信数 (maxReceiveCount) を超えたメッセージを DLQ へ移します。原因を直した後は、DLQ から元のキューへ戻す (redrive) ことができます。
(・ Streams)失敗時の送信先 (SQS、、 など)再試行を使い切ったバッチの情報を送ります。
S3 のエラー用プレフィックス変換や配信に失敗したレコードを S3 にバックアップします。
隔離用の S3 の場所品質ルールに合わない行を分けて書き出します (#57)。

DLQ に入ったら、 の (DLQ のメッセージ数が 0 より大きい) と SNS で担当者に知らせます。

⚠️ 頻出: 「一部の不正なメッセージのためにキューの処理が止まる」は、SQS の DLQ と maxReceiveCount で隔離します。


③冪等な書き込みとチェックポイント ⚠️ 頻出

多くの AWS のメッセージングは「少なくとも1回」の配信です。つまり、同じデータが2回届くことがあります。また、ジョブを途中から再実行すると、一部のデータを2回書くおそれがあります。そこで、書き込みをにします。

手法内容例
キーで上書き ()主キーが同じなら更新、なければ挿入します の PutItem、 の MERGE、 の MERGE INTO
パーティション単位の置き換え処理対象の日付パーティションを丸ごと書き直しますdt=2026-10-17 を削除してから書く、 の動的パーティション上書き
重複排除メッセージ ID やイベント ID で重複を除きます の重複排除 ID、処理済み ID を DynamoDB に記録
条件付き書き込み既に処理済みなら書かないDynamoDB の条件式 (attribute_not_exists)

は「どこまで処理したか」を記録する仕組みです。再開時は記録した位置から続けます。

仕組み記録するもの
前回までに処理した のファイルや の行を記録し、次回は新しい分だけを読みます。
(Kinesis Client Library)ごとの読み取り位置を DynamoDB のリースのテーブルに記録します。
アプリケーションの状態を定期的にチェックポイントとして保存し、障害時に復元します。
Spark Structured Streamingチェックポイントの場所 (S3) に処理の進み具合を保存します。

④可用性とスケーラビリティ

パイプラインが止まらず、量が増えても追いつくための設計の原則です。

原則内容例
生産者と消費者の間にバッファを置き、片方の遅れや停止がもう片方に波及しないようにします、、
と台数の管理や障害時の置き換えを AWS に任せます、、、、 Serverless
マルチ 1 つのアベイラビリティーゾーンの障害で止まらないようにしますKinesis・SQS・ は標準で複数 AZ にデータを保存します。 はブローカーを複数 AZ に配置します。
処理を分割して並列に増やせるようにしますKinesis の、Glue のワーカー数とオートスケーリング、分散マップ
保持と再生処理に失敗しても、元データから作り直せるようにします生データを S3 に保持する、Kinesis の保持期間を延ばして再読み込みする

生データ (raw) をそのまま S3 に保存しておき、変換後のデータとは分けておくと、変換の不具合が見つかっても生データから作り直せます。これが再現性のあるパイプラインの基本です。


⑤Well-Architected Framework のデータ分析レンズ

AWS Well-Architected Framework には、分析ワークロード向けの観点をまとめたデータ分析レンズ (Data Analytics Lens) があります。 でこのレンズを選ぶと、自分のワークロードを質問に沿って見直し、改善点を一覧にできます。

柱データパイプラインでの観点の例
運用上の優秀性パイプラインの状態とデータ品質を監視し、失敗を通知する
セキュリティデータの分類、暗号化、のアクセス
信頼性失敗からの回復、再処理できる設計、データの
パフォーマンス効率データ形式とパーティションの最適化、適切なサービスの選択
ライフサイクルによる階層化、使った分だけの課金の活用
持続可能性不要なデータの削除、効率的な形式による処理量の削減

試験対策

①判断マトリクス

問題文のキーワード選ぶ手段理由
一時的なでジョブが失敗するとジッター付きの再試行少し待てば成功する失敗を自動で乗り越えます。
不正なメッセージで処理が止まる の (maxReceiveCount)問題のメッセージだけを隔離して後続を流します。
で変換に失敗したレコードを失いたくない のエラー用プレフィックスへのバックアップ失敗レコードを後から再処理できます。
再実行で重複データができるな書き込み (、パーティション上書き、条件付き書き込み)何度書いても結果が同じになります。
前回処理した分を除いて新しいファイルだけ処理 処理済みの位置を記録します。
生産側と消費側の速度差を吸収したいSQS / によるバッファリングで、片方の遅れが波及しません。
変換の不具合を後から直してデータを作り直したい生データを S3 に保持生データから再処理できます。
分析ワークロードの設計をベストプラクティスで見直したい のデータ分析レンズ分析向けの質問で改善点を洗い出します。

②よくある誤答

  • 再試行の上限を決めずに無限に再試行すること。毒入りメッセージで処理が止まり続けます。
  • 「少なくとも1回」の配信なのに、単純な追記 (INSERT) だけで書くこと。重複が発生します。
  • 変換後のデータだけを保存し、生データを捨てること。不具合が見つかっても作り直せません。
  • のために で自前のキューを組むこと。 や のを使う方が運用負荷が低くなります。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください