[アップデート]AWS DataSyncは、新機能のタスクレポートで、タスク実行ごとのデータ転送の詳細なレポートが提供されるようになりました

タスクレポートは、CloudWatch Logsのログ設定よりも詳細な内容を確認できます。
2023.09.04

はじめに

AWS DataSyncは、タスクレポートというデータ転送の詳細レポートを提供するようになりました。

タスクレポートは、転送の成否や、スキップ、転送、検証、および削除された全てのファイルとフォルダについての詳細なレポートをS3バケットにJSON形式で保存します。

これにより、データ転送の監査、ファイルの保管過程の追跡、そして転送エラーのトラブルシューティングが容易になります。

さらに、AWS Glue、Amazon Athena、Amazon QuickSightのAWSサービスと組み合わせて、これらのレポートデータを自動的に処理、分析、可視化することにより、データ管理の効率化が図れます。

事前準備

今回は検証として、同一リージョン内のS3バケットからS3バケットへファイル転送するようDataSyncタスクを作成します。

  • 送信元と送信先のS3バケットを作成
    • 送信元S3バケット名:cm-datasync-source
      • ファイル名:test.jpgが保存されている
    • 送信元S3バケット名:cm-datasync-destination
      • ファイル名:testのコピー.jpgが保存されている

IAMロール作成

DataSyncがS3バケットにアクセスするための IAMロールを作成します。

IAMロールから信頼されたエンティティでDataSync - S3 Locationを選択します。

ポリシーAmazonS3FullAccessが自動で選択されますので、ロール名をS3AccessForDataSyncとして作成します。

ポリシーAmazonS3FullAccessよりも制限の厳しいポリシーを作成する場合、下記のドキュメントに設定ポリシーが記載されていますので、ご確認下さい。

DataSyncのタスクを作成

DataSyncのタスクの各設定内容は、下記のブログで分かりやすく説明されていますので、ご参考ください。

DataSyncのタスクを作成しましょう。

送信元のロケーションは、S3バケット名cm-datasync-sourceを選択し、先程作成したS3AccessForDataSyncというIAMロールを選択します。

送信先のロケーションは、S3バケット名cm-datasync-destinationを選択し、先程作成したS3AccessForDataSyncというIAMロールを選択します。

設定では、タスクの実行時に、送信元には存在しないが送信先のバケットには存在するファイル(testのコピー.jpg)を削除したいため、削除されたファイルを保持するのチェックを外しました。

理由としては、後述するタスクレポート機能のうち削除のレポートを確認したいためです。

他、下記の画像箇所の項目はデフォルトです。

レポートの設定内容は、後で詳細に解説しますが、下記の通りです。

  • レポートタイプ
    • 標準レポート
  • レポートレベル
    • 成功と失敗
  • レポートを出力するバケット
    • cm-datasync-destination
  • IAMロール
    • S3AccessForDataSync

CloudWatch Logsのログレベルは、転送されたすべてのオブジェクトとファイルをログに記録するにしています。

これでタスクを作成後、タスクを開始します。

S3バケットのファイル転送が完了すると、タスクが完了します。

タスクレポートを解説

タスクレポートについて解説します。

タスクレポートには、レポートタイプとレポートレベルの2つの選択項目がありますので、それぞれ分けて説明します。

レポートタイプ

レポートタイプには、概要レポート(Summary only)標準レポート(Standart report)の2種類があります。

概要レポート(Summary only)

概要レポートの内容について、実際のレポートを見ながら説明します。

概要レポートの保存先のS3URIは、s3://cm-datasync-destination/reports-prefix/Summary-Reports/task-ID/exec-ID/です。

概要レポートのファイルであるexec-ID.summary-v1.jsonファイルの中身は、下記の内容でした。

概要レポートのサンプル (クリックすると展開します)

exec-ID.summary-v1.json

{
  "AccountId": "アカウントID",
  "TaskExecutionId": "exec-02b42227e495df344",
  "SourceLocation": {
    "LocationType": "Amazon S3",
    "LocationId": "loc-04d7f473f4ed53aad",
    "CreationTime": "2023-09-03T11:38:34.008000000Z"
  },
  "DestinationLocation": {
    "LocationType": "Amazon S3",
    "LocationId": "loc-042325857c82bd933",
    "CreationTime": "2023-09-03T11:38:34.233000000Z"
  },
  "StartTime": "2023-09-03T11:53:58.459000000Z",
  "EndTime": "2023-09-03T11:54:04.439000000Z",
  "TotalTime": 5980,
  "OverallStatus": "SUCCESS",
  "Result": {
    "FilesTransferred": 1,
    "FilesDeleted": 1,
    "FilesVerified": 2,
    "FilesSkipped": 1,
    "BytesWritten": 9244,
    "BytesTransferred": 9244,
    "BytesCompressed": 5743,
    "PrepareDuration": 1544,
    "PrepareStatus": "SUCCESS",
    "TransferDuration": 3810,
    "TransferStatus": "SUCCESS",
    "VerifyDuration": 277,
    "VerifyStatus": "SUCCESS"
  },
  "Options": {
    "VerifyMode": "ONLY_FILES_TRANSFERRED",
    "OverwriteMode": "ALWAYS",
    "Atime": "BEST_EFFORT",
    "Mtime": "PRESERVE",
    "Uid": "NONE",
    "Gid": "NONE",
    "PreserveDeletedFiles": "REMOVE",
    "PreserveDevices": "NONE",
    "PosixPermissions": "NONE",
    "BytesPerSecond": -1,
    "TaskQueueing": "ENABLED",
    "LogLevel": "TRANSFER",
    "TransferMode": "CHANGED",
    "SecurityDescriptorCopyFlags": "NONE",
    "ObjectTags": "PRESERVE"
  },
  "Filters": { "Includes": [], "Excludes": [] }
}

