これから増やしていこうと思っているCDP(Cloud Design Pattern)ネタになります。
今回は「Web Storage Archiveパターン」です。
これは、ログやバックアップを定期的にS3にアーカイブしましょう、というパターンになります。
通常通り、cron等で定期的にs3cmd等を利用してS3に該当ファイルをアップロードしていればいいのですが、注意点としては、Auto Scalingを利用している場合、EC2のシャットダウン時にも該当ログをS3に保存する処理も必要となります。
これは、Auto Scalingは設定次第では負荷が減少すると自動的にEC2インスタンスを終了します。
その場合、前回のS3へのアーカイブから、インスタンス終了までのログやバックアップが消えてしまうことになります。
そこで、EC2インスタンス終了時にもS3にファイルをアップロードする仕組みを考えてみます。
今回はS3へのアップロードにs3cmdを利用するので、下記のように準備をしておきます。
# s3cmd --configure # mv /root/.s3cfg /root/backup2s3.cfg
s3cmdに関しては、s3cmdのまとめの通り本ブログでもいろいろと紹介しています。
次に、S3へのアーカイブ用のシェルスクリプトとして、例えば下記のようなものを用意します。
# cat /root/backup2s3.sh #!/bin/sh echo `date` - BEGIN s3cmd -c /root/backup2s3.cfg put /var/log/messages s3://www.suz-lab.com/`date '+%Y%m%d%H%M%S'`.log echo `date` - END
そして、ここがポイントですが、下記のような”rcスクリプト”を用意します。
(“CentOS 6.2″を前提としています)
# cat /etc/init.d/backup2s3 #!/bin/bash # # backup2s3 Backup to S3. # # chkconfig: 2345 99 10 # description: Backup to S3 # Source function library. . /etc/init.d/functions prog=backup2s3 exec=/root/${prog}.sh log=/root/${prog}.log lock=/var/lock/subsys/$prog # Source config if [ -f /etc/sysconfig/$prog ] ; then . /etc/sysconfig/$prog fi case "$1" in start) touch $lock ;; stop) $exec >> $log 2>&1 rm -f $lock ;; restart) ;; *) echo $"Usage: $0 {start|stop}" exit 2 esac exit $?
startでは実質何も実行せず、/var/lock/subsys/backup2s3を置くだけで、stopで上記のS3にアップロードするスクリプトを実行しています。
また、シャットダウン/リブート時にstopが実行されるサービスは、/var/lock/subsys/以下にファイルが置いてあるものとなります。
(/etc/rc(0|6).d/S00killallを読むとわかります)
最後に、下記のように自動起動化して、サービスを開始(何も実行しないですが)すればシャットダウン/リブート時に指定したファイルがS3にアップロードされます。
# chkconfig --add backup2s3 # chkconfig backup2s3 on # /etc/init.d/backup2s3 start
/etc/init.d/haltに記述してもシャットダウン/リブート時にスクリプトを実行できるのですが、その場合、先にネットワークが切られてしまい、S3へのアップロードができなくなってしまいました。
(この部分で苦労しました)
ちなみに「Scheduled Autoscalingパターン」でもrcスクリプトでバッチ処理の起動と終了を行うことになると思うので、参考になると思います。