Automatisieren Sie die Replikation von RDS Amazon-Instances über AWS Konten hinweg - AWS Prescriptive Guidance

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Automatisieren Sie die Replikation von RDS Amazon-Instances über AWS Konten hinweg

Erstellt von Parag Nagwekar () und Arun Chandapillai () AWS AWS

Umwelt: Produktion

Technologien: Datenbanken DevOps; Serverlos; Infrastruktur

Arbeitslast: Alle anderen Workloads

AWSDienste: AWS Lambda; AmazonRDS; AWS SDK für Python (Boto3); AWS Step Functions; Amazon SNS

Übersicht

Dieses Muster zeigt Ihnen, wie Sie mithilfe von AWS Step Functions und Lambda den Prozess der Replikation, Nachverfolgung und Wiederherstellung Ihrer Amazon Relational Database Service (AmazonRDS) -DB-Instances über verschiedene AWS Konten hinweg automatisieren können. AWS Sie können diese Automatisierung verwenden, um eine groß angelegte Replikation von RDS DB-Instances ohne Leistungseinbußen oder betrieblichen Mehraufwand durchzuführen — unabhängig von der Größe Ihres Unternehmens. Sie können dieses Muster auch verwenden, um Ihr Unternehmen bei der Einhaltung verbindlicher Datenverwaltungsstrategien oder Compliance-Anforderungen zu unterstützen, die vorschreiben, dass Ihre Daten über verschiedene AWS Konten und Regionen hinweg repliziert und redundant sind. AWS Die kontenübergreifende Replikation von RDS Amazon-Daten in großem Umfang ist ein ineffizienter und fehleranfälliger manueller Prozess, der kostspielig und zeitaufwändig sein kann. Die Automatisierung in diesem Muster kann Ihnen jedoch dabei helfen, die kontenübergreifende Replikation sicher, effektiv und effizient durchzuführen.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Zwei AWS Konten

  • Eine RDS DB-Instance, die im AWS Quellkonto läuft

  • Eine Subnetzgruppe für die RDS DB-Instance im Zielkonto AWS

  • Ein AWS Key Management Service (AWSKMS) -Schlüssel, der im AWS Quellkonto erstellt und für das Zielkonto freigegeben wurde (Weitere Informationen zu Richtliniendetails finden Sie im Abschnitt Zusätzliche Informationen dieses Musters.)

  • Ein AWS KMS Schlüssel im AWS Zielkonto, um die Datenbank im Zielkonto zu verschlüsseln

Produktversionen

  • Python 3.9 (mit AWS Lambda)

  • Postgre SQL 11.3, 13.x und 14.x

Architektur

Technologie-Stack

  • Amazon Relational Database Service (AmazonRDS)

  • Amazon Simple Notification Service (AmazonSNS)

  • AWSSchlüsselverwaltungsservice (AWSKMS)

  • AWSLambda

  • AWS Secrets Manager

  • AWS Step Functions

Zielarchitektur

Das folgende Diagramm zeigt eine Architektur für die Verwendung von Step Functions zur Orchestrierung der geplanten On-Demand-Replikation von RDS DB-Instances von einem Quellkonto (Konto A) zu einem Zielkonto (Konto B).

Replizieren von RDS Amazon-DB-Instances über Quell- und Zielkonten hinweg mithilfe von Step Functions.

Im Quellkonto (Konto A im Diagramm) führt die Step Functions-Zustandsmaschine Folgendes aus:

  1. Erstellt einen Snapshot von der RDS DB-Instance in Konto A.

  2. Kopiert und verschlüsselt den Snapshot mit einem AWS KMS Schlüssel aus Konto A. Um die Verschlüsselung während der Übertragung sicherzustellen, wird der Snapshot verschlüsselt, unabhängig davon, ob die DB-Instance verschlüsselt ist oder nicht.

  3. Teilt den DB-Snapshot mit Konto B, indem Konto B Zugriff auf den Snapshot gewährt wird.

  4. Sendet eine Benachrichtigung an das SNS Thema, und dann ruft das SNS Thema die Lambda-Funktion in Konto B auf.

