【AWS】RDSのSnapshotをS3バケットにエクスポートする方法

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キー

【AWS】RDSのSnapshotをS3バケットにエクスポートする方法

 

 

 

設計

以下のように設計します。

  • 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 関数に割り当てることができるようになり、実行することができるようになります。

 

 

■ロールに割り当てる信頼ポリシー


  “Version”: “2012-10-17”, 
  “Statement”: [ 
    { 
      “Effect”: “Allow”, 
      “Principal”: { 
        “Service”: “lambda.amazonaws.com” 
      }, 
      “Action”: “sts:AssumeRole” 
    } 
  ] 
}

 

 

次に Lambda が実行できるように AWSLambdaBasicExecutionRole ポリシーを割り当てます。これはカスタムポリシーではなくマネージドポリシーとなります。

Lambda を実行する際に CloudWatch Logs に対する権限が必要になる

 

■AWSLambdaBasicExecutionRole(マネージドポリシー)


    “Version”: “2012-10-17”, 
    “Statement”: [ 
        { 
            “Effect”: “Allow”, 
            “Action”: [ 
                “logs:CreateLogGroup”, 
                “logs:CreateLogStream”, 
                “logs:PutLogEvents” 
            ], 
            “Resource”: “*” 
        } 
    ] 
}

 

 

■data-lake-test-lambda-role-policy


    “Version”: “2012-10-17”, 
    “Statement”: [ 
        { 
            “Effect”: “Allow”, 
            “Action”: [ 
                “iam:PassRole”, 
                “rds:StartExportTask” 
            ], 
            “Resource”: “*” 
        } 
    ] 
}

 

 

data-lake-test-export-role のポリシー

data-lake-test-export-role のポリシーの設定をします。

このポリシーは export-rds-snapshot-to-s3-test-lamnbda 関数から呼び出されるポリシーとなります。

処理内容は RDS の Snapshot を S3 バケットにエクスポートすることです。そのため “export.rds.amazonaws.com” を設定しています。 

 

 

■ロールに割り当てる信頼ポリシー


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

 

 

Snapshot を S3 バケットにエクスポートする為以下の権限を割り当てています。

 

 

■data-lake-test-export-role-s3-policy


    “Version”: “2012-10-17”, 
    “Statement”: [ 
        { 
            “Sid”: “SnapshotExportPolicy”, 
            “Effect”: “Allow”, 
            “Action”: [ 
                “s3:PutObject*”, 
                “s3:ListBucket”, 
                “s3:GetObject*”, 
                “s3:DeleteObject*”, 
                “s3:GetBucketLocation” 
            ], 
            “Resource”: [ 
                “arn:aws:s3:::data-lake-snapshot-rds-test-s3”, 
                “arn:aws:s3:::data-lake-snapshot-rds-test-s3/*” 
            ] 
        } 
    ] 
}

 

 

Snapshot を KMS キーで暗号化し S3 バケットに保存する為、以下の権限を割り当てています。

 

■data-lake-test-export-role-s3-policy


    “Version”: “2012-10-17”, 
    “Statement”: [ 
      { 
        “Sid”: “Allow use of KMS key in account 1111111111”, 
        “Effect”: “Allow”, 
        “Action”: [ 
            “kms:Encrypt”, 
            “kms:Decrypt”, 
            “kms:ReEncrypt*”, 
            “kms:GenerateDataKey*”, 
            “kms:CreateGrant”, 
            “kms:DescribeKey”, 
            “kms:RetireGrant” 
        ], 
        “Resource”: “arn:aws:kms:ap-northeast-1:111111111111:key/xxxxxxxxxxxxxxxxxxxxxxx” 
      } 
    ] 
}

 

 

 

■参考サイト

IAM ロールを使用した Amazon S3 バケットへのアクセスの提供

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ExportSnapshot.html#USER_ExportSnapshot.SetupIAMRole

 

 

DB スナップショットデータを Amazon S3 にエクスポートする前に、スナップショットエクスポートタスクに対して Amazon S3 バケットへの書き込みアクセス権限を付与します。

これを行うには、 バケットへのアクセスを提供する IAM ポリシーを作成します。次に IAM ロールを作成して、このロールにポリシーをアタッチします。後で IAM ロールをスナップショットエクスポートタスクに割り当てます。

 

 

「スナップショットエクスポートタスクに対して Amazon S3 バケットへの書き込みアクセス権限を付与します。」とあるので実際にエクスポートする data-lake-test-export-role ロールに対してアクセス権限を追加することになります。

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください