当Blogを動かしているAmazon Lightsailは、今まで気付いた時に手動でインスタンススナップショットを撮ってバックアップをしていましたが、今回はAWS CLIを使って自動バッックアップにトライしてみました。ベストなやり方ではないかもしれませんが、Linuxのサーバーはインスタンスが起動していてもスナップショットを取れるので、自分自身のインスタンスで自分自身のスナップショットを撮ってみます。
1. AWS CLI用のIAMユーザーを作成する
コマンドラインからAWSを操作するAWS CLI用のユーザーを作成します。今回はLightsailを操作しますが、EC2やS3など他のAWSサービスを操作する場合も同様です。
-1. サービス – IAM
-2. ユーザー – ユーザを追加
-3. 適当なユーザー名を入力、プログラムによるアクセスにチェック
-4. 既存のポリシーを直接アタッチ – PowerUserAccess 権限を付与
-5. 何もせず、次のステップ:確認
-6. ユーザーの作成
-7. アクセスキーIDと、シークレットアクセスキー取得
アクセスキーIDとシークレットアクセスキーは、AWS CLIの初期設定で使用するので控えておきます。
2. AWS CLIをいれる
-1. AWS CLIをインストール
LightsailインスタンスにSSHログインし、pipからインストールします。対象のOSはCentOS7です。
$ sudo -i # curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py" # python get-pip.py # pip install awscli --upgrade --ignore-installed six # pip install --upgrade pip # pip install requests --ignore-installed # pip install --upgrade --force-reinstall 'requests==2.6.0'
-2. AWS CLIの初期設定
先ほど取得した、アクセスキーIDとシークレットアクセスキー、Lightsailのリージョン(例えばap-northeast-1aなら、ap-northeast-1)、json を入力します。
# aws configure AWS Access Key ID [None]: AKIARCxxxxxxxxxxxxxxxxx AWS Secret Access Key [None]: ufr5j0juyyyyyyyyyyyyyyyyyyyyyyyyyy Default region name [None]: ap-northeast-1 Default output format [None]: json
3. Lightsail インスタンス スナップショットのシェルスクリプトを作成
AWS CLIで、インスタンス名(CentOS-512MB-Tokyo-2)と、スナップショット名(CentOS-512MB-Tokyo-2-Auto-yyyyMMdd)を指定します。スナップショット名は重複できないので、末尾に年月日を付加します。
today=$(date “+%Y%m%d”)
aws lightsail create-instance-snapshot –instance-name CentOS-512MB-Tokyo-2 –instance-snapshot-name CentOS-512MB-Tokyo-2-Auto-${today}
# vim /root/autobackup.sh
#!/bin/bash today=$(date "+%Y%m%d") aws lightsail create-instance-snapshot --instance-name CentOS-512MB-Tokyo-2 --instance-snapshot-name CentOS-512MB-Tokyo-2-Auto-${today} exit 0 ---------------- :wq
# chmod 700 /root/autobackup.sh
4. 定時実行用に noanacronをいれる
すでに入っている場合は、5. へ。
# yum -y install cronie-noanacron # yum -y remove cronie-anacron
5. 作成した autobackup.sh を 週一で実行させる
/etc/cron.d/dailyjobs を編集し、AWS_CONFIG_FILE=”/root/.aws/config”と、weekly 末尾に、&& /root/autobackup.sh を付加します。
# vim /etc/cron.d/dailyjobs
# Run the daily, weekly, and monthly jobs if cronie-anacron is not installed SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=hogehoge@ji0vwl.com AWS_CONFIG_FILE="/root/.aws/config" # run-parts 02 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily 22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly && /root/autobackup.sh 42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly ---------------- :wq
# systemctl restart crond
毎週日曜日、午前4:22ごろにインスタンススナップショットによる自動バックアップが実行されます。これで、いつこのサーバーが逝っても1週間前の状態には復元ができるようになりました。