EC2からS3へログをバックアップしたいと言われたので調べてみた。ローテートのタイミングでアップデートすれば良いのかな?と思ったり。
S3で新規にログ保管用のバケットを作成する。
EC2インスタンスからS3へログをアップロードするためのグループ および アカウントを作成する。
上記で作成したグループ/アカウントにアタッチする、S3操作のみの最小限の権限ポリシーを新規作成する。
ログアーカイブを行うEC2インスタンス上で、awscli を使えるようにする。
EC2インスタンス上でログ操作を行うユーザアカウントで awscli を設定する。
$ vi ~/.bashrc
## awscli completer
complete -C '/usr/bin/aws_completer' aws
$ source .bashrc
$ aws configure
AWS Access Key ID [None]: [アクセスキー ID]
AWS Secret Access Key [None]: [シークレットキー]
Default region name [None]: ap-northeast-1
Default output format [None]: json
awscli を利用して、S3の操作が出来る事を確認
$ touch test
$ aws s3 cp test s3://[バケット名]/test
$ aws s3 rm s3://[バケット名]/test
ポイントとして
awscli のオプション/ヘルプについては[TAB補完]か末尾に"help"を付ける事で参照出来る。
$ aws s3 [TAB]
cp ls mb mv rb rm sync website
# aws s3 sync help
/etc/logrotate.d/ 配下の設定で、postrotate に以下のような設定を加える。
...
postrotate
LOGNAME="messages-$(date +%Y%m%d)"
MAILBODY="$(hostname) - $(hostname -i)\nAWS logrotation error\n${LOGNAME} not archived."
SENDTO="ec2-user"
aws s3 cp /var/log/${LOGNAME} s3://[バケット名]/$(hostname)/$(date +%Y)/$(date +%m)/ ; if [ $? != 0 ]; then echo -e ${MAILBODY} | mail -s "AWS: $(hostname) S3 Log archive ERROR!!!" ${SENDTO} ; fi
...
endscript
各種動作確認を行い、ログが送られる事を確認
$ sudo logrotate -f /etc/logrotate.configure