S3 sync で s3からファイルを同期させる時の注意点

93件のシェア(ちょっぴり話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

高橋です。

s3 sync で作業をしていた際に、同期されるはずのファイルが同期されなかったので調査してみました。

事象

s3にアップロードしたファイルをローカルに同期させる際に同期されないファイルがあった。

s3にアップロードしたdocument.txtをローカルに同期する

s3にアップロードしたファイル

$ aws s3 ls s3://test.takahashi.yusuke/
2015-06-26 18:56:05 4847 document.txt

現在のローカルのファイル

$ ll ~/docs/
total 16
drwxr-xr-x 3 takahashiyusuke staff 102 6 25 13:17 .
drwxr-xr-x+ 60 takahashiyusuke staff 2040 6 25 13:16 ..
-rw-r--r-- 1 takahashiyusuke staff 4847 6 26 18:54 document.txt

同期を実施

$ aws s3 sync s3://test.takahashi.yusuke ~/docs
$

s3のファイルをローカルに同期したかったのですが、同期されませんでした。

対応方法

調べたところ、s3 sync の挙動として同じファイルサイズの場合は同期されないとのこと。

AWS CLI Documentation s3 sync | --exact-timestamps

When syncing from S3 to local, same-sized items will be ignored only when the timestamps match exactly.

先ほどのs3とローカルのファイルサイズを確認すると、ファイルサイズが同じでした。

・S3 2015-06-26 18:56:05 4847 document.txt ・ローカル -rw-r--r-- 1 takahashiyusuke staff 4847 6 26 18:54 document.txt

同じサイズのファイルをタイムスタンプが違う場合でも同期したい場合、 下記オプションを使用することで同期が可能です。

--exact-timestamps

オプションをつけて実行

$ aws s3 sync --exact-timestamps s3://test.takahashi.yusuke ~/docs
download: s3://test.takahashi.yusuke/document.txt to ./document.txt

downloadされました。

ローカルのディレクトリで確認

$ ll ~/docs
total 16
drwxr-xr-x 3 takahashiyusuke staff 102 6 26 13:17 .
drwxr-xr-x+ 60 takahashiyusuke staff 2040 6 26 13:19 ..
-rw-r--r-- 1 takahashiyusuke staff 4847 6 26 18:56 document.txt

タイムスタンプもS3のものと同じになっていますね。

また、「--delete」オプションを使用すると 同期元にない、同期先のファイルが削除されます。

同期先に「document2.txt」を作成して同期実行時に削除されるか確認します。 S3にはdocument2.txtはありません。

$ touch document2.txt
$ ll ~/docs/
total 16
drwxr-xr-x 4 takahashiyusuke staff 136 6 26 19:10 .
drwxr-xr-x+ 60 takahashiyusuke staff 2040 6 26 13:19 ..
-rw-r--r-- 1 takahashiyusuke staff 4847 6 26 18:56 document.txt
-rw-r--r-- 1 takahashiyusuke staff 0 6 26 19:10 document2.txt

--deleteオプションを使用して実行

$ aws s3 sync --exact-timestamps --delete s3://test.takahashi.yusuke ~/docs
delete: ./document2.txt
$ ll ~/docs
total 16
drwxr-xr-x 3 takahashiyusuke staff 102 6 26 19:13 .
drwxr-xr-x+ 60 takahashiyusuke staff 2040 6 26 13:19 ..
-rw-r--r-- 1 takahashiyusuke staff 4847 6 26 18:56 document.txt

deleteされました。

まとめ

s3 sync を同期ツールとして使用する運用も多いかと思います。 s3 sync はたくさんのオプションがあるので、正しく使いこなしましょう!

参考URL

aws-cli s3 sync の --exact-timestamps

AWS CLI Documentation s3 sync