この記事は公開されてから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 はたくさんのオプションがあるので、正しく使いこなしましょう!