2017年8月3日木曜日

Container Linux(CoreOS)から、S3などオブジェクトストレージへ「aws-cli」を使って、定期バックアップする方法


Container Linux(CoreOS)で
  • 定期バックアップ
  • バックアップ先にS3(互換を含む)オブジェクトストレージを利用した
この際の手順を、まとめておきたいと思います!


もくじ



Container Linux(CoreOS) で 「aws-cli」を使う

Container Linux(CoreOS) の軽量さを活かしたまま、『aws-cli』を使いたい!!
そうなると、実現方法は一つで
  • Dockerでaws-cli動く環境を用意する
だけなんですね。。。

設定とか、認証とかどーすんだ!?って悩むんですが。
ものはやってみろ!ってことでやってみました~

Docker imageを使わせてもらう

今回は、こちらのDocker image を使わせてもらいました!
Dockerfile見た感じ、だいぶシンプルだったので。

null

null

githubだと、ここ。

sekka1/aws-cli-docker

aws-cli-docker - Docker container with the AWS CLI

docker-compose.ymlも用意されていて、便利便利w
お試しのコマンド「.env」ファイルを準備して、以下をたたくだけ。
echo AWS_ACCESS_KEY_ID=ID >> .env
echo AWS_SECRET_ACCESS_KEY=KEY >> .env
docker-compose run aws s3 ls
今回は、IDCFさんでやったので、ちょっとだけコマンド引数が増えて
echo AWS_ACCESS_KEY_ID=(IDCFの)API Key >> .env
echo AWS_SECRET_ACCESS_KEY=(IDCFの)Secret Key >> .env
docker-compose run aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 ls
東日本だと、こんな感じー

IDCFのオブジェクトストレージ使うのに参考にした記事:


データは、volumesで見られるように改変

docker-dompose.ymlを以下のように改変
--- docker-compose.yml  2017-08-02 17:12:30.987741061 +0900
+++ docker-compose.yml.mine      2017-08-02 18:19:16.540945574 +0900
@@ -7,3 +7,7 @@
       - AWS_ACCESS_KEY_ID
       - AWS_SECRET_ACCESS_KEY
       - AWS_DEFAULT_REGION
+    volumes:
+      - /srv/bitnami/nginx_data:/opt/nginx
+      - /srv/docker/redmine/redmine:/opt/redmine/data
+      - /home/core:/opt/core
volumes を追加して、『aws-cli』のDockerから、みられるように改変

Container Linux(CoreOS) で 「定期ジョブ(cron job)」 を使う

SPOFを防ぐためには、本来外部からJobをコントロールすべきなのですが。
今回は個人的な利用用途ということで
Container Linux(CoreOS) で 『定期ジョブ』 を実行させる方法です。

これ、結構苦労したんです・・・
合っているかどうか、正直わからないのですが。今回はこうしました的な内容となっております・・・。
  • cloud-configで設定を書いて適用
サンプルとして、以下さらしておきます・・・。
coreos:
  units:
    - name: docker-redmine-backup.service
      enable: false # サービスとしては「無効化」でtimerで実行してもらう
      content: |
        [Unit]
        Description=Redmine data backup

        [Service]
        Type=oneshot
        ExecStart=/usr/bin/sh -c '/usr/bin/sh /home/core/aws-cli-docker/docker-redmine-backup.sh' # ダサいw

        [Install]
        WantedBy=multi-user.target
    - name: docker-redmine-backup.timer
      enable: true
      content: |
        [Unit]
        Description=Run docker-redmine-backup.service every-day AM 7:00

        [Timer]
        OnCalendar=*-*-* 07:00:00 # 毎日AM7時に実行
        Unit=docker-redmine-backup.service # docker-redmine-backup.timerという風に本来同じ名前なら省略可能

        [Install]
        WantedBy=timers.target
適用
sudo coreos-cloudinit --from-file ./cloud-config.yml
参考:

CoreOS

CoreOS provides Container Linux, Tectonic for Kubernetes and the Quay image registry; key components to secure, simplify and automatically update your container infrastructure.





バックアップに使ったシェルスクリプト

こちらもダサダサですが、さらしておきますw
#!/bin/sh

cd /home/core/aws-cli-docker
/opt/bin/docker-compose -f docker-compose.yml.mine run aws --endpoint-url https://ds.jp-east.idcfcloud.com s3 sync /opt s3://redmine-backups/docker --exclude '*/tmp'

exit 0 # どうしても「0」以外が返ってくるのを回避できなかったので、すみませんw
あー、ダサダサwww

まとめ

Container Linux(CoreOS) で
  • aws-cli使う方法
  • 定期ジョブの実行方法
でした。

本当にSPOFなので、あんまりおススメはできないのですが、趣味の範疇でということでw

Zenback