FURYU Tech Blog - フリュー株式会社

フリュー株式会社の開発者が技術情報を発信するブログです。

Amazon EventBridge Schedulerを使ってRDS(Aurora)をS3にエクスポートする

はじめに

ゲーム・アニメ事業部でスマートフォンゲームのサーバサイド開発をしている山根です。
今回は、定期的にAuroraをS3にエクスポートしたいと思い、Amazon EventBridge Schedulerを使ってみました。 docs.aws.amazon.com また、AuroraをS3にエクスポートするということで、StartExportTaskを利用します。 docs.aws.amazon.com

Roleの設定

今回の場合は、 StartExportTaskで利用するRoleとEventBridgeで利用するRoleの2つが必要になります。
まず、StartExportTaskで利用するRoleについてです。
StartExportTaskでRoleを利用するために、カスタム信頼ポリシーに

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "Service": "export.rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

を設定します。
また、許可ポリシーに

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::[バケット名]",
                "arn:aws:s3:::[バケット名]/*"
            ]
        }
    ]
}

を設定します。

次に、EventBridgeで利用するRoleについてです。
こちらでもEventBridgeでRoleを利用するために、カスタム信頼ポリシーに

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

を設定します。
また、許可ポリシーに

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "[StartExportTaskで利用するRoleのARN]"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "rds:StartExportTask",
            "Resource": "*"
        }
    ]
}

を設定します
これで、Roleの準備ができました。

EventBridgeの設定

EventBridgeのスケジュールの設定を行なっていきます。
まず、AWSコンソールのEventBridgeのスケジュールから「スケジュールを作成」を選択します。 次に、スケジュール名を入れ、今回はスケジュールグループを「default」にしています。 「スケジュールのパターン」には、定期実行をしたいので、「定期的なスケジュール」を選択し、 「cronベースのスケジュール」を使って、毎日深夜1時に実行するようにします。 タイムゾーンは、「Asia/Tokyo」を選択します。 次のターゲットの選択では、「Amazon RDS」内の「StartExportTask」を選択します。 「StartExportTask」の入力を設定します。 パラメータについては以下の通りになります。

パラメータ名 入力内容 必須
ExportTaskIdentifier 一意となる識別子
一意とするために<aws.scheduler.execution-id><aws.scheduler.scheduled-time>を使うとよい
IamRoleArn StartExportTaskで利用するRoleのARN
KmsKeyId KmsのKeyId
S3BucketName エクスポートするS3バケット名
SourceArn AuroraのクラスターARN
S3Prefix S3のPrefix
ExportOnly テーブル名等を指定する 指定がなければ全てが対象となる
指定方法は、"データベース名"または、"データベース名.テーブル名"等で指定可能

最後の設定では、「スケジュール完了後のアクション」を「NONE」にして、 「再試行ポリシーとデッドレターキュー」、「暗号化」は、用途に合わせて調整します。(今回は、未設定) 「アクセス許可」では、作成したEventBridgeで利用するRoleを設定します。 これで、最終確認して「スケジュールを保存」を実施することで、EventBridgeのスケジュールができました。

スケジュールによってS3へのエクスポートが動いたかどうかは、AWSコンソールの「RDS」の「Amazon S3 へエクスポート」から確認できます。

StartExportTaskの注意事項

今回は、EventBridgeだけの構成のため 「StartExportTask」の「SourceArn」は、クラスターARNを指定しました。
この挙動としては、対象のクラスターのクローンを作成し、クローンからデータを抽出し、S3にエクスポートします。
これらの実行はバックグラウンドで実行されるため、クラスターに対して影響はないみたいです。
ただし、クラスターのクローンを上限まで利用されている場合は、クラスターARN指定では、エラーとなります。
また、MySQLバージョン2、バージョン3のスナップショットのエクスポートで得られる高速なパフォーマンスは、クラスターの場合対象外となります。
これらを踏まえて、スナップショットを使ったエクスポートにする場合は、「StartExportTask」の「SourceArn」にスナップショットARNを指定することでエクスポート可能になります。
ただし、日々保存しているスナップショットの最新を指定したい場合は、EventBridgeだけでは実現が難しいためLambdaを使うなどして、最新のスナップショットARNを取得することおすすめします。

まとめ

今回は、EventBridgeのみでAuroraをS3にエクスポートする方法について紹介しました。
EventBridge Schedulerは、Lambda等を使わずにちょっとした設定をするだけ使えて便利だと思いました。