Im Zielkonto (Konto B im Diagramm) führt die Lambda-Funktion die Step Functions Functions-Zustandsmaschine aus, um Folgendes zu orchestrieren:

  1. Kopiert den gemeinsam genutzten Snapshot von Konto A auf Konto B, wobei zunächst der AWS KMS Schlüssel von Konto A verwendet wird, um die Daten zu entschlüsseln und dann die Daten mit dem Schlüssel in Konto B zu verschlüsseln. AWS KMS

  2. Liest das Geheimnis aus Secrets Manager, um den Namen der aktuellen DB-Instance zu erfassen.

  3. Stellt die DB-Instance aus dem Snapshot mit einem neuen Namen und AWS KMS Standardschlüssel für Amazon wieder herRDS.

  4. Liest den Endpunkt der neuen Datenbank und aktualisiert das Geheimnis in Secrets Manager mit dem neuen Datenbank-Endpunkt und kennzeichnet dann die vorherige DB-Instance, sodass sie später gelöscht werden kann.

  5. Behält die letzten N Instanzen der Datenbanken bei und löscht alle anderen Instanzen.

Tools

AWSWerkzeuge

  • Amazon Relational Database Service (AmazonRDS) unterstützt Sie bei der Einrichtung, dem Betrieb und der Skalierung einer relationalen Datenbank in der AWS Cloud.

  • Amazon Simple Notification Service (AmazonSNS) unterstützt Sie bei der Koordination und Verwaltung des Nachrichtenaustauschs zwischen Herausgebern und Kunden, einschließlich Webservern und E-Mail-Adressen.

  • AWS CloudFormationhilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus AWS konto- und regionsübergreifend zu verwalten.

  • AWSDer Key Management Service (AWSKMS) unterstützt Sie bei der Erstellung und Kontrolle kryptografischer Schlüssel, um Ihre Daten zu schützen.

  • AWSLambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • AWSSDKfor Python (Boto3) ist ein Softwareentwicklungskit, mit AWS dem Sie Ihre Python-Anwendung, -Bibliothek oder Ihr Skript in Dienste integrieren können.

  • AWSSecrets Manager hilft Ihnen dabei, hartcodierte Anmeldeinformationen in Ihrem Code, einschließlich Kennwörtern, durch einen API Aufruf von Secrets Manager zu ersetzen, um das Geheimnis programmgesteuert abzurufen.

  • AWSStep Functions ist ein serverloser Orchestrierungsdienst, mit dem Sie Lambda-Funktionen und andere AWS Dienste kombinieren können, um geschäftskritische Anwendungen zu erstellen.

Code

