1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2024

Day 12

AWS DMSで移行失敗レコードを自動解消 〜 awsdms_validation_failures_v1活用システムの構築 〜

Last updated at Posted at 2024-12-11

はじめに

AWS DMSを使用したデータ移行時、失敗したレコードがawsdms_validation_failures_v1に記録される問題に直面することがあります。特に、継続的にデータベース間のデータ同期を行う場合、これらの問題を無視し続けることはできず、適切なデータの補正作業が必要となります。

本記事では、この課題を解決するために構築したシステムの概要を紹介します。データ不整合の修正と再同期のプロセスを詳しく解説し、同じ問題を抱えるエンジニアの方々に役立つ情報を提供します。

問題の背景

awsdms_validation_failures_v1とは?

AWS DMSが移行に失敗したレコードを記録するシステムテーブルです。このテーブルには以下のような情報が格納されます:

主な移行失敗の原因

  1. LOB設定の問題
  2. データ型の不一致
  3. CDC中のエラー

詳細はAWSドキュメントの「AWS DMS のソースデータベースとターゲットデータベース間のデータ不一致の問題をトラブルシューティングするにはどうすればよいですか?」で確認できます


解決策の概要

解決方法

データの不整合を解決する方法として、テーブル全体をフルロードして再同期する方法があります。しかし、この方法は、テーブル全体のデータ量に対して修復が必要なレコードが少ない場合には、非効率でコストが高くなる可能性があります。

こうした非効率なケースに対応するために、個別レコードを対象とした修復システムを構築しました。このシステムを利用することで、不整合データの修復を自動化し、効率的かつ迅速にデータを同期できるようになります。

システム構成

スクリーンショット 2024-12-11 22.59.50.png

システムの概要

  1. 自動補正アプリケーションがawsdms_validation_failures_v1を定期的にチェック
  2. awsdms_validation_failures_v1を解析し、検証エラーが発生したSourceTableとTargetTableの当該レコード解析する
  3. TargetTableに対して、修正クエリーを発行する
  4. awsdms_validation_failures_v1の処理結果をApp_logTableに書き込む

修正方法の詳細はAWSドキュメントの「トラブルシューティング」で確認できます


システム構築の詳細

使用技術

  • Java : 自作するアプリケーションの開発言語
  • Argo Workflows : アプリケーションを定期実行できる環境

自動補正アプリケーションの機能説明

このアプリケーションは、awsdms_validation_failures_v1テーブルを参照し、データ不整合が発生したレコードの原因や状況を確認します。その後、アプリケーションがこれらのレコードを解析し、ソーステーブル(SourceTable)とターゲットテーブル(TargetTable)の内容を比較して、適切にターゲットテーブルのレコードを修復します。

修復が完了すると、DMSの検証処理によって再度レコードが確認され、問題が解消されたことを確認できます。

重要なポイント

  • データ補正後もawsdms_validation_failures_v1のレコードは削除されないため、アプリケーションが同じレコードを再処理しないようにする必要があります。
  • 修復済みのレコードを記録する「ログテーブル」を設けることで、同じレコードを繰り返し修正することを防止します。

DMS検証の詳細はAWSドキュメントの「AWS DMS データ検証」で確認できます

所感

AWS DMSには、データの検証機能と、その結果をawsdms_validation_failures_v1に記録する機能が提供されています。しかし、不正データを再同期するための機能は用意されていないため、独自のアプリケーションを作成し、補正処理を実装する必要があります。

補正処理の実装形式は複数考えられますが、今回の実装では処理がある程度複雑になることを見越して、AWS Lambdaのような簡易的な環境は利用せず、複雑な処理に対応可能な開発環境と言語を選択しました。

また、補正処理が単一テーブルに対する処理であったため、アルゴリズムを確定させた後は、SourceTableとTargetTableのDDLをもとに、アプリケーションのソースコードを自動生成する仕組みも構築することができました。


1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?