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.](images/pattern-img/6310ad9b-1b1a-4a67-b684-ef605fef3e87/images/8a8beeb1-0c77-4a38-88e9-9c689a59b990.png)
Im Quellkonto (Konto A im Diagramm) führt die Step Functions-Zustandsmaschine Folgendes aus:
Erstellt einen Snapshot von der RDS DB-Instance in Konto A.
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.
Teilt den DB-Snapshot mit Konto B, indem Konto B Zugriff auf den Snapshot gewährt wird.
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:
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
Liest das Geheimnis aus Secrets Manager, um den Namen der aktuellen DB-Instance zu erfassen.
Stellt die DB-Instance aus dem Snapshot mit einem neuen Namen und AWS KMS Standardschlüssel für Amazon wieder herRDS.
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.
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
Aufgabe | Beschreibung | Erforderliche Fähigkeiten |
---|---|---|
Stellen Sie den CloudFormation Stack im Quellkonto bereit. |
| Cloud-Administrator, Cloud-Architekt |
Stellen Sie den CloudFormation Stack im Zielkonto bereit. |
| Cloud-Architekt, DevOps Ingenieur, Cloud-Administrator |
Überprüfen Sie die Erstellung der RDS DB-Instance im Zielkonto. |
| 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:
Führen Sie in Konto B den folgenden Befehl aus:
Führen Sie in Konto B den folgenden Befehl aus:
| 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.
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. |
| Cloud-AdministratorDBA, DevOps Ingenieur |
Zugehörige Ressourcen
Regionsübergreifende Read Replicas (RDSAmazon-Benutzerhandbuch)
Blaue/grüne Bereitstellungen (RDSAmazon-Benutzerhandbuch)
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": "*" } ] }