概要レポートは、転送に関する下記の内容等が出力されます。

  • タスク実行を実行したAWSアカウント
    • AccountIdキーが該当します
  • 送信元と送信先の場所
    • SourceLocationDestinationLocationキーが該当します
  • タスクの実行が完了したか、キャンセルされたか、エラーが発生したか
    • OverallStatusキーが該当します
  • スキップ、転送、検証、削除されたファイルの合計数
    • Resultの下記のキーが該当します
      • FilesTransferred:転送されたファイル数
      • FilesDeleted:削除されたファイル数
      • FilesVerified:(DataSyncが転送中に整合性を)検証したファイル数
      • FilesSkipped:スキップされたファイル数
  • 転送された合計バイト数
    • ResultBytesTransferredキーが該当します
  • 開始時間と終了時間(転送の合計時間を含む)
    • StartTimeEndTimeTotalTimeキーが該当します
  • タスク設定 (帯域幅制限、データ検証、フィルターなど)
    • Optionsキー配下が該当します

標準レポート(Standart report)

標準レポートには、概要レポートに加えて下記の4つのレポートが出力されます。

  • 転送(Transferred)
    • DataSyncが転送しようとしたファイル、オブジェクト、ディレクトリ
    • ファイル名:exec-ID.files-transferred-v1-ID.json
  • スキップ(Skipped)
    • DataSyncが転送中にスキップされたファイル、オブジェクト、ディレクトリ
    • ファイル名:exec-ID.files-skipped-v1-ID.json
  • 検証(Verified)
    • DataSyncが転送中に整合性を確認しようとしたファイル、オブジェクト、ディレクトリ
    • ファイル名:exec-ID.files-verified-v1-ID.json
  • 削除(Deleted)
    • DataSyncが送信元には存在しないが送信先のバケットには存在するファイルを削除するようタスクを構成した場合に、削除されたファイル、ディレクトリ、オブジェクト
    • ファイル名:exec-ID.files-deleted-v1-ID.json

4つのレポートについても、実際のレポートを見ながら説明します。

標準レポートの保存先のS3URIは、s3://cm-datasync-destination/reports-prefix/Detailed-Reports/task-ID/exec-ID/です。

転送(Transferred)

標準の転送のレポートのファイルであるexec-ID.files-transferred-v1-ID.jsonの中身は、下記の内容でした。

標準の転送のレポートサンプル (クリックすると展開します)

exec-ID.files-transferred-v1-ID.json

{
  "TaskExecutionId": "exec-02b42227e495df344",
  "Transferred": [
    {
      "RelativePath": "/test.jpg",
      "SrcMetadata": {
        "Type": "Regular",
        "ContentSize": 9244,
        "Mtime": "2023-09-03T11:29:16.000000000Z"
      },
      "Overwrite": "False",
      "TransferTimestamp": "2023-09-03T11:57:25.358947114Z",
      "TransferType": "CONTENT_AND_METADATA",
      "TransferStatus": "SUCCESS"
    }
  ]
}

標準の転送レポートは、下記の内容等が出力されます。

  • 転送されたデータのパス
    • RelativePathキーが該当します
  • データ型、データサイズ (オブジェクトとファイルのみ) などが含まれるメタデータ
    • SrcMetadataキーが該当します
  • 転送された時刻
    • TransferTimestampキーが該当します
  • スキップ、転送、検証、削除されたファイルの合計数
    • Resultの下記のキーが該当します
      • FilesTransferred:転送されたファイル数
      • FilesDeleted:削除されたファイル数
      • FilesVerified:(DataSyncが転送中に整合性を)検証したファイル数
      • FilesSkipped:スキップされたファイル数
  • コピー先に上書きされた場合
    • Overwriteキーが該当します
  • 転送が成功したかどうか
    • TransferStatusキー配下が該当します

スキップ(Skipped)

標準のスキップのレポートファイルであるexec-ID.files-skipped-v1-ID.jsonの中身は、下記の内容でした。

標準のスキップのレポートサンプル (クリックすると展開します)

exec-ID.files-skipped-v1-ID.json

