翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS アカウント間の Amazon RDSインスタンスのレプリケーションを自動化する
作成者: Parag Nagwekar (AWS) と Arun Chandapillai (AWS)
環境:本稼働 | テクノロジー: データベース DevOps、サーバーレス、インフラストラクチャ | ワークロード:その他すべてのワークロード |
AWS サービス: AWS Lambda、Amazon、 RDS AWS SDK for Python (Boto3)、AWSStep Functions、Amazon SNS |
[概要]
このパターンは、AWSStep Functions と AWS Lambda を使用して、異なるアカウント間で Amazon Relational Database Service (Amazon RDS) DB インスタンスをレプリケート、追跡、ロールバックAWSするプロセスを自動化する方法を示しています。この自動化を使用すると、組織の規模に関係なく、パフォーマンスへの影響や運用上のオーバーヘッドなしに RDS DB インスタンスの大規模なレプリケーションを実行できます。このパターンを使用して、組織が必須のデータガバナンス戦略またはコンプライアンス要件に準拠できるようにすることもできます。コンプライアンス要件では、異なるAWSアカウントやAWSリージョンにまたがってデータをレプリケートし、冗長化する必要があります。大規模な Amazon RDSデータのクロスアカウントレプリケーションは、コストと時間がかかる可能性がある非効率でエラーが発生しやすい手動プロセスですが、このパターンの自動化は、クロスアカウントレプリケーションを安全かつ効果的に、効率的に実現するのに役立ちます。
前提条件と制限
前提条件
2 つのAWSアカウント
ソースAWSアカウントで稼働している RDS DB インスタンス
送信先AWSアカウントの RDS DB インスタンスのサブネットグループ
ソースAWSアカウントで作成され、送信先アカウントと共有されている AWS Key Management Service (AWS KMS) キー (ポリシーの詳細については、このパターンの「追加情報」セクションを参照してください)。
送信先AWSアカウントのデータベースを暗号化する送信先アカウントの AWSKMSキー
製品バージョン
Python 3.9 (Lambda AWS を使用)
PostgreSQL 11.3、13.x、および 14.x
アーキテクチャ
テクノロジースタック
Amazon Relational Database Service (Amazon RDS)
Amazon Simple Notification Service (Amazon SNS)
AWS Key Management Service (AWS KMS)
AWS Lambda
AWS Secrets Manager
AWS Step Functions
ターゲット アーキテクチャ
次の図は、Step Functions を使用して、RDSDB インスタンスのスケジュールされたオンデマンドレプリケーションをソースアカウント (アカウント A) から宛先アカウント (アカウント B) にオーケストレーションするためのアーキテクチャを示しています。
![Step Functions を使用して、ソースアカウントと宛先アカウント間で Amazon RDS DB インスタンスをレプリケートします。](images/pattern-img/6310ad9b-1b1a-4a67-b684-ef605fef3e87/images/8a8beeb1-0c77-4a38-88e9-9c689a59b990.png)
ソースアカウント (図のアカウント A) では、Step Functions ステートマシンが以下を実行します。
アカウント A の RDS DB インスタンスからスナップショットを作成します。
アカウント A の AWSKMSキーを使用してスナップショットをコピーして暗号化します。転送中の暗号化を確実にするために、DB インスタンスが暗号化されているかどうかにかかわらず、スナップショットは暗号化されます。
アカウント B にスナップショットへのアクセス権を付与することで、アカウント B と DB スナップショットを共有します。
SNS トピックに通知をプッシュし、SNSトピックがアカウント B の Lambda 関数を呼び出します。
宛先アカウント (図のアカウント B) では、Lambda 関数が Step Functions ステートマシンを実行して以下を調整します。
共有スナップショットをアカウント A からアカウント B にコピーし、まずアカウント A のAWSKMSキーを使用してデータを復号し、次にアカウント B のAWSKMSキーを使用してデータを暗号化します。
Secrets Manager からシークレットを読み取り、現在の DB インスタンスの名前を取得します。
Amazon の新しい名前とデフォルトAWSKMSキーを使用して、スナップショットから DB インスタンスを復元しますRDS。
新しいデータベースのエンドポイントを読み取り、Secrets Manager のシークレットを新しいデータベースエンドポイントで更新します。次に、以前の DB インスタンスにタグを付けて後で削除できるようにします。
データベースの最新の N 個のインスタンスを保持し、他のすべてのインスタンスを削除します。
ツール
AWS ツール
Amazon Relational Database Service (Amazon RDS) は、 AWS クラウドでリレーショナルデータベースをセットアップ、運用、スケーリングするのに役立ちます。
Amazon Simple Notification Service (Amazon SNS) は、ウェブサーバーや E メールアドレスなど、パブリッシャーとクライアント間のメッセージ交換の調整と管理に役立ちます。
AWS CloudFormation は、AWSリソースをセットアップし、迅速かつ一貫してプロビジョニングし、AWSアカウントとリージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。
AWS Key Management Service (AWS KMS) は、データを保護するための暗号化キーの作成と制御に役立ちます。
AWS Lambda は、サーバーのプロビジョニングや管理を必要とせずにコードを実行するのに役立つコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
AWS SDK for Python (Boto3)
は、Python アプリケーション、ライブラリ、またはスクリプトを AWSサービスに統合するのに役立つソフトウェア開発キットです。 AWS Secrets Manager は、パスワードを含むコード内のハードコードされた認証情報を Secrets Manager へのAPI呼び出しに置き換えて、プログラムでシークレットを取得するのに役立ちます。
AWS Step Functions は、Lambda 関数と他の サービスを組み合わせてビジネスクリティカルなアプリケーションを構築するのに役立つサーバーレスオーケストレーションAWSサービスです。
コード
このパターンのコードは、 GitHub クロスアカウントRDSレプリケーション
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
ソースアカウントに CloudFormation スタックをデプロイします。 |
| クラウド管理者、クラウドアーキテクト |
CloudFormation スタックを送信先アカウントにデプロイします。 |
| クラウドアーキテクト、 DevOps エンジニア、クラウド管理者 |
送信先アカウントで RDS DB インスタンスの作成を確認します。 |
| クラウド管理者、クラウドアーキテクト、 DevOps エンジニア |
Lambda 関数をSNSトピックにサブスクライブします。 | 送信先アカウント (AWSアカウント BCLI) の Lambda 関数をソースアカウント (アカウント A) のSNSトピックにサブスクライブするには、次のAWSコマンドラインインターフェイス () コマンドを実行する必要があります。 アカウント A で、次のコマンドを実行します。
アカウント B で、次のコマンドを実行します。
アカウント B で、次のコマンドを実行します。
| クラウド管理者、クラウドアーキテクト、 DBA |
ソースアカウントから RDS DB インスタンスを送信先アカウントと同期します。 | ソースアカウントで Step Functions ステートマシンを起動して、オンデマンドデータベースレプリケーションを開始します。
注: スケジュールに従って自動的にレプリケーションを実行できるようにスケジューラーは用意されていますが、スケジューラーはデフォルトではオフになっています。スケジューラの Amazon CloudWatch ルールの名前は、ターゲットアカウントの CloudFormation スタックのリソースタブにあります。 CloudWatch イベントルールを変更する方法については、 CloudWatch ユーザーガイドの CloudWatch 「イベントルールの削除または無効化」を参照してください。 | クラウドアーキテクト、 DevOps エンジニア、クラウド管理者 |
必要に応じて、データベースを以前のコピーのいずれかにロールバックする。 |
| クラウド管理者、DBA、 DevOps エンジニア |
関連リソース
クロスリージョンリードレプリカ (Amazon RDSユーザーガイド)
ブルー/グリーンデプロイ (Amazon RDS ユーザーガイド)
追加情報
次のポリシー例を使用して、AWSアカウント間でAWSKMSキーを共有できます。
{ "Version": "2012-10-17", "Id": "cross-account-rds-kms-key", "Statement": [ { "Sid": "Enable user permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<SourceAccount>:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<DestinationAccount>:root" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<DestinationAccount>:root", "arn:aws:iam::<SourceAccount>:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey", "kms:CreateGrant" ], "Resource": "*" } ] }