LoginSignup
1
1

More than 3 years have passed since last update.

データベースのダンプをAmazonS3にアップロード

Last updated at Posted at 2019-08-17

オンプレミスで動かしているデータベースサーバのバックアップを誰も取っていなかった。
簡単なシェルスクリプトで、AWSのオンラインストレージ、S3バケットにバックアップするようにしたので、手順を紹介する。

準備

グループにポリシーをアタッチ

グループを作成し、ポリシーをアタッチする。
ただし、IAMユーザから直接ポリシーにアタッチする場合は、本作業は不要である。
image.png
今回は、AWSが標準で提供するポリシー(AmazonS3FullAccess)にアタッチする。
バケットを限定したい等の要件があれば、次のようなポリシーを作成しても良い。

JSON
{
    "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 権限も付与すること。

:book: S3バケットのオブジェクトへの読み取りおよび書き込みアクセスを許可する

S3専用IAMユーザ作成

IAMユーザを作成し、先ほどのグループに所属させるか、ポリシーに直接アタッチする。
[プログラムによるアクセス] にチェックを入れること。
image.png
アクセスキーをダウンロードする。
image.png

AWS CLIのインストール

AWS CLIAWS Command Line Interface)は、マネジメントコンソールで提供されるすべての機能をコマンドベースでも利用できるようにしたツールだ。
aptyumなどのリポジトリで参照できるが古い場合があるので、そのときは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プロトコルに対応している。
winscp.png

さいごに

アクセスキーを、ソースコードや環境定義ファイルに残したままGitHubに公開し、サーバをクラッカーに乗っ取られるという事件が後を絶たない。アクセスキーの管理にはくれぐれも気を付けよう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1