web-dev-qa-db-ja.com

AWS CLI S3:ターミナルを使用してローカルにファイルをコピーする:致命的なエラー:HeadObjectオペレーションを呼び出すときにエラーが発生しました(404)

S3バケットからローカルにファイルをコピーしようとしています。バケットのファイルのリストを取得できます。

aws s3 ls  s3://myBucket/myDirectory/todaysFiles/

しかし、ファイルをローカルにコピーしようとすると:

aws s3 cp s3://myBucket/myDirectory/todaysFiles/ .

私はこのエラーを受け取ります:

fatal error: An error occurred (404) when calling the HeadObject operation: Key "myDirectory/todaysFiles/" does not exist

しかし、私は1つのファイルだけをローカルにコピーしようとします:

 aws s3 cp s3://myBucket/myDirectory/todaysFiles/somefile .

私はこのエラーを受け取ります:

 warning: Skipping file s3://myBucket/myDirectory/todaysFiles/somefile. Object is of storage class GLACIER. Unable to perform download operations on GLACIER objects. You must restore the object to be able to the perform operation. See aws s3 download help for additional parameter options to ignore or force these transfers.

なぜこのエラーが発生するのか、またはこのエラーを回避する方法を知っている人はいますか?

本当にありがとうございます

15
user2924482

最初のエラーの場合-再帰フラグを追加します:

aws s3 cp s3://myBucket/myDirectory/todaysFiles/ . --recursive

これにより、「todaysFiles」ディレクトリ内のすべてのファイルが現在のディレクトリにコピーされます。

ただし、2番目のエラーは、ファイルがGlacierにあることを示しています。 Glacierはリアルタイムではないため、これは少し複雑になります-支払いたい額によっては、データが復元されるまでに数時間かかる場合があります。詳細については、 オブジェクトの復元 のドキュメントを参照してください。オブジェクトがGlacierからS3に復元されるまで、S3からコピーすることはできません。

これを行うと、GlacierとS3の両方からコストが発生することに注意してください。

余談ですが、これらのファイルが実際に今日のファイルである場合、S3でのストレージとGlacierへのプッシュの間にははるかに長い時間が必要です。しかし、親ディレクトリにも日付関連のコンポーネントが含まれている可能性があると推測しています。

23
stdunbar