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