Lambda から RDS の Snapshot を S3 バケットにエクスポートする方法について解説します。
特に構成とサービスと適用するIAMロールと権限について解説します。
RDS の Snapshot を S3 バケットにエクスポートできます。
しかもエクスポート作業はバックグラウンドで実行されるため、RDS インスタンスのパフォーマンスには影響しません。
スナップショットをエクスポートすると、RDS はスナップショットからデータを抽出して S3 バケットに保存します。
手動でもできますが Lambda と EventBridge を利用して定期的に自動化して実行できます。
以下の記事は Glue を利用してデータソースから ETL 処理を実行するためのロールとポリシーの設計なので参考にしてください。
【AWS】Glue Crawler のロールとポリシーの設計
【AWS】Glue Job のロールとポリシーの設計
■参考サイト
Amazon S3 への DB スナップショットデータのエクスポート
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html
AWS LambdaとEventbridgeでRDSのS3エクスポートを自動化する
https://www.seeds-std.co.jp/blog/creators/2022-07-22-143712/
Lambda(Python)でRDSスナップショットをS3にエクスポートする
https://qiita.com/hmdsg/items/a948b8e30eb5503438af
構成図
以下が構成図となります。
RDSが稼働しています。
登場人物は以下となります。
- Lambda
- Lambda にアタッチする IAM ロール
- RDS
- スナップショット
- S3 バット
- KMSキー
設計
以下のように設計します。
- Lambda(export-rds-snapshot-to-s3-test-lamnbda)は data-lake-test-lambda-role ロールをアタッチしている。
- Lambda(export-rds-snapshot-to-s3-test-lamnbda)のプログラムから data-lake-test-export-role ロールを呼び出している。
- Lambda(export-rds-snapshot-to-s3-test-lamnbda)は RDS(data-lake-test-rds)の Snapshot の data-lake-test-snapshot を S3 バケット(data-lake-snapshot-rds-test-s3)にエクスポートする。
各ロールとポリシー設計
各ロールとロールに割り当てるポリシーを以下のように設計します。
data-lake-test-lambda-role のポリシー
data-lake-test-lambda-role のポリシーは以下のようになります。
まずはロールに割り当てる信頼ポリシーです。
このロールは Lambda を実行するので “Service”: “lambda.amazonaws.com” を設定します。
この設定により data-lake-test-lambda-role は export-rds-snapshot-to-s3-test-lamnbda 関数に割り当てることができるようになり、実行することができるようになります。
■ロールに割り当てる信頼ポリシー
{ |
次に Lambda が実行できるように AWSLambdaBasicExecutionRole ポリシーを割り当てます。これはカスタムポリシーではなくマネージドポリシーとなります。
Lambda を実行する際に CloudWatch Logs に対する権限が必要になる
■AWSLambdaBasicExecutionRole(マネージドポリシー)
{ |
■data-lake-test-lambda-role-policy
{ |
data-lake-test-export-role のポリシー
data-lake-test-export-role のポリシーの設定をします。
このポリシーは export-rds-snapshot-to-s3-test-lamnbda 関数から呼び出されるポリシーとなります。
処理内容は RDS の Snapshot を S3 バケットにエクスポートすることです。そのため “export.rds.amazonaws.com” を設定しています。
■ロールに割り当てる信頼ポリシー
{ |
Snapshot を S3 バケットにエクスポートする為以下の権限を割り当てています。
■data-lake-test-export-role-s3-policy
{ |
Snapshot を KMS キーで暗号化し S3 バケットに保存する為、以下の権限を割り当てています。
■data-lake-test-export-role-s3-policy
{ |
■参考サイト
IAM ロールを使用した Amazon S3 バケットへのアクセスの提供
DB スナップショットデータを Amazon S3 にエクスポートする前に、スナップショットエクスポートタスクに対して Amazon S3 バケットへの書き込みアクセス権限を付与します。
これを行うには、 バケットへのアクセスを提供する IAM ポリシーを作成します。次に IAM ロールを作成して、このロールにポリシーをアタッチします。後で IAM ロールをスナップショットエクスポートタスクに割り当てます。
「スナップショットエクスポートタスクに対して Amazon S3 バケットへの書き込みアクセス権限を付与します。」とあるので実際にエクスポートする data-lake-test-export-role ロールに対してアクセス権限を追加することになります。
コメント