オンプレミスで動かしているデータベースサーバのバックアップを誰も取っていなかった。
簡単なシェルスクリプトで、AWSのオンラインストレージ、S3バケットにバックアップするようにしたので、手順を紹介する。
準備
グループにポリシーをアタッチ
グループを作成し、ポリシーをアタッチする。
ただし、IAMユーザから直接ポリシーにアタッチする場合は、本作業は不要である。
今回は、AWSが標準で提供するポリシー(AmazonS3FullAccess
)にアタッチする。
バケットを限定したい等の要件があれば、次のようなポリシーを作成しても良い。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::your-bucket1",
"arn:aws:s3:::your-bucket2"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::your-bucket1/*",
"arn:aws:s3:::your-bucket2/*"
]
}
]
}
なお、後述する WinSCP 等のファイル転送ソフトを使う場合で、バケットの一覧を表示するには ListAllMyBuckets
権限も付与すること。
S3バケットのオブジェクトへの読み取りおよび書き込みアクセスを許可する
S3専用IAMユーザ作成
IAMユーザを作成し、先ほどのグループに所属させるか、ポリシーに直接アタッチする。
[プログラムによるアクセス] にチェックを入れること。
アクセスキーをダウンロードする。
AWS CLIのインストール
AWS CLI(AWS Command Line Interface)は、マネジメントコンソールで提供されるすべての機能をコマンドベースでも利用できるようにしたツールだ。
apt
やyum
などのリポジトリで参照できるが古い場合があるので、そのときはPythonのパッケージ管理ツールpip
でインストールしよう。
# apt -y install awscli
# aws --version
aws-cli/1.11.13 Python/3.5.2 Linux/4.4.0-145-generic botocore/1.4.70
認証情報の設定
ダウンロードしたアクセスキーを入力する。
デフォルトのリージョンには、一番安いオレゴン(月あたり 0.023USD/GB)を選択した。
# aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: us-west-2
Default output format [None]: json
# aws configure list
S3バケットの作成
バケット名はそのままURLになるため、すべてのS3ユーザでユニークなものとなる。
# aws s3 mb s3://mindwood
make_bucket: mindwood
# aws s3 ls
2019-08-18 00:00:00 mindwood
スクリプトの作成
環境が準備できたのでスクリプトを設置する。
MySQLのダンプを圧縮し、aws s3 cp
コマンドでアップロードするだけのシンプルなスクリプトだ。
一応、曜日をキーにすることで7世代まで対応させた。
#!/bin/bash
FILE=/tmp/dump`date +%w`.gz
mysqldump -u ユーザ名 -pパスワード データベース名 --hex-blob | gzip > $FILE # -pとパスワードの間に空白を入れないこと。バイナリカラムが無ければ--hex-blob不要
aws s3 cp $FILE s3://mindwood # テスト時は--dryrunオプション推奨
rm $FILE
あとは、このシェルをcron
に仕掛けておけばOKだ。
アップロードされたファイルは次のコマンドで確認できる。--recursive
を付けると再帰的にリストされる。
aws s3 ls s3://mindwood
WinSCPでS3を使うには
Windows で scp を使うときの定番ソフト WinSCP が、バージョン5.13からAmazon S3プロトコルに対応している。
さいごに
アクセスキーを、ソースコードや環境定義ファイルに残したままGitHubに公開し、サーバをクラッカーに乗っ取られるという事件が後を絶たない。アクセスキーの管理にはくれぐれも気を付けよう。