【AWS】RDSのスナップショットをS3に定期エクスポートする方法
まずはじめに
Webエンジニア兼事業開発者のTeruie Obataです。
今回はRDSのスナップショットをBigQueryにインポートし、Looker Studioで視覚化したい!
の第1章としてRDSのスナップショットをS3に定期エクスポートする方法について解説したいと思います。
関連記事一覧
- 【第0章】まえがき ↓
- 【第1章】AWSとBigQueryの接続 ↓
- 【第2章】BigQueryとLooker Studioの接続 ↓
今回触れないこと
- AWSのサービス紹介
- S3の作成
- KMSの作成
- 私の場合カスタマー管理型(その他デフォルト値)で作成しました。
- AWSとBigQueryの接続
- BigQueryとLooker Studioの接続
簡単な構成図
流れとしては以下のような段階を踏んでいます。
- RDSのスナップショットを作成
- EventBridgeからLambda関数を実行
- S3にスナップショットをエクスポート
いざ実践
それでは実際にやってみましょう。
スナップショットをS3にエクスポートするために必須なポリシー作成
まず初めにスナップショットをS3にエクスポートするために必要なポリシーを作成していきます。
今回はJSON形式で設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:PutObject*",
"s3:GetObject*",
"s3:DeleteObject*"
],
"Resource": [
"arn:aws:s3:::[エクスポート先のS3バケット名]",
"arn:aws:s3:::[エクスポート先のS3バケット名]/*"
]
}
]
}
スナップショットをS3にエクスポートするために必須なロール作成
次にスナップショットをS3にエクスポートするために必要なロールを作成します。
以下の値で作成します。
エンティティタイプ : AWSのサービスを指定
ユースケース : RDS - Add Role to Databaseを指定
次へをクリックすると許可ポリシー設定があるので一つ前で作成したポリシーを選択しましょう。
ロールの信頼関係書き換え
ロールの作成が完了したら信頼ポリシーの書き換えを行います。
今回もJSON形式で設定していきましょう。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "export.rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Lambdaの関数作成
続いてはスナップショットをS3にエクスポートさせるためのLambda関数を作成していきます。
※値は適宜下記画像を参考にしてください
Lambdaに関するポリシーとロールを作成
Lambda関数作成時に基本的なLambdaアクセス権限で新しいロールを作成を選択したのでAWSLambdaBasicExecutionRole-[uuid]
などの新しいロールが作成されていると思います。
確認できましたら再度ポリシーを新規で作成し、Lambda関数作成時に作成されたロールにアタッチしていきましょう。
こちらもJSON形式で記述していきます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:PassRole",
"rds:StartExportTask"
],
"Resource": "*"
}
]
}
Lambdaコードの作成
Lambdaコードの作成を行なっていきます。
import json
import boto3
from datetime import datetime
SOURCE_ARN="" # エクスポート対象とするRDSスナップショットのARN
S3_BUCKET_NAME="" # 出力先のS3バケット名
IAM_ROLE_ARN="" # S3にエクスポートする際に使用するロールのARN
KMS_KEY_ID="" # 作成したKMSキーのARN
client = boto3.client('rds')
def lambda_handler(event, context):
export_task_identifier="mysnapshot" + datetime.now().strftime("%Y%m%d%H%M%S")
response = client.start_export_task(
ExportTaskIdentifier=export_task_identifier,
SourceArn=SOURCE_ARN,
S3BucketName=S3_BUCKET_NAME,
IamRoleArn=IAM_ROLE_ARN,
KmsKeyId=KMS_KEY_ID,
)
KMSのユーザーにLambdaのロールを追加
事前に作成してあるKMSキーユーザーにLambdaのロールを追加しましょう。
定期実行の設定
作成したLambda関数の編集ページからトリガーを設定します。
今回は24時間に1回実行したいのでEventBridgeを指定し以下のように設定します。
まとめ
お疲れ様でした!
あとは設定した時間に実行できているか確かめましょう!
今回はRDSのスナップショットを定期的にエクスポートする方法を説明しました。
一件のみ取得したいのであればRDSのアクションからS3にエクスポートすれば良いのですが、定期的に取得したい場合があると思います。
今回のやり方だとEventBridgeから定期的にLambda関数を実行できるのでぜひ試してみてください
Discussion