有項工作需要將 BTSync 上的資料同步上 AWS S3,並做靜態網頁使用。原本打算用來將 S3 掛載為虛擬磁碟的 s3ql 來用,但 s3ql 寫入的是 block data 而非 file,檔案同步上去要當作 static website 來用不太可能。
後來發現 AWS command line interface 的 s3 有個功能「sync」,會自動偵測要同步的項目。於是可以寫成:
$ aws s3 sync btsync/ s3://target-bucket
以上已可以將有異動的資料上傳到 AWS S3 上,但若 BTSync 若有檔案刪除,S3 上的資料仍會保留。若要刪除的動作也在 S3 重複一次,則要加上「–delete」參數:
$ aws s3 sync btsync/ s3://target-bucket --delete
還差一個步驟。要做 static web hosting,檔案必須讓所有人可以讀取,所以從網頁上操作的話,需要手動「Make Public」。
而 CLI 則是使用 –grants 幫檔案加上權限。參考 AWS ACL 設定,要讓所有人均可讀取,要設定成:
--grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
如此一來,上傳的檔案會自動設定為公開。
完整的 sync 指令如下:
aws s3 sync btsync/ s3://target-bucket --delete --exclude ".Sync*" --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
最後定 crontab 自動執行,大功告成。