S3 sync で s3からファイルを同期させる時の注意点
はじめに
高橋です。
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 の挙動として同じファイルサイズの場合は同期されないとのこと。
先ほどの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
http://please-sleep.cou929.nu/asc-cli-exact-timestamps.html
http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html