はじめに
ゲーム・アニメ事業部でスマートフォンゲームのサーバサイド開発をしている山根です。
今回は、定期的に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等を使わずにちょっとした設定をするだけ使えて便利だと思いました。