{
  "TaskExecutionId": "exec-02b42227e495df344",
  "Skipped": [
    {
      "RelativePath": "/",
      "SkippedTimestamp": "2023-09-03T11:57:25.810888496Z",
      "SrcMetadata": {
        "Type": "Directory",
        "Mtime": "1970-01-01T00:00:00.000000000Z"
      },
      "DstMetadata": {
        "Type": "Directory",
        "Mtime": "1970-01-01T00:00:00.000000000Z"
      },
      "SkippedReason": "Both the source and destination match and TransferMode=CHANGED"
    }
  ]
}

標準のスキップのレポートは、下記の内容等が出力されます。

  • スキップされたデータのパス
    • RelativePathキーが該当します
  • スキップされた時刻
    • SkippedTimestampキーが該当します
  • スキップされた理由
    • SkippedReasonキーが該当します

検証(Verified)

標準の検証レポートファイルであるexec-ID.files-verified-v1-ID.jsonの中身は、下記の内容でした。

標準の検証のレポートサンプル (クリックすると展開します)

exec-ID.files-verified-v1-ID.json

{
  "TaskExecutionId": "exec-02b42227e495df344",
  "Verified": [
    {
      "RelativePath": "/",
      "SrcMetadata": {
        "Type": "Directory",
        "Mtime": "1970-01-01T00:00:00.000000000Z"
      },
      "DstMetadata": {
        "Type": "Directory",
        "Mtime": "1970-01-01T00:00:00.000000000Z"
      },
      "VerifyTimestamp": "2023-09-03T11:57:26.338246757Z",
      "VerifyStatus": "SUCCESS"
    }
  ]
}

標準の検証レポートは、下記の内容等が出力されます。

  • 検証データのパス
    • RelativePathキーが該当します
  • 検証された時刻
    • VerifyTimestampキーが該当します
  • 検証が成功したかどうか
    • VerifyStatusキーが該当します

削除(Deleted)

標準の削除レポートファイルであるexec-ID.files-deleted-v1-ID.jsonの中身は、下記の内容でした。

標準の削除レポートサンプル (クリックすると展開します)

exec-ID.files-deleted-v1-ID.json

{
  "TaskExecutionId": "exec-02b42227e495df344",
  "Deleted": [
    {
      "RelativePath": "/testのコピー.jpg",
      "DstMetadata": {
        "Type": "Regular",
        "ContentSize": 9244,
        "Mtime": "2023-09-03T11:53:35.000000000Z"
      },
      "DeleteTimestamp": "2023-09-03T11:57:24.572738940Z",
      "DeleteStatus": "SUCCESS"
    }
  ]
}

標準の削除レポートは、下記の内容等が出力されます。

  • 削除されたデータのパス
    • RelativePathキーが該当します
  • データ型、データサイズなどの削除されたメタデータ
    • DstMetadataキーが該当します
  • 削除された時刻
    • DeleteTimestampキーが該当します
  • 正常に削除されたかどうか
    • DeleteStatusキーが該当します

レポートレベル

標準レポートのみ、レポートレベルを設定できます。概要レポートでは、選択できません。

レポートレベルには、以下の3つの種類があります。

  • 成功とエラー
    • DataSyncが正常に「転送、削除、検証、スキップ」されたものと、失敗したものが出力されます
  • エラーのみ
    • DataSyncが失敗したものだけが出力されます
  • カスタム
    • 「転送、削除、検証、スキップ」の各レポートに関して、成功とエラーもしくはエラーのみを出力させるか、選択できます。

実際の環境で利用される場合、少なくともエラーのみはレポートを出力しておくと、トラブルシューティングなどで役立ちます。

監査目的の場合、監査内容に応じて、成功とエラーカスタムにするとよいでしょう。

CloudWatch Logsのログ設定と比較

CloudWatch Logsのログ設定とタスクレポートについて、それぞれのメリット、デメリットと、利用用途を考えてみます。

CloudWatch Logsのログ設定に関しては、下記のブログをご参考ください。

ログ設定と比較してタスクレポートのメリットは、以下が挙げられます。

  • 監査として利用できる
    • 概要レポートの転送された合計バイト数やスキップ、転送、検証、削除されたファイルの合計数などタスク全体が把握できます
      • CloudWatch Logsは、各ファイルの結果は確認できますが、全体のファイル転送の成功数などは、確認できません。
  • データ分析と可視化ができる
    • AWS Glue、Amazon Athena、およびAmazon QuickSightなどのAWSサービスを使用して、これらのレポートのデータを自動的に処理、分析、可視化することができます。
  • S3に保存されるため、保存料金が安い

逆にデメリットは下記です。

  • エラー時、リアルタイムでのアラート通知は適さない
    • CloudWatch Logsの場合、EventBridgeで検知、アラート通知が可能
  • 分析時、Athenaが必要
    • CloudWatch Logsの方が、手間をかけずに検索できます。

つまり、CloudWatch Logsのログ設定は、監視とアラートで短期保管、タスクレポートは、監査と分析として長期保管で利用するのがよいと思います。

最後に

AWS DataSyncタスクレポートは、データ転送の監査や分析の際に有効な機能です。

特に、大量のデータを頻繁にAWSに移行する場合や、データ転送の状況を詳細に把握したい場合に最適です。

ぜひ有効活用してみてください。

参考