AWS DataSyncの転送元から即時取り出しできずエラーになる際の対処法を試してみた

AWS DataSyncの転送元から即時取り出しできずエラーになる際の対処法を試してみた

こんにちは、クラウド事業本部 コンサルティング部の荒平(@eiraces)です。

AWS DataSyncを利用してバケット間のデータコピーを実施する際に遭遇したエラー事象について紹介します。
このエラーはデータの取り出し時に発生しているので、コピー先は任意のサービス・クラスになります。

前提

本エントリで遭遇したエラーの再現状況です。

  • Amazon S3バケット間でのAWS DataSyncによるデータ移行
  • 送信元のS3バケットはGlacier Flexible Retrieval (旧 Glacier)クラス
    • 即時取り出しができないストレージクラス

ScreenShot 2025-05-04 at 22.51.16

転送元のストレージクラスは以下のような設定になっています。
今回は適当なオブジェクトを Glacier Flexible Retrieval (旧 Glacier) としました。

ScreenShot 2025-05-04 at 23.05.09

エラー内容

以下のようなエラーが発生し、ファイルが転送されることなく終了します。

Transfer and verification completed. There were some errors in your task execution. See a list of affected files in CloudWatch logs. If no files are listed in CloudWatch logs, contact AWS Support.(転送と検証が完了しました。タスクの実行でエラーが発生しました。CloudWatch ログで影響を受けたファイルのリストを参照してください。CloudWatchログに該当ファイルがない場合は、AWSサポートにお問い合わせください。)

ScreenShot 2025-05-04 at 22.57.42

CloudWatch Logsも一応確認してみます。ストレージクラスがサポートしていないようですね。
[ERROR] Failed to read source file /japanese-paper_00183.jpg: storage class does not support synchronous retrieval([エラー] ソースファイル /japanese-paper_00183.jpg の読み取りに失敗しました: ストレージクラスは同期取得をサポートしていません)

ScreenShot 2025-05-04 at 23.15.44

解消方法

ドキュメントを漁っても記載はなかったのですが(あれば是非Xなどで教えて下さい!)、DataSyncではコピー元が即時取り出しに対応していない場合、エラーになります。

そのため、マネジメントコンソールまたはS3 APIを利用して、オブジェクトを取り出し状態にします。

ScreenShot 2025-05-04 at 23.52.07-6370365

保持する日数、取得方法を指定して「復元を開始」します。

ScreenShot 2025-05-04 at 23.53.36

S3 APIを利用した取り出し

マネジメントコンソールではなく、CloudShellやCLIから取り出すこともできます。

https://docs.aws.amazon.com/ja_jp/amazonglacier/latest/dev/downloading-an-archive-using-cli.html

aws s3api restore-object \
  --bucket <s3-bucket-name> \
  --key <object-name> \
  --restore-request '{"Days":1,"GlacierJobParameters":{"Tier":"Expedited"}}'

上記コマンドを利用すると、保持期限1日、迅速取り出しで用意できます。
取り出し方法によっては料金が異なりますので、注意してください。

取り出しのステータスは以下のコマンドで確認できます。

aws s3api head-object --bucket <s3-bucket-name> --key <object-name>

ScreenShot 2025-05-05 at 00.25.09

1日を指定した場合、翌日にExpiry-dateが設定されます。
なお、取り出し中は、ongoing-request="true"が表示されます。

{
		"AcceptRanges": "bytes",
    "Restore": "ongoing-request=\"true\"",
    "LastModified": "2025-05-04T15:20:13+00:00",
    "ContentLength": 289098,
    "ETag": "\"51991fcae77ae5ef4219a78af0c85f0f\"",
    "ContentType": "text/csv",
    "ServerSideEncryption": "AES256",
    "Metadata": {
        "last-modified": "1744123205000"
    },
    "StorageClass": "GLACIER"
}

データ取り出しを実施してからDataSyncタスクを起動すると、成功できました。

ScreenShot 2025-05-05 at 00.52.07

ログを確認し、データコピーが成功で終了しています。

ScreenShot 2025-05-05 at 00.53.12-6374016

おわりに

以上、AWS DataSyncを利用した際にハマった事象でした。
元々お客様から問い合わせ頂いて調査をしていたのですが、意外と情報がなくて困りました。

このエントリが誰かの助けになれば幸いです。
それでは、クラウド事業本部 コンサルティング部の荒平がお送りしました!

参考

https://dev.classmethod.jp/articles/aws-datasync_s3_storage_class_supported/

直接的に本件と関連はないものの、S3 Glacier同士のSyncが必要であれば以下のre:postも参考になりそうです。

https://repost.aws/questions/QUFozqBdZTQbmiUYTNRYUwog/recovering-and-syncing-files-from-s3-glacier-flexible-retrieval

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.