s3 syncを定期実行するDockerイメージを作った

リポジトリは以下.イメージはcohalz/cron-s3-syncで利用可能.

github.com

以下のように実行するとyour-bucketというS3バケットにあるファイル群を/tmp/dir/ 以下に同期することができる.

docker run --init \
  -e "AWS_ACCESS_KEY_ID=xxxxxxxxxx" \
  -e "AWS_SECRET_ACCESS_KEY=xxxxxxxxxx" \
  -e "S3_BUCKET=your-bucket" \
  -e "LOCAL_DIR=/tmp/dir/" \
  -e "SYNC_TYPE=PULL" \
  cohalz/cron-s3-sync

同期は毎分実行され,変更のあったファイルだけが更新される.

逆にS3へバックアップしたいときにはSYNC_TYPE=PUSHとすることで,毎分S3へ同期させることができる.

主な用途として,別のコンテナで使うファイルを更新させたい場合に使える.このコンテナをサイドカーとして動かしボリュームを共有することで,その別のコンテナには手を加えずS3経由でファイルを更新することができる.

例えばEnvoyのDynamic configurationではファイルの更新を検知して再読込ができる*1ので,設定変更がEnvoyコンテナの入れ替えやコントロールプレーンの実装なしに実現できるようになる.*2