【DataSync】タスクのデータ検証オプションを図解してみた

DataSyncタスク作成時に指定するデータ検証オプションを図に表して紹介しました。
2022.04.14

みなさん、こんにちは。

AWS事業本部コンサルティング部の芦沢(@ashi_ssan)です。

本エントリでは、DataSyncタスク作成時に指定するデータ検証オプションを図に表して紹介します。

データ検証オプションとは?

まずは公式ドキュメントを読んでみましょう。

「データ検証オプション」の項目に以下のような記載があります。

DataSync は、データを転送するときに、転送中必ずデータ整合性チェックを実行します。追加の検証を有効にして、転送の終了時に送信元と送信先を比較できます。この追加のチェックでは、データセット全体、またはタスク実行の一部として転送されたファイルのみを検証できます。ほとんどのユースケースでは、転送されたファイルのみを検証することをお勧めします。

タスクデータの検証オプションでは、タスクによって転送されるデータの検証方法を指定します。

各オプションについては以下のような説明があります。

  • [Verify only the data transferred (recommended) (転送されたデータのみ検証する (推奨))]
    • このオプションは、転送されたファイルと送信元のメタデータのチェックサムを計算します。次に、このチェックサムと、転送の終了時に送信先にあるファイルで計算されたチェックサムを比較します。S3 Glacier Flexible Retrieval または S3 Glacier Deep Archive ストレージクラスに転送する場合は、このオプションをお勧めします。
  • [Verify all data in the destination (送信先ですべてのデータを検証する)]
    • このオプションは、送信元全体と送信先全体の転送の最後にスキャンを実行し、送信元と送信先が完全に同期されていることを確認します。S3 Glacier Flexible Retrieval または S3 Glacier Deep Archive ストレージクラスに転送する場合は、このオプションを使用できません。
  • [Check integrity during the transfer (転送中に整合性をチェックする)]
    • このオプションは、転送の終了時に追加の検証を実行しません。すべてのデータ転送は、引き続き転送中にチェックサム検証によって整合性がチェックされます。


さあ、あなたはこの文章を読んで、一瞬で理解できましたか?

(私は理解できませんでした。)


そうです、この文を理解できるレベルまで落とし込むため、このエントリが存在しているのです。

検証環境について

図を作成する際に、各オプションの実際の挙動を検証環境で確認しました。

今回検証に使用した環境は、以下のブログで準備した環境とおおよそ同様ものを準備しました。

タスク作成時に設定した設定値は以下になります。

項目 設定値
Verify data Verify Only the data transferred
Data to scan Entire source location
Transfer mode Transfer only the data that has changed
Keep deleted files 有効
Overwrite files 有効
Log level Log all transferred objects and files


それでは本題に移りましょう。

図解してみた

Verify only the data transferred

図解した概要は以下です

  • タスクが実行され、データが転送されると、データの転送時の整合性チェックが行われます(①)
  • 転送後、実際に転送したファイルのみのチェックサムの比較が行われます(②)

検証時のログ(CloudWatch Logs)はこちらです。

  • 7-9行目が①に対応しています。
    • ログはTransferredなので転送できたことを表しますが、同時に整合性チェックも行っているのだと思われます。
  • 12-14行目が②に対応しています。
    • 送信したファイル(とそのルートディレクトリ)に対してチェックサムの比較(Verified)が行われています。
[INFO] Request to start task-0689f0f23b17e237e.
[INFO] Execution exec-09a7a5ba6d37c931d started.
[INFO] Started logging in destination hostId: host-01c6caf4a94772d92 for Execution exec-09a7a5ba6d37c931d
[INFO] Started logging in destination hostId: host-052856c89c73935f0 for Execution exec-09a7a5ba6d37c931d
[INFO] Started logging in destination hostId: host-07423e1d147350f1b for Execution exec-09a7a5ba6d37c931d
[INFO] Started logging in destination hostId: host-08edc1a0e879f4e87 for Execution exec-09a7a5ba6d37c931d
[NOTICE] Transferred file /testfile-3.txt, 0 bytes
[NOTICE] Transferred file /testfile-2.txt, 0 bytes
[NOTICE] Transferred file /testfile-1.txt, 14 bytes
[NOTICE] Transferred directory metadata /
[NOTICE] Verified directory /
[NOTICE] Verified file /testfile-1.txt, 14 bytes
[NOTICE] Verified file /testfile-2.txt, 0 bytes
[NOTICE] Verified file /testfile-3.txt, 0 bytes
[INFO] Execution exec-09a7a5ba6d37c931d finished with status Success.

Verify all data in the destination

図解した概要は以下です

  • タスクが実行され、データが転送されると、データの転送時の整合性チェックが行われます(①)
  • 転送後、実際に転送したファイル転送済みのファイルのチェックサムの比較が行われます(②)

検証時のログ(CloudWatch Logs)はこちらです。

  • 7-9行目が①に対応しています。
    • ログはTransferredなので転送できたことを〜以下略〜
  • 13-18行目が②に対応しています。
    • ログから、Data to scanに含まれるファイル全体のチェックサムの比較(Verified)が行われていることが確認できます。1
      • 1つ前のテスト(Verify only the data transferred)で、testfile-1,2,3は送信済みだったのでファイル転送はされなかったが、チェックサムの比較は実施されました。