Der Code für dieses Muster ist im Repository Crossaccount Replication verfügbar. GitHub RDS

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Stellen Sie den CloudFormation Stack im Quellkonto bereit.

  1. Melden Sie sich bei der AWS Management Console für das Quellkonto (Konto A) an und öffnen Sie die CloudFormation Konsole.

  2. Klicken Sie im Navigationsbereich auf Stacks.

  3. Wählen Sie Stack erstellen und dann Mit vorhandenen Ressourcen (Ressourcen importieren).

  4. Wählen Sie auf der Seite Ressourcen identifizieren die Option Weiter aus.

  5. Wählen Sie auf der Seite „Vorlage angeben“ die Option Vorlage hochladen aus.

  6. Wählen Sie Datei auswählen, wählen Sie die Cloudformation-SourceAccountRDS.yaml Datei aus dem GitHub Cross-account RDS Replication Repository aus und klicken Sie dann auf Weiter.

  7. Geben Sie unter Stackname einen Namen für Ihren Stack ein.

  8. Geben Sie im Abschnitt Parameter die Parameter an, die in der Stack-Vorlage definiert sind:

    • Geben Sie für DestinationAccountNumberdie Kontonummer Ihrer RDS Ziel-DB-Instance ein.

    • Geben Sie für KeyNameIhren AWS KMS Schlüssel ein.

    • Geben Sie für ScheduleExpressioneinen Cron-Ausdruck ein (die Standardeinstellung ist täglich 12:00 Uhr).

    • Geben Sie für S ourceDBIdentifier den Namen der Quelldatenbank ein.

    • Geben Sie für S ourceDBSnapshot Name den Namen des Snapshots ein, oder akzeptieren Sie die Standardeinstellung.

  9. Wählen Sie Weiter.

  10. Behalten Sie auf der Seite „Stack-Optionen konfigurieren“ die Standardwerte bei und wählen Sie dann Weiter.

  11. Überprüfen Sie Ihre Stack-Konfiguration und wählen Sie dann Submit aus.

  12. Wählen Sie den Tab Ressourcen für Ihren Stack und notieren Sie sich dann den Amazon-Ressourcennamen (ARN) des SNS Themas.

Cloud-Administrator, Cloud-Architekt

Stellen Sie den CloudFormation Stack im Zielkonto bereit.

  1. Melden Sie sich bei der AWS Management Console für das Zielkonto (Konto B) an und öffnen Sie die CloudFormation Konsole.

  2. Klicken Sie im Navigationsbereich auf Stacks.

  3. Wählen Sie Stack erstellen und anschließend Mit vorhandenen Ressourcen (Ressourcen importieren).

  4. Wählen Sie auf der Seite Ressourcen identifizieren die Option Weiter aus.

  5. Wählen Sie auf der Seite „Vorlage angeben“ die Option Vorlage hochladen aus.

  6. Wählen Sie Datei, wählen Sie die Cloudformation-DestinationAccountRDS.yaml Datei aus dem GitHub Cross-account RDS Replication Repository aus und klicken Sie dann auf Weiter.

  7. Geben Sie unter Stackname einen Namen für Ihren Stack ein.

  8. Geben Sie im Abschnitt Parameter die Parameter an, die in der Stack-Vorlage definiert sind:

    • Geben Sie für DatabaseNameeinen Namen für Ihre Datenbank ein.

    • Geben Sie für Engine den Datenbank-Engine-Typ ein, der der Quelldatenbank entspricht.

    • Geben Sie für DBInstanceClassden bevorzugten Datenbankinstanztyp ein, oder akzeptieren Sie den Standardwert.

    • Geben Sie für Subnetzgruppen die bestehende VPC Subnetzgruppe ein. Anweisungen zum Erstellen einer Subnetzgruppe finden Sie unter Schritt 2: Erstellen einer DB-Subnetzgruppe im RDS Amazon-Benutzerhandbuch.

    • Geben Sie für SecretNameden Pfad und den geheimen Namen ein, oder akzeptieren Sie die Standardeinstellung.

    • Geben Sie für SGIDdie Sicherheitsgruppen-ID Ihres Zielclusters ein.

    • Geben Sie für KMSKeyARNden KMS Schlüssel in Ihrem Zielkonto ein.

    • Geben Sie für NoOfOlderInstancesdie Anzahl der alten Kopien der RDS DB-Instances ein, die Sie für das Rollback behalten möchten.

  9. Wählen Sie Weiter.

  10. Behalten Sie auf der Seite „Stack-Optionen konfigurieren“ die Standardwerte bei und wählen Sie dann Weiter.

  11. Überprüfen Sie Ihre Stack-Konfiguration und wählen Sie dann Submit aus.

  12. Wählen Sie die Registerkarte Ressourcen für Ihren Stack und notieren Sie sich dann die physische ID und ARN vonInvokeStepFunction.

Cloud-Architekt, DevOps Ingenieur, Cloud-Administrator