[INFO] Request to start task-0689f0f23b17e237e.
[INFO] Execution exec-08392602e511c5a49 queued.
[INFO] Execution exec-08392602e511c5a49 started.
[INFO] Started logging in destination hostId: host-05336cbd689198ba4 for Execution exec-08392602e511c5a49
[INFO] Started logging in destination hostId: host-06bae9c93542e4215 for Execution exec-08392602e511c5a49
[INFO] Started logging in destination hostId: host-09a17ac82f385cdfc for Execution exec-08392602e511c5a49
[INFO] Started logging in destination hostId: host-0a730b30304524695 for Execution exec-08392602e511c5a49
[NOTICE] Transferred file /testfile-b.txt, 0 bytes
[NOTICE] Transferred file /testfile-a.txt, 0 bytes
[NOTICE] Transferred file /testfile-c.txt, 0 bytes
[NOTICE] Transferred directory metadata /
[NOTICE] Verified directory /
[NOTICE] Verified file /testfile-1.txt, 14 bytes
[NOTICE] Verified file /testfile-2.txt, 0 bytes
[NOTICE] Verified file /testfile-3.txt, 0 bytes
[NOTICE] Verified file /testfile-a.txt, 0 bytes
[NOTICE] Verified file /testfile-b.txt, 0 bytes
[NOTICE] Verified file /testfile-c.txt, 0 bytes
[INFO] Execution exec-08392602e511c5a49 finished with status Success.

Check integrity during the transfer

図解した概要は以下です

  • タスクが実行され、データが転送されると、データの転送時の整合性チェックが行われます(①)
  • 転送後のチェックサムの比較はしません

検証時のログ(CloudWatch Logs)はこちらです

  • 7-9行目が図の①に対応しています。
    • ログはTransferredなので〜以下略〜
  • ログからわかる通り、転送後のチェックサム確認は行われません。
[INFO] Request to start task-0689f0f23b17e237e.
[INFO] Execution exec-053f07e119b3f2dfc started.
[INFO] Started logging in destination hostId: host-01961e38ec2b4a95e for Execution exec-053f07e119b3f2dfc
[INFO] Started logging in destination hostId: host-02e61583f13b8bcc8 for Execution exec-053f07e119b3f2dfc
[INFO] Started logging in destination hostId: host-033cb5eb37790ec43 for Execution exec-053f07e119b3f2dfc
[INFO] Started logging in destination hostId: host-09bf2bfcce2038880 for Execution exec-053f07e119b3f2dfc
[NOTICE] Transferred file /testfile-ii.txt, 0 bytes
[NOTICE] Transferred file /testfile-iii.txt, 0 bytes
[NOTICE] Transferred file /testfile-i.txt, 0 bytes
[NOTICE] Transferred directory metadata /
[INFO] Execution exec-053f07e119b3f2dfc finished with status Success.

補足

「Data to scanに含まれるファイル全体」といわれてもよくわからないのでは、と思い、こちらも図にしてみます。

以下のように、Data to scanには、今から転送するファイル以外にも、昨日転送したファイル一昨日転送したファイルのような、同じタスクを使った以前転送したファイルが含まれることがあります。

ここまでの各オプションのデータ転送後のチェックサム比較の実施の対象は、このようになります。

  • onlyオプションの場合は今から転送するファイルのみが対象
  • Allオプションの場合は今送ったものを含むこれまでに送った全ファイル = Data to scan全体が対象

結局どれを選べばいいのか?

ユースケースによります!といってしまえばそこまでなのですが、せっかくなのでどんなユースケースでどのオプションを選ぶべきか、まとめてみます。

  • 一般的なユースケースの場合
    • Verify only the data transferredを選びましょう
  • DataSyncタスク実行時のデータ整合性チェックに関する要件がある場合
    • Verify all data in the destinationを選びましょう
  • 一般的なユースケースかつログ量が気になりCloudWatch Logsの容量を抑えたい場合
    • Check integrity during the transferを検討しましょう。

基本的なユースケースではAWSの推奨設定でもあるVerify only the data transferredで問題ないと思われます。

DataSyncを使ったデータ転送に関するデータ整合性のチェックを厳密に行う(転送後にData to scan全体をチェックする)必要がある場合、Verify all data in the destinationを選ぶことがあるかもしれません。

一般的なユースケースではあるが、運用していく中でタスク実行時の転送ファイル量が膨大でCloudWatch Logsに保存するログサイズが気になってきた場合は、Check integrity during the transferにしてログ量を抑える選択肢もあるかと思います。

さいごに

本エントリでは、DataSyncタスク作成時に指定するデータ検証オプションを図に表して紹介しました。

DataSyncのタスクのデータ検証オプション選択に迷われている方にこの記事が届けばいいな、と思っています。

以上、AWS事業本部コンサルティング部の芦沢(@ashi_ssan)でした。


  1. 補足の章でもう少し深掘りしています