Überprüfen Sie die Erstellung der RDS DB-Instance im Zielkonto.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die RDSAmazon-Konsole.

  2. Wählen Sie im Navigationsbereich Datenbanken aus und überprüfen Sie dann, ob die neue RDS DB-Instance unter dem neuen Cluster angezeigt wird.

Cloud-Administrator, Cloud-Architekt, DevOps Ingenieur

Abonnieren Sie die Lambda-Funktion für das SNS Thema.

Sie müssen die folgenden Befehle der AWS Befehlszeilenschnittstelle (AWSCLI) ausführen, um die Lambda-Funktion im Zielkonto (Konto B) für das SNS Thema im Quellkonto (Konto A) zu abonnieren.

Führen Sie in Konto A den folgenden Befehl aus:

aws sns add-permission \ --label lambda-access --aws-account-id <DestinationAccount> \ --topic-arn <Arn of SNSTopic > \ --action-name Subscribe ListSubscriptionsByTopic

Führen Sie in Konto B den folgenden Befehl aus:

aws lambda add-permission \ --function-name <Name of InvokeStepFunction> \ --source-arn <Arn of SNSTopic > \ --statement-id function-with-sns \ --action lambda:InvokeFunction \ --principal sns.amazonaws.com

Führen Sie in Konto B den folgenden Befehl aus:

aws sns subscribe \ --protocol "lambda" \ --topic-arn <Arn of SNSTopic> \ --notification-endpoint <Arn of InvokeStepFunction>
Cloud-Administrator, Cloud-Architekt, DBA

Synchronisieren Sie die RDS DB-Instance aus dem Quellkonto mit dem Zielkonto.

Initiieren Sie die On-Demand-Datenbankreplikation, indem Sie die Step Functions-Zustandsmaschine im Quellkonto starten.

  1. Öffnen Sie die Step Functions Functions-Konsole.

  2. Wählen Sie im Navigationsbereich State Machines aus.

  3. Wählen Sie Ihren Zustandsmaschine aus.

  4. Wählen Sie auf der Registerkarte Ausführungen Ihre Funktion aus und klicken Sie dann auf Ausführung starten, um den Workflow zu starten.

Hinweis: Es gibt einen Scheduler, mit dem Sie die Replikation automatisch und planmäßig ausführen können. Der Scheduler ist jedoch standardmäßig ausgeschaltet. Den Namen der CloudWatch Amazon-Regel für den Scheduler finden Sie auf der Registerkarte Ressourcen des CloudFormation Stacks im Zielkonto. Anweisungen zum Ändern der CloudWatch Ereignisregel finden Sie unter Löschen oder Deaktivieren einer CloudWatch Ereignisregel im CloudWatch Benutzerhandbuch.

Cloud-Architekt, DevOps Ingenieur, Cloud-Administrator

Führen Sie bei Bedarf ein Rollback Ihrer Datenbank auf eine der vorherigen Kopien durch.

  1. Öffnen Sie die Secrets Manager-Konsole.

  2. Wählen Sie aus der Liste der Geheimnisse das Geheimnis aus, das Sie zuvor mithilfe der CloudFormation Vorlage erstellt haben. Ihre Anwendung verwendet den geheimen Schlüssel, um auf die Datenbank im Zielcluster zuzugreifen.

  3. Um den geheimen Wert auf der Detailseite zu aktualisieren, wählen Sie im Abschnitt Geheimer Wert die Option Geheimen Wert abrufen und dann Bearbeiten aus.

  4. Geben Sie die Details des Datenbank-Endpunkts ein.

Cloud-AdministratorDBA, DevOps Ingenieur

Zugehörige Ressourcen

Zusätzliche Informationen

Sie können die folgende Beispielrichtlinie verwenden, um Ihre AWS KMS Schlüssel für mehrere AWS Konten gemeinsam zu nutzen.

{ "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": "*" } ] }