Verwalten von Verbindungen mit Amazon RDS Proxy - Amazon Relational Database Service

Verwalten von Verbindungen mit Amazon RDS Proxy

Mithilfe von Amazon RDS Proxy können Sie es Ihren Anwendungen ermöglichen, Datenbankverbindungen zu poolen und freizugeben, um die Skalierbarkeit zu verbessern. RDS Proxy macht Anwendungen widerstandsfähiger gegenüber Datenbankfehlern, indem sie automatisch eine Verbindung zu einer Standby-DB-Instance herstellen und gleichzeitig Anwendungsverbindungen erhalten. Mit RDS Proxy können Sie auch die AWS Identity and Access Management (IAM)-Authentifizierung für Datenbanken erzwingen und Anmeldeinformationen sicher in AWS Secrets Manager speichern.

Anmerkung

RDS Proxy ist mit MySQL und PostgreSQL vollständig kompatibel. Sie können RDS Proxy für die meisten Anwendungen ohne Codeänderungen aktivieren.

Mithilfe von RDS Proxy können Sie unvorhersehbare Spitzen im Datenbankverkehr bewältigen, die ansonsten zu Problemen aufgrund von zu vielen Verbindungen oder dem zu schnellen Erstellen neuer Verbindungen führen könnten. RDS Proxy richtet einen Pool von Datenbankverbindungen ein und verwendet Verbindungen in diesem Pool wieder. Dadurch fällt der Arbeitsspeicher- und CPU-Overhead weg, der entsteht, wenn jedes Mal eine neue Datenbankverbindung geöffnet wird. Um die Datenbank vor Überbuchung zu schützen, können Sie die Anzahl der erstellten Datenbankverbindungen steuern.

RDS Proxy stellt Anwendungsverbindungen in Warteschlangen oder drosselt sie, wenn sie nicht sofort vom Verbindungspool bedient werden können. Obwohl Latenzen zunehmen können, kann Ihre Anwendung weiter skalieren, ohne dass die Datenbank abrupt ausfällt oder überfordert wird. Wenn Verbindungsanforderungen die von Ihnen angegebenen Grenzwerte überschreiten, lehnt RDS Proxy Anwendungsverbindungen ab (d. h. die Last wird abgeworfen). Gleichzeitig wird die vorhersehbare Leistung für die Last beibehalten, die mit verfügbarer Kapazität bedient werden kann.

Sie können den Overhead für die Verarbeitung von Anmeldeinformationen reduzieren und für jede neue Verbindung eine sichere Verbindung herstellen. RDS Proxy kann einige dieser Arbeiten im Auftrag der Datenbank verarbeiten.

Konzepte und Terminologie zu RDS Proxy

Sie können die Verbindungsverwaltung für Ihre Amazon RDS-DB-Instances und Amazon Aurora-DB-Cluster vereinfachen, indem Sie RDS Proxy verwenden.

RDS Proxy verarbeitet den Netzwerkverkehr zwischen der Clientanwendung und der Datenbank. Es tut dies auf aktive Weise, indem es das Datenbankprotokoll erfasst Anschließend passt er sein Verhalten basierend auf den SQL-Operationen aus Ihrer Anwendung und den Ergebnismengen aus der Datenbank an.

RDS Proxy reduziert den Arbeitsspeicher- und CPU-Overhead für die Verbindungsverwaltung in Ihrer Datenbank. Die Datenbank benötigt weniger Arbeitsspeicher und CPU-Ressourcen, wenn Anwendungen viele gleichzeitige Verbindungen öffnen. Es erfordert auch keine Logik in Ihren Anwendungen, um Verbindungen zu schließen und wieder zu öffnen, die für eine lange Zeit inaktiv bleiben. Ebenso erfordert es weniger Anwendungslogik, um Verbindungen im Falle eines Datenbankproblems wiederherzustellen.

Die Infrastruktur für RDS Proxy ist hochverfügbar und wird über mehrere Availability Zones (AZs) bereitgestellt. Berechnung, Arbeitsspeicher und Speicher für RDS Proxy sind unabhängig von Ihren RDS-DB-Instances und Aurora-DB-Clustern. Diese Trennung hilft, den Overhead auf Ihren Datenbankservern zu senken, sodass sie ihre Ressourcen für die Bereitstellung von Datenbank-Workloads einsetzen können. Die RDS Proxy-Rechenressourcen sind serverlos und werden automatisch basierend auf der Datenbank-Workload skaliert.

Überblick über RDS Proxy-Konzepte

RDS Proxy ist für die Infrastruktur zum Ausführen des Verbindungspoolings und die anderen im Folgenden beschriebenen Funktionen zuständig. Die in der RDS-Konsole dargestellten Proxys werden auf der Seite Proxys angezeigt.

Jeder Proxy verarbeitet Verbindungen zu einer einzelnen RDS-DB-Instance oder einem Aurora DB-Cluster. Bei Multi-AZ-RDS-DB-Instances und von Aurora bereitgestellten Clustern bestimmt der Proxy die aktuelle Schreiber-Instance automatisch. Bei Aurora Multi-Master-Clustern stellt der Proxy eine Verbindung zu einer der Schreiber-Instances her und verwendet die anderen Schreiber-Instances als Hot-Standby-Ziele.

Die Verbindungen, die ein Proxy offen hält und für Ihre Datenbankanwendung verfügbar macht, bilden den Verbindungspool.

Standardmäßig kann RDS Proxy eine Verbindung nach jeder Transaktion in Ihrer Sitzung wiederverwenden. Diese Wiederverwendung auf Transaktionsebene wird als Multiplexing bezeichnet. Wenn RDS Proxy vorübergehend eine Verbindung aus dem Verbindungspool entfernt wird, um sie wiederzuverwenden, wird dieser Vorgang als Ausleihen der Verbindung bezeichnet. Wenn dies sicher ist, wird diese Verbindung an den Verbindungspool RDS Proxy zurückgegeben.

In einigen Fällen kann RDS Proxy nicht gewährleisten, dass eine Datenbankverbindung außerhalb der aktuellen Sitzung sicher wiederzuverwenden ist. In diesen Fällen bleibt die Sitzung auf derselben Verbindung erhalten, bis die Sitzung beendet ist. Dieses Fallback-Verhalten wird als Fixierung (Pinning) bezeichnet.

Ein Proxy hat einen Endpunkt. Wenn Sie mit einer RDS DB-Instance oder einem Aurora-DB-Cluster arbeiten, stellen Sie eine Verbindung zu diesem Endpunkt anstelle des Endpunkts mit Lese-/Schreibzugriff her, der direkt mit der Instance oder dem Cluster verbunden ist. Die speziellen Endpunkte für einen Aurora-Cluster stehen Ihnen weiterhin zur Verfügung.

Sie können beispielsweise weiterhin eine Verbindung zum Clusterendpunkt für Verbindungen mit Lese-/Schreibzugriff ohne Verbindungspooling herstellen. Sie können weiterhin eine Verbindung zum Leser-Endpunkt für schreibgeschützte Verbindungen mit Lastenausgleich herstellen. Sie können weiterhin eine Verbindung zu den Instance-Endpunkten für die Diagnose und Behebung von Fehlern in bestimmten DB-Instances innerhalb eines Aurora-Clusters herstellen. Wenn Sie andere AWS-Services wie beispielsweise AWS Lambda verwenden, um eine Verbindung mit RDS-Datenbanken herzustellen, ändern Sie deren Verbindungseinstellungen so, dass der Proxy-Endpunkt verwendet wird. Beispielsweise geben Sie den Proxy-Endpunkt an, damit Lambda-Funktionen auf Ihre Datenbank zugreifen und gleichzeitig die RDS Proxy-Funktionalität nutzen können.

Jeder Proxy enthält eine Zielgruppe. Diese Zielgruppe verkörpert die RDS DB-Instance oder den Aurora DB-Cluster, mit der/dem der Proxy eine Verbindung herstellen kann. Bei einem Aurora-Cluster ist die Zielgruppe standardmäßig allen DB-Instances in diesem Cluster zugeordnet. Auf diese Weise kann sich der Proxy mit jeder Aurora DB-Instance verbinden, die zur Schreiber-Instance im Cluster hochgestuft wird. Die mit einem Proxy verknüpfte RDS-DB-Instance oder der Aurora-DB-Cluster und seine Instances werden als Ziele dieses Proxys bezeichnet. Wenn Sie einen Proxy über die Konsole erstellen, erstellt RDS Proxy auch die entsprechende Zielgruppe und registriert die zugeordneten Ziele automatisch.

Eine Engine-Familie ist eine verwandte Gruppe von Datenbank-Engines, die dasselbe DB-Protokoll verwenden. Sie wählen die Engine-Familie für jeden Proxy, den Sie erstellen.

Verbindungspooling

Jeder Proxy führt ein Verbindungspooling für die Schreiber-Instance des zugehörigen RDS oder der zugehörigen Aurora-Datenbank aus. Das Verbindungspooling ist eine Optimierung, die den Overhead reduziert, der mit dem Öffnen und Beenden von Verbindungen und dem Vorhandensein vieler aktiver Verbindungen gleichzeitig verbunden ist. Dieser Overhead umfasst den Arbeitsspeicher, der für die Verarbeitung jeder neuen Verbindung erforderlich ist. Darüber hinaus umfasst er den CPU-Overhead beim Beenden der einzelnen Verbindungen und Öffnen neuer Verbindungen, wie beispielsweise TLS/SSL-Handshaking, Authentifizierung, Aushandlungsfunktionen usw. Das Verbindungspooling vereinfacht Ihre Anwendungslogik. Sie müssen keinen Anwendungscode schreiben, um die Anzahl gleichzeitig geöffneter Verbindungen zu minimieren.

Jeder Proxy führt darüber hinaus Verbindungsmultiplexing aus, auch bekannt als Wiederverwendung von Verbindungen. Beim Multiplexing für RDS Proxy alle Operationen für eine Transaktion mit einer zugrunde liegenden Datenbankverbindung aus und kann dann eine andere Verbindung für die nächste Transaktion verwenden. Sie können viele gleichzeitige Verbindungen zum Proxy öffnen und der Proxy hält eine geringere Anzahl von Verbindungen zur DB-Instance oder zum Cluster offen. Dadurch wird der Speicher-Overhead für Verbindungen auf dem Datenbankserver weiter minimiert. Diese Technik reduziert auch die Wahrscheinlichkeit des Fehlers "zu viele Verbindungen".

RDS Proxy-Sicherheit

RDS Proxy verwendet die vorhandenen RDS-Sicherheitsmechanismen wie TLS/SSL und AWS Identity and Access Management (IAM). Allgemeine Informationen zu diesen Sicherheitsfunktionen finden Sie unter Sicherheit in Amazon RDS. Wenn Sie nicht mit der Funktionsweise von RDS und Aurora mit Authentifizierung, Autorisierung und anderen Sicherheitsbereichen vertraut sind, machen Sie sich zuerst unbedingt damit vertraut, wie RDS und Aurora mit diesen Bereichen funktionieren.

RDS Proxy kann als zusätzliche Sicherheitsebene zwischen Clientanwendungen und der zugrunde liegenden Datenbank fungieren. Sie können beispielsweise über TLS 1.2 eine Verbindung zum Proxy herstellen, selbst wenn die zugrunde liegende DB-Instance nur TLS 1.0 oder 1.1 unterstützt. Sie können mithilfe einer IAM-Rolle eine Verbindung mit dem Proxy herstellen, selbst wenn der Proxy mithilfe der nativen Benutzer- und Passwortauthentifizierungsmethode eine Verbindung mit der Datenbank herstellt. Mit dieser Technik können Sie hohe Authentifizierungsanforderungen für Datenbankanwendungen ohne einen kostspieligen Migrationsaufwand für die DB-Instances selbst erzwingen.

Sie speichern die von RDS Proxy verwendeten Datenbank-Anmeldeinformationen in AWS Secrets Manager. Jeder Datenbankbenutzer für die RDS DB-Instance oder den Aurora DB-Cluster, die/der von einem Proxy aufgerufen wird, muss über ein entsprechendes Secret in Secrets Manager verfügen. Sie können auch die IAM-Authentifizierung für Benutzer von RDS Proxy einrichten. Auf diese Weise können Sie die IAM-Authentifizierung für den Datenbankzugriff erzwingen, selbst wenn die Datenbanken weiterhin die native Passwortauthentifizierung verwenden. Es wird empfohlen, diese Sicherheitsfunktionen zu verwenden, anstatt Datenbankanmeldeinformationen in Ihren Anwendungscode einzubetten.

Verwenden von TLS/SSL mit RDS Proxy

Sie können eine Verbindung zu RDS Proxy über das TLS/SSL-Protokoll herstellen.

Anmerkung

RDS Proxy verwendet Zertifikate aus AWS Certificate Manager (ACM). Wenn Sie RDS Proxy verwenden, müssen Sie beim Rotieren Ihres TLS/SSL-Zertifikats keine Anwendungen aktualisieren, die RDS Proxy-Verbindungen nutzen.

Um TLS für alle Verbindungen zwischen dem Proxy und der Datenbank zu erzwingen, können Sie beim Erstellen oder Ändern eines Proxys die Einstellung Beantragen der Sicherheit der Transportebene angeben.

Mit RDS Proxy können Sie auch sicherstellen, dass Ihre Sitzung TLS/SSL zwischen Ihrem Client und dem RDS Proxy-Endpunkt verwendet. Damit RDS Proxy so verfährt, müssen Sie die clientseitige Anforderung festlegen. Für SSL-Verbindungen mit einer Datenbank unter Verwendung von RDS Proxy werden keine SSL-Sitzungsvariablen festgelegt.

  • Für Amazon RDS MySQL und Aurora MySQL geben Sie die clientseitige Anforderung mit dem Parameter --ssl-mode an, wenn Sie den Befehl mysql ausführen.

  • Geben Sie für Amazon RDS PostgreSQL und Aurora PostgreSQL als Teil der conninfo-Zeichenfolge sslmode=require an, wenn Sie den Befehl psql ausführen.

RDS Proxy unterstützt die TLS-Protokollversionen 1.0, 1.1 und 1.2. Sie können eine Verbindung mit dem Proxy herstellen, indem Sie eine höhere TLS-Version verwenden, als Sie in der zugrunde liegenden Datenbank verwenden.

Standardmäßig richten Client-Programme eine verschlüsselte Verbindung mit RDS Proxy ein, wobei weitere Kontrolle über die Option --ssl-mode verfügbar ist. Clientseitig unterstützt RDS Proxy alle SSL-Modi.

Für den Client sind die SSL-Modi die folgenden:

PREFERRED

SSL ist die erste Wahl, aber nicht erforderlich.

DISABLED

SSL ist nicht zulässig.

REQUIRED

SSL erzwingen.

VERIFY_CA

SSL erzwingen und die Zertifizierungsstelle (CA) überprüfen.

VERIFY_IDENTITY

SSL erzwingen und die CA sowie den CA-Hostname überprüfen.

Bei Verwendung eines Clients mit --ssl-mode VERIFY_CA oder VERIFY_IDENTITY, geben Sie die Option --ssl-ca an, die auf eine CA im PEM-Format verweist. Für eine verwendbare .pem-Datei können Sie den Amazon Root CA 1-Vertrauensspeicher von Amazon Trust Services herunterladen.

RDS Proxy verwendet Platzhalterzertifikate, die sowohl für eine Domäne als auch für deren Unterdomänen gelten. Wenn Sie den mysql-Client für die Verbindung mit dem SSL-Modus VERIFY_IDENTITY verwenden, müssen Sie derzeit den MySQL 8.0-kompatiblen Befehl mysql verwenden.

Failover

Failover ist eine Funktion mit hoher Verfügbarkeit, die eine Datenbank-Instance durch eine andere ersetzt, wenn die ursprüngliche Instance nicht verfügbar ist. Ein Failover kann aufgrund eines Problems mit einer Datenbank-Instance auftreten. Er kann aber auch Teil normaler Wartungsverfahren sein, z. B. während eines Datenbank-Upgrades. Failover gilt für RDS DB-Instances in einer Multi-AZ-Konfiguration und Aurora-DB-Cluster mit einer oder mehreren Leser-Instances zusätzlich zur Schreiber-Instance.

Die Verbindung über einen Proxy macht Ihre Anwendung widerstandsfähiger gegenüber einem Datenbank-Failover. Wenn die ursprüngliche DB-Instance nicht verfügbar ist, stellt RDS Proxy eine Verbindung mit der Standby-Datenbank her, ohne dass die inaktiven Anwendungsverbindungen verworfen werden. Dadurch wird der Failover-Prozess beschleunigt und vereinfacht. Das Ergebnis ist ein schnelleres Failover, das mit weniger Störungen für Ihre Anwendung verbunden ist als ein typisches Neustart- oder Datenbankproblem.

Ohne RDS Proxy ist ein Failover mit einem kurzen Ausfall verbunden. Während des Ausfalls können Sie keine Schreiboperationen für diese Datenbank ausführen. Alle vorhandenen Datenbankverbindungen werden unterbrochen und Ihre Anwendung muss sie erneut öffnen. Die Datenbank wird für neue Verbindungen und Schreiboperationen verfügbar, wenn eine schreibgeschützte DB-Instance hochgestuft wird, um die Stelle der nicht verfügbaren Instance zu übernehmen.

Während DB-Failovers akzeptiert RDS Proxy weiterhin Verbindungen mit derselben IP-Adresse und leitet Verbindungen automatisch an die neue primäre DB-Instance weiter. Clients, die eine Verbindung über RDS Proxy herstellen, sind nicht anfällig für Folgendes:

  • DNS (Domain Name System)-Ausbreitungsverzögerungen beim Failover.

  • Lokale DNS-Zwischenspeicherung.

  • Verbindungszeitüberschreitungen.

  • Unsicherheit darüber, welche DB-Instance der aktuelle Writer ist.

  • Warten auf eine Abfrageantwort eines früheren Writers, die nicht verfügbar wurde, ohne Verbindungen zu schließen.

Bei Anwendungen, die über eigene Verbindungspools verfügen, sorgt RDS Proxy dafür, dass die meisten Verbindungen bei Failovers oder anderen Unterbrechungen aktiv bleiben. Nur Verbindungen, die sich mitten in einer Transaktion oder SQL-Anweisung befinden, werden unterbrochen. RDS Proxy lässt neue Verbindungen sofort zu. Wenn der Datenbank-Schreiber nicht verfügbar ist, werden eingehende Anfragen in RDS Proxy in die Warteschlange gesetzt.

Für Anwendungen, die nicht über eigene Verbindungspools verfügen, bietet RDS Proxy schnellere Verbindungsraten und mehr offene Verbindungen. Es reduziert den teuren Overhead, der mit dem häufigen Herstellen neuer Verbindungen über die Datenbank verbunden ist. Hierfür werden Datenbankverbindungen wiederverwendet, die im RDS Proxy-Verbindungspool verwaltet werden. Dieser Ansatz ist besonders wichtig für TLS-Verbindungen, die mit erheblichen Setupkosten verbunden sind.

Transaktionen

Alle Anweisungen innerhalb einer einzelnen Transaktion verwenden immer dieselbe zugrunde liegende Datenbankverbindung. Die Verbindung wird für eine andere Sitzung verfügbar, wenn die Transaktion beendet wird. Die Verwendung der Transaktion als Granularitätseinheit hat folgende Auswirkungen:

  • Die Wiederverwendung von Verbindungen kann nach jeder einzelnen Anweisung erfolgen, wenn RDS MySQL oder die Aurora MySQL-Einstellung autocommit aktiviert ist.

  • Wenn die Einstellung autocommit im Gegenzug deaktiviert ist, beginnt die erste Anweisung, die Sie in einer Sitzung ausgeben, eine neue Transaktion. Wenn Sie also eine Sequenz von SELECT, INSERT, UPDATE und anderen DML-Anweisungen (Data Manipulation Language) eingeben, wird die Wiederverwendung von Verbindungen erst vorgenommen, wenn Sie ein COMMIT oder ROLLBACK ausgeben oder die Transaktion anderweitig beenden.

  • Die Eingabe einer DDL-Anweisung (Data Definition Language) bewirkt, dass die Transaktion beendet wird, nachdem diese Anweisung abgeschlossen wurde.

RDS Proxy erkennt über das Netzwerkprotokoll, das von der Datenbank-Clientanwendung verwendet wird, wenn eine Transaktion beendet wird. Die Transaktionserkennung beruht nicht auf Schlüsselwörtern wie beispielsweise COMMIT oder ROLLBACK, die im Text der SQL-Anweisung angezeigt werden.

In einigen Fällen kann RDS Proxy eine Datenbankanforderung erkennen, die es unpraktisch macht, Ihre Sitzung auf eine andere Verbindung zu verschieben. In diesen Fällen wird das Multiplexing für diese Verbindung während der verbleibenden Sitzung deaktiviert. Die gleiche Regel gilt, wenn RDS Proxy nicht sicher sein kann, dass das Multiplexing für die Sitzung praktikabel ist. Diese Operation wird als Fixierung (Pinning) bezeichnet. Hinweise zum Erkennen und Minimieren von Fixierungen finden Sie unter Vermeiden des Fixierens.

Planen und Einrichten von RDS Proxy

In den folgenden Abschnitten finden Sie Informationen zum Einrichten von RDS Proxy. Darüber hinaus erfahren Sie, wie Sie die zugehörigen Sicherheitsoptionen festlegen, die steuern, wer auf die einzelnen Proxys zugreifen kann und wie die einzelnen Proxys eine Verbindung zu DB-Instances herstellen.

Einschränkungen für RDS Proxy

Die folgenden Einschränkungen gelten für RDS Proxy:

  • RDS Proxy ist nur in diesen AWS-Regionen verfügbar:

    • Region USA Ost (N.-Virginia)

    • Region USA Ost (Ohio)

    • Region USA West (Nordkalifornien)

    • Region USA West (Oregon)

    • Region Asien-Pazifik (Mumbai)

    • Region Asien-Pazifik (Seoul)

    • Region Asien-Pazifik (Singapur)

    • Region Asien-Pazifik (Sydney)

    • Region Asien-Pazifik (Tokio)

    • Region Kanada (Zentral)

    • Region Europa (Frankfurt)

    • Region Europa (Irland)

    • Region Europa (London)

  • Sie können bis zu 20 Proxys für jede AWS-Konto-ID haben. Wenn Ihre Anwendung mehr Proxys benötigt, können Sie zusätzliche Proxys anfordern, indem Sie ein Ticket bei der AWS Support-Organisation öffnen.

  • Jeder Proxy kann bis zu 200 zugehörige Secrets Manager-Secrets haben. Somit kann jeder Proxy jederzeit eine Verbindung mit bis zu 200 verschiedenen Benutzerkonten herstellen.

  • In einem Aurora-Cluster werden alle Verbindungen im Verbindungspool von der Aurora-Writer-Instance verarbeitet. Um den Lastenausgleich für leseintensive Workloads durchzuführen, verwenden Sie den Leser-Endpunkt weiterhin direkt für den Aurora-Cluster.

    Dasselbe gilt für RDS-DB-Instances in Replikationskonfigurationen. Sie können einen Proxy nur der Schreiber-DB-Instance und nicht einem Read Replica zuordnen.

  • Sie können RDS Proxy nicht mit serverlosen Aurora-Clustern verwenden.

  • Sie können nicht RDS Proxy mit Aurora-Clustern verwenden, die Teil einer globalen Datenbank in Aurora sind.

  • Ihr RDS Proxy muss sich in derselben VPC wie die Datenbank befinden. Obwohl die Datenbank öffentlich zugänglich sein kann, kann der Proxy dies nicht sein.

  • Sie können RDS Proxy nicht mit einer VPC mit Dedicated Tenancy verwenden.

  • Wenn Sie RDS Proxy mit einer RDS-DB-Instance oder einem Aurora DB-Cluster verwenden, für den IAM-Authentifizierung aktiviert ist, müssen sich alle Benutzer, die eine Verbindung über einen Proxy herstellen, mit ihrem Benutzernamen und ihrem Passwort authentifizieren. Details zur IAM-Unterstützung in RDS Proxy finden Sie unter Einrichten vonAWS Identity and Access Management- ( IAM)-Richtlinien.

  • Sie können RDS Proxy nicht mit benutzerdefiniertem DNS verwenden.

  • RDS Proxy ist für die MySQL- und PostgreSQL-Engine-Familien verfügbar.

  • Jeder Proxy kann einer einzelnen Ziel-DB-Instance oder einem einzelnen Ziel-Cluster zugeordnet werden. Sie können jedoch mehrere Proxys derselben DB-Instance oder demselben Cluster zuordnen.

Die folgenden RDS Proxy-Voraussetzungen und Einschränkungen gelten für MySQL:

  • Für RDS MySQL unterstützt RDS Proxy MySQL 5.6 und 5.7. Für Aurora MySQL unterstützt RDS Proxy Version 1 (kompatibel mit MySQL 5.6) und Version 2 (kompatibel mit MySQL 5.7).

  • Derzeit führen alle Proxys Listening auf Port 3306 für MySQL durch. Die Proxys stellen weiterhin eine Verbindung mit Ihrer Datenbank her, indem Sie den Port verwenden, den Sie in den Datenbankeinstellungen angegeben haben.

  • Sie können RDS Proxy nicht mit RDS MySQL 8.0 verwenden.

  • Sie können RDS Proxy nicht mit selbst verwalteten MySQL-Datenbanken in EC2-Instances verwenden.

  • Proxys unterstützen den komprimierten MySQL-Modus nicht. Sie unterstützen z. B. nicht die Komprimierung, die von den Optionen --compress oder -C des mysql-Befehls verwendet wird.

  • Einige SQL-Anweisungen und -Funktionen können den Verbindungsstatus ändern, ohne dass Pinning verursacht wird. Informationen zum aktuellen Fixierungsverhalten finden Sie unter Vermeiden des Fixierens.

Die folgenden RDS Proxy-Voraussetzungen und Einschränkungen gelten für PostgreSQL:

  • Für RDS PostgreSQL unterstützt RDS Proxy die Unterversionen der Version 10.10 und höher sowie die Unterversionen der Version 11.5 und höher. Für Aurora PostgreSQL unterstützt RDS Proxy die Unterversionen der Version 10.11 und höher sowie die Unterversionen der Version 11.6 und höher.

  • Derzeit führen alle Proxys Listening auf Port 5432 für PostgreSQL durch.

  • Abfrageabbruch wird für PostgreSQL nicht unterstützt.

  • Die Ergebnisse der PostgreSQL-Funktion lastval() sind nicht immer genau. Verwenden Sie zur Umgehung die INSERT-Anweisung mit der Klausel RETURNING.

Identifizieren von DB-Instances, Clustern und Anwendungen, die mit RDS Proxy verwendet werden sollen

Sie können ermitteln, welche Ihrer DB-Instances, Cluster und Anwendungen möglicherweise am meisten von der Verwendung von RDS Proxy profitieren. Berücksichtigen Sie dazu folgende Faktoren:

  • RDS Proxy ist hochverfügbar und wird über mehrere Availability Zones (AZs) bereitgestellt. Stellen Sie Ihre Amazon RDS-DB-Instance oder Ihren Aurora-Cluster in einer Multi-AZ-Konfiguration bereit, um eine hohe Verfügbarkeit für Ihre Datenbank zu gewährleisten.

  • Alle DB-Instances oder -Cluster, auf denen gelegentlich der Fehler „zu viele Verbindungen“ auftritt, sind gute Kandidaten für die Zuordnung zu einem Proxy. Der Proxy ermöglicht es Anwendungen, viele Clientverbindungen zu öffnen, während der Proxy eine geringere Anzahl langlebiger Verbindungen zur DB-Instance oder zum Cluster verwaltet.

  • Bei DB-Instances oder Clustern, die kleinere AWS-Instance-Klassen wie T2 oder T3 verwenden, kann die Verwendung eines Proxys dazu beitragen, Speichermangelfehler zu vermeiden. Sie kann auch dazu beitragen, den CPU-Overhead für das Herstellen von Verbindungen zu reduzieren. Diese Bedingungen können auftreten, wenn es um eine große Anzahl von Verbindungen geht.

  • Sie können bestimmte Amazon CloudWatch-Metriken überwachen, um festzustellen, ob sich eine DB-Instance oder ein Cluster bestimmten Arten von Grenzwerten nähert. Diese Grenzwerte gelten für die Anzahl der Verbindungen und den Arbeitsspeicher, der mit der Verbindungsverwaltung verbunden ist. Sie können auch bestimmte CloudWatch-Metriken überwachen, um zu ermitteln, ob eine DB-Instance oder ein Cluster viele kurzlebige Verbindungen verarbeitet. Das Öffnen und Beenden solcher Verbindungen kann einen Leistungs-Overhead für Ihre Datenbank verursachen. Informationen zu den zu überwachenden Metriken finden Sie unter Überwachung von RDS Proxy mit Amazon CloudWatch.

  • AWS Lambda-Funktionen können auch gute Kandidaten für die Verwendung eines Proxys sein. Diese Funktionen stellen häufig kurze Datenbankverbindungen her, die von dem von RDS Proxy angebotenen Verbindungspooling profitieren. Sie können alle IAM-Authentifizierungen nutzen, die Sie bereits für Lambda-Funktionen haben, anstatt Datenbankanmeldeinformationen im Lambda-Anwendungscode zu verwalten.

  • Anwendungen, die Sprachen und Frameworks wie PHP und Ruby on Rails verwenden, sind in der Regel gute Kandidaten für die Verwendung eines Proxys. Solche Anwendungen öffnen und schließen in der Regel eine große Anzahl von Datenbankverbindungen und verfügen über keine integrierten Mechanismen für das Verbindungspooling.

  • Anwendungen, die eine große Anzahl von Verbindungen über lange Zeiträume offen halten, sind in der Regel gute Kandidaten für die Verwendung eines Proxys. Anwendungen in Branchen wie Software as a Service (SaaS) oder E-Commerce minimieren häufig die Latenz für Datenbankanfragen, da sie Verbindungen offen lassen. Mit RDS Proxy kann eine Anwendung mehr Verbindungen offen halten, als dies möglich ist, wenn eine direkte Verbindung mit der DB-Instance oder dem Cluster hergestellt wird.

  • Möglicherweise haben Sie die IAM-Authentifizierung und Secrets Manager aufgrund der Komplexität der Einrichtung einer solchen Authentifizierung für alle DB-Instances und Cluster nicht übernommen. Wenn dies der Fall ist, können Sie die vorhandenen Authentifizierungsmethoden beibehalten und die Authentifizierung an einen Proxy delegieren. Der Proxy kann die Authentifizierungsrichtlinien für Clientverbindungen für bestimmte Anwendungen erzwingen. Sie können alle IAM-Authentifizierungen nutzen, die Sie bereits für Lambda-Funktionen haben, anstatt Datenbankanmeldeinformationen im Lambda-Anwendungscode zu verwalten.

Einrichten der Netzwerkvoraussetzungen

Für die Verwendung von RDS Proxy benötigen Sie eine Reihe von Netzwerkressourcen. Dazu gehören eine Virtual Private Cloud (VPC), zwei oder mehr Subnetze, eine Amazon EC2-Instance innerhalb derselben VPC und ein Internet-Gateway. Wenn Sie erfolgreich eine Verbindung mit RDS DB-Instances oder Aurora DB-Clustern hergestellt haben, verfügen Sie bereits über die erforderlichen Netzwerkressourcen.

Einrichten von Datenbank-Anmeldeinformationen in AWS Secrets Manager

Für jeden von Ihnen erstellten Proxy verwenden Sie zunächst den Service Secrets Manager, um Gruppen von Anmeldeinformationen aus Benutzername und Passwort zu speichern. Sie erstellen ein separates Secrets Manager-Secret für jedes Datenbankbenutzerkonto, mit dem der Proxy auf der RDS DB-Instance oder dem Aurora DB-Cluster eine Verbindung herstellt.

In Secrets Manager erstellen Sie diese Secrets mit Werten für die Felder username und password. Dadurch kann der Proxy eine Verbindung zu den entsprechenden Datenbankbenutzern auf allen RDS DB-Instances oder Aurora DB-Clustern herstellen, die Sie dem Proxy zuordnen. Hierfür können Sie die Einstellung Credentials for other database (Anmeldeinformationen für andere Datenbank), Credentials for RDS database (Anmeldeinformationen für die RDS-Datenbank) oder Other type of secrets (Andere Art von Secret) verwenden. Geben Sie die entsprechenden Werte für die Felder Benutzername und Passwort sowie Platzhalterwerte für alle anderen erforderlichen Felder ein. Der Proxy ignoriert andere Felder wie Host und Port, wenn sie im Secret vorhanden sind. Diese Details werden automatisch vom Proxy bereitgestellt.

Sie können auch Anderer Secret-Typ wählen. In diesem Fall erstellen Sie das Secret mit den Schlüsseln namens username und password.

Da die von Ihrem Proxy verwendeten Secrets nicht an einen bestimmten Datenbankserver gebunden sind, können Sie ein Secret über mehrere Proxys hinweg wiederverwenden, wenn Sie dieselben Anmeldeinformationen auf mehreren Datenbankservern verwenden. Beispielsweise können Sie dieselben Anmeldeinformationen für eine Gruppe von Entwicklungs- und Testservern verwenden.

Um eine Verbindung über den Proxy als bestimmter Benutzer herzustellen, stellen Sie sicher, dass das Passwort, das einem Geheimnis zugeordnet ist, mit dem Datenbankpasswort für diesen Benutzer übereinstimmt. Wenn eine Unstimmigkeit vorliegt, können Sie das zugehörige Geheimnis in Secrets Manager aktualisieren. In diesem Fall können Sie weiterhin eine Verbindung zu anderen Konten herstellen, bei denen die geheimen Anmeldeinformationen und die Datenbankpasswörter übereinstimmen.

Wenn Sie einen Proxy über die AWS CLI oder RDS-API erstellen, geben Sie die Amazon-Ressourcennamen (ARNs) der entsprechenden Secrets für alle DB-Benutzerkonten an, auf die der Proxy zugreifen kann. In der AWS Management Console wählen Sie die Secrets nach ihren beschreibenden Namen.

Anweisungen zum Erstellen von Secrets in Secrets Manager finden Sie auf der Seite Erstellen eines Secrets in der Secrets Manager-Dokumentation. Verwenden Sie eine der folgenden Techniken. Anweisungen zum Erstellen von Secrets in Secrets Manager finden Sie unter Erstellen eines Secrets im AWS Secrets Manager-Benutzerhandbuch. Verwenden Sie eine der folgenden Techniken:

  • Verwenden Sie Secrets Manager in der Konsole.

  • Wenn Sie die CLI zum Erstellen eines Secrets Manager-Secrets für die Verwendung mit RDS Proxy verwenden möchten, verwenden Sie einen Befehl wie den folgenden.

    aws secretsmanager create-secret --name "secret_name" --description "secret_description" --region region_name --secret-string '{"username":"db_user","password":"db_user_password"}'

Mit den folgenden Befehlen werden beispielsweise Secrets Manager-Secrets für zwei Datenbankbenutzer erstellt, der eine mit dem Namen admin und der andere mit dem Namen app-user.

aws secretsmanager create-secret \ --name admin_secret_name --description "db admin user" \ --secret-string '{"username":"admin","password":"choose_your_own_password"}' aws secretsmanager create-secret \ --name proxy_secret_name --description "application user" \ --secret-string '{"username":"app-user","password":"choose_your_own_password"}'

Einrichten vonAWS Identity and Access Management- ( IAM)-Richtlinien

Nachdem Sie die Secrets in Secrets Manager erstellt haben, erstellen Sie eine IAM-Richtlinie, die auf diese Secrets zugreifen kann. Allgemeine Informationen zur Verwendung von IAM mit RDS und Aurora finden Sie unter Identity and Access Management in Amazon RDS.

Tipp

Das folgende Verfahren gilt, wenn Sie die IAM-Konsole verwenden. Wenn Sie die AWS Management Console für RDS verwenden, kann RDS die IAM-Richtlinie automatisch für Sie erstellen. In diesem Fall können Sie das folgende Verfahren überspringen.

So erstellen Sie eine IAM-Richtlinie, die auf Ihre Secrets Manager-Geheimnisse für die Verwendung mit Ihrem Proxy zugreift

  1. Melden Sie sich an der IAM-Konsole an. Führen Sie den Prozess Create role (Rolle erstellen) wie unter Erstellen von IAM-Rollen beschrieben aus. Beziehen Sie den Schritt Add Role to Database (Rolle zu Datenbank hinzufügen) ein.

  2. Führen Sie für die neue Rolle den Schritt Add inline policy (Inline-Richtlinie hinzufügen) aus. Verwenden Sie die gleichen allgemeinen Verfahren wie unter Bearbeiten von IAM-Richtlinien. Fügen Sie den folgenden JSON-Text in das JSON-Textfeld ein. Ersetzen Sie die Vorgabe durch Ihre eigene Konto-ID. Ersetzen Sie us-east-2 durch Ihre AWS-Region. Ersetzen Sie die Amazon-Ressourcennamen (ARNs) durch die von Ihnen erstellten Geheimnisse. Ersetzen Sie die Aktion kms:Decrypt durch den ARN des standardmäßigen AWS KMS-Kundenmasterschlüssels (CMK) oder Ihres eigenen AWS KMS-CMK, je nachdem, mit welchem Schlüssel Sie die Secrets Manager-Geheimnisse verschlüsselt haben.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }
  3. Bearbeiten Sie die Vertrauensrichtlinie für diese IAM-Richtlinie. Fügen Sie den folgenden JSON-Text in das JSON-Textfeld ein.

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

Die folgenden Befehle führen dieselbe Operation über die AWS CLI durch.

PREFIX=choose_an_identifier aws iam create-role --role-name choose_role_name \ --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}' aws iam put-role-policy --role-name same_role_name_as_previous \ --policy-name $PREFIX-secret-reader-policy --policy-document """ same_json_as_in_previous_example """ aws kms create-key --description "$PREFIX-test-key" --policy """ { "Id":"$PREFIX-kms-policy", "Version":"2012-10-17", "Statement": [ { "Sid":"Enable IAM User Permissions", "Effect":"Allow", "Principal":{"AWS":"arn:aws:iam::account_id:root"}, "Action":"kms:*","Resource":"*" }, { "Sid":"Allow access for Key Administrators", "Effect":"Allow", "Principal": { "AWS": ["$USER_ARN","arn:aws:iam::account_id:role/Admin"] }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource":"*" }, { "Sid":"Allow use of the key", "Effect":"Allow", "Principal":{"AWS":"$ROLE_ARN"}, "Action":["kms:Decrypt","kms:DescribeKey"], "Resource":"*" } ] } """

Erstellen eines RDS Proxy

Um Verbindungen für einen spezifischen Satz von DB-Instances zu verwalten, können Sie einen Proxy erstellen. Sie können einen Proxy einer RDS-MySQL-DB-Instance, einer PostgreSQL-DB-Instance oder einem Aurora-DB-Cluster zuordnen.

So erstellen Sie einen Proxy

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon RDS-Konsole unter https://console.aws.amazon.com/rds/.

  2. Wählen Sie im Navigationsbereich Proxies (Proxys).

  3. Wählen Sie Create proxy (Proxy erstellen).

  4. Wählen Sie alle Einstellungen für Ihren Proxy.

    Geben Sie für die Proxy-Konfiguration folgende Informationen an:

    • Proxy identifier (Proxy-ID). Geben Sie einen Namen Ihrer Wahl an, der innerhalb Ihrer AWS-Konto-ID und der aktuellen AWS-Region eindeutig ist.

    • Engine compatibility (Engine-Kompatibilität). Wählen Sie entweder MySQL oder POSTGRESQL aus.

    • Require Transport Layer Security (Transport Layer Security erfordern). Wählen Sie diese Einstellung, wenn der Proxy TLS/SSL für alle Clientverbindungen erzwingen soll. Wenn Sie eine verschlüsselte oder unverschlüsselte Verbindung zu einem Proxy verwenden, verwendet der Proxy dieselbe Verschlüsselungseinstellung, wenn er eine Verbindung zur zugrunde liegenden Datenbank herstellt.

    • Idle client connection timeout (Zeitüberschreitung bei Client-Leerlauf). Wählen Sie einen Zeitraum aus, in dem eine Clientverbindung im Leerlauf sein kann, bevor der Proxy sie schließen kann. Der Standardwert ist 1.800 Sekunden (30 Minuten). Eine Clientverbindung gilt als im Leerlauf, wenn die Anwendung innerhalb der angegebenen Zeit nach Abschluss der vorherigen Anforderung keine neue Anforderung übermittelt. Die zugrunde liegende Datenbankverbindung bleibt offen und wird an den Verbindungspool zurückgegeben. Somit ist sie für neue Clientverbindungen verfügbar.

      Ziehen Sie in Betracht, die Zeitüberschreitung für die inaktive Clientverbindung zu verringern, wenn der Proxy veraltete Verbindungen proaktiv entfernen soll. Wenn Ihre Arbeitslast höher ist, sollten Sie die Zeitüberschreitung für die inaktive Clientverbindung erhöhen, um die Kosten für das Herstellen von Verbindungen zu sparen.

    Machen Sie für Zielgruppenkonfiguration folgende Angaben:

    • Database (Datenbank). Wählen Sie eine RDS-DB-Instance oder einen Aurora-DB-Cluster aus, auf die/den über diesen Proxy zugegriffen werden soll. Die Liste enthält nur DB-Instances und Cluster mit kompatiblen Datenbank-Engines, Engine-Versionen und anderen Einstellungen. Wenn die Liste leer ist, erstellen Sie eine neue DB-Instance oder einen neuen Cluster, mit der/dem RDS Proxy kompatibel ist. Eine Schritt-für-Schritt-Anleitung hierzu finden Sie unter Erstellen einer Amazon RDS-DB-Instance . Versuchen Sie dann erneut, den Proxy zu erstellen.

    • Connection pool maximum connections (Max. Verbindungen Verbindungspool). Geben Sie einen Wert zwischen 1 und 100 an. Diese Einstellung stellt den Prozentsatz des max_connections-Wertes dar, den RDS Proxy für Verbindungen verwenden kann. Wenn Sie nur einen Proxy mit dieser DB-Instance oder diesem DB-Cluster verwenden möchten, können Sie den Wert auf 100 setzen. Weitere Informationen dazu, wie RDS Proxy diese Einstellung verwendet, finden Sie unter Steuern von Verbindungsgrenzen und Zeitüberschreitungen.

    • Session pinning filters (Filter zum Anheften von Sitzungen). (Optional) Dies ist eine erweiterte Einstellung zur Behebung von Leistungsproblemen mit bestimmten Anwendungen. Derzeit ist die einzige Wahlmöglichkeit EXCLUDE_VARIABLE_SETS. Wählen Sie nur dann einen Filter aus, wenn die folgenden beiden Bedingungen zutreffen: Ihre Anwendung verwendet aufgrund bestimmter Arten von SQL-Anweisungen keine Verbindungen wieder und Sie können überprüfen, ob die Wiederverwendung von Verbindungen mit diesen SQL-Anweisungen die Richtigkeit der Anwendung nicht beeinträchtigt. Weitere Informationen finden Sie unter Vermeiden des Fixierens.

    • Connection borrow timeout (Zeitüberschreitung für die Verbindung). In einigen Fällen erwarten Sie möglicherweise, dass der Proxy manchmal alle verfügbaren Verbindungen nutzt. In solchen Fällen können Sie angeben, wie lange der Proxy wartet, bis eine Datenbankverbindung verfügbar ist, bevor ein Timeout-Fehler zurückgegeben wird. Sie können einen Zeitraum von maximal fünf Minuten angeben. Diese Einstellung gilt nur, wenn der Proxy die maximale Anzahl von Verbindungen geöffnet hat und alle Verbindungen bereits verwendet werden.

    Geben Sie für Anbindung folgende Informationen an:

    • Secrets Manager ARNs (Secrets Manager-ARNs). Wählen Sie mindestens ein Secrets Manager-Geheimnis, das DB-Benutzeranmeldeinformationen für die RDS-DB-Instance oder das Aurora-DB-Cluster enthält, auf die Sie mit diesem Proxy zugreifen möchten.

    • IAM role (IAM-Rolle) Wählen Sie eine IAM-Rolle aus, die berechtigt ist, auf die zuvor ausgewählten Secrets Manager-Geheimnisse zuzugreifen. Sie können auch auswählen, ob AWS Management Console eine neue IAM-Rolle für Sie erstellen und diese verwenden soll.

    • IAM Authentication (IAM-Authentifizierung). Wählen Sie aus, ob die IAM-Authentifizierung für Verbindungen mit Ihrem Proxy erforderlich oder nicht zugelassen werden soll. Die Wahl der IAM-Authentifizierung oder der nativen Datenbankauthentifizierung gilt für alle DB-Benutzer, die auf diesen Proxy zugreifen.

    • Subnets (Subnetze). Dieses Feld ist mit allen Subnetzen gefüllt, die mit Ihrer VPC verknüpft sind. Sie können alle Subnetze entfernen, die Sie für diesen Proxy nicht benötigen. Sie müssen mindestens zwei Subnetze übrig lassen.

    Stellen Sie eine zusätzliche Anbindungskonfiguration bereit:

    • VPC Security Group (VPC-Sicherheitsgruppe) Wählen Sie eine vorhandene VPC-Sicherheitsgruppe aus. Sie können auch auswählen, ob AWS Management Console eine neue Sicherheitsgruppe für Sie erstellen und diese verwenden soll.

      Anmerkung

      Diese Sicherheitsgruppe muss den Zugriff auf die Datenbank zulassen, mit der Proxy eine Verbindung herstellt. Dieselbe Sicherheitsgruppe wird für eingehenden Datenverkehr von Ihren Anwendungen zum Proxy und für ausgehenden Datenverkehr vom Proxy zur Datenbank verwendet. Angenommen, Sie verwenden dieselbe Sicherheitsgruppe für Ihre Datenbank und Ihren Proxy. Stellen Sie in diesem Fall sicher, dass Sie angeben, dass Ressourcen in dieser Sicherheitsgruppe mit anderen Ressourcen in derselben Sicherheitsgruppe kommunizieren können.

    (Optional) Stellen Sie eine erweiterte Konfiguration bereit:

    • Enable enhanced logging (Erweiterte Protokollierung aktivieren). Sie können diese Einstellung aktivieren, um Proxy-Kompatibilitäts- oder Leistungsprobleme zu beheben.

      Wenn diese Einstellung aktiviert ist, enthält RDS Proxy detaillierte Informationen zu SQL-Anweisungen in den Protokollen. Diese Informationen helfen Ihnen beim Debugging von Problemen mit dem SQL-Verhalten oder der Leistung und Skalierbarkeit der Proxy-Verbindungen. Die Debugging-Informationen enthalten den Text der SQL-Anweisungen, die Sie über den Proxy senden. Aktivieren Sie diese Einstellung daher nur, wenn sie zum Debugging erforderlich sind, und auch nur dann, wenn Sicherheitsmaßnahmen zum Schutz vertraulicher Informationen, die in den Protokollen angezeigt werden, vorhanden sind.

      Um den mit Ihrem Proxy verbundenen Overhead zu minimieren, wird diese Einstellung von RDS Proxy automatisch 24 Stunden nach der Aktivierung deaktiviert. Aktivieren Sie sie vorübergehend, um ein bestimmtes Problem zu beheben.

  5. Wählen Sie Create Proxy (Proxy erstellen).

Um einen Proxy zu erstellen, verwenden Sie den AWS CLI-Befehl create-db-proxy. Bei --engine-family-Wert ist die Groß- und Kleinschreibung zu beachten.

Beispiel

Für Linux, macOS oder Unix:

aws rds create-db-proxy \ --db-proxy-name proxy_name \ --role-arn iam_role \ --engine-family { MYSQL | POSTGRESQL } \ --vpc-subnet-ids space_separated_list \ [--vpc-security-group-ids space_separated_list] \ [--auth ProxyAuthenticationConfig_JSON_string] \ [--require-tls | --no-require-tls] \ [--idle-client-timeout value] \ [--debug-logging | --no-debug-logging] \ [--tags comma_separated_list]

Für Windows:

aws rds create-db-proxy ^ --db-proxy-name proxy_name ^ --role-arn iam_role ^ --engine-family { MYSQL | POSTGRESQL } ^ --vpc-subnet-ids space_separated_list ^ [--vpc-security-group-ids space_separated_list] ^ [--auth ProxyAuthenticationConfig_JSON_string] ^ [--require-tls | --no-require-tls] ^ [--idle-client-timeout value] ^ [--debug-logging | --no-debug-logging] ^ [--tags comma_separated_list]

Um die erforderlichen Informationen und Zuordnungen für den Proxy zu erstellen, verwenden Sie auch den Befehl register-db-proxy-targets. Geben Sie als Namen der Zielgruppe default an. RDS Proxy erstellt automatisch eine Zielgruppe mit diesem Namen, wenn Sie jeden Proxy erstellen.

aws rds register-db-proxy-targets --db-proxy-name value [--target-group-name target_group_name] [--db-instance-identifiers space_separated_list] # rds db instances, or [--db-cluster-identifiers cluster_id] # rds db cluster (all instances), or [--db-cluster-endpoint endpoint_name] # rds db cluster endpoint (all instances)

Um einen RDS Proxy zu erstellen, rufen Sie die Amazon RDS-API-Operation CreateDBProxy auf. Sie übergeben einen Parameter mit der AuthConfig-Datenstruktur .

RDS Proxy erstellt automatisch eine Zielgruppe mit dem Namen default, wenn Sie jeden Proxy erstellen. Anschließend ordnen Sie eine RDS-DB-Instance oder ein Aurora-DB-Cluster der Zielgruppe zu, indem Sie die Funktion RegisterDBProxyTargets aufrufen.

Anzeigen eines RDS Proxy

Nachdem Sie einen oder mehrere RDS-Proxys erstellt haben, können Sie alle anzeigen, um ihre Konfigurationsdetails zu überprüfen und auszuwählen, welche zu ändern, zu löschen usw. sind

Für alle Datenbankanwendungen, die den Proxy verwenden, muss der Proxy-Endpunkt in der Verbindungszeichenfolge verwendet werden.

So zeigen Sie Ihren Proxy an

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon RDS-Konsole unter https://console.aws.amazon.com/rds/.

  2. Wählen Sie oben rechts in der AWS Management Console die AWS-Region aus, in der Sie die RDS Proxy erstellt haben.

  3. Wählen Sie im Navigationsbereich Proxies (Proxys).

  4. Wählen Sie den Namen eines RDS-Proxys, um dessen Details anzuzeigen.

  5. Auf der Detailseite zeigt der Abschnitt Target groups (Zielgruppen), wie der Proxy einer bestimmten RDS-DB-Instance oder einem Aurora-DB-Cluster zugeordnet ist. Sie können dem Link zur Standard-Zielgruppenseite folgen, um weitere Details zur Zuordnung zwischen dem Proxy und der Datenbank anzuzeigen. Auf dieser Seite werden Einstellungen angezeigt, die Sie beim Erstellen des Proxys angegeben haben, z. B. maximaler Verbindungsprozentsatz, Zeitüberschreitung für die Verbindung, Modulkompatibilität und Sitzungsfixierungsfilter.

Um Ihren Proxy mit der CLI anzuzeigen, verwenden Sie den Befehl describe-db-proxies. Standardmäßig werden alle Proxys angezeigt, die Ihrem AWS-Konto gehören. Um Details für einen einzelnen Proxy anzuzeigen, geben Sie seinen Namen mit dem Parameter --db-proxy-name an.

aws rds describe-db-proxies [--db-proxy-name proxy_name]

Verwenden Sie die folgenden Befehle, um die anderen Informationen anzuzeigen, die mit dem Proxy verknüpft sind.

aws rds describe-db-proxy-target-groups --db-proxy-name proxy_name aws rds describe-db-proxy-targets --db-proxy-name proxy_name

Verwenden Sie die folgende Befehlsfolge, um weitere Details zu den Elementen anzuzeigen, die mit dem Proxy verknüpft sind:

  1. Um eine Liste von Proxys anzufordern, führen Sie describe-db-proxies aus.

  2. Um Verbindungsparameter anzuzeigen, z. B. den maximalen Prozentsatz der Verbindungen, die der Proxy verwenden kann, führen Sie describe-db-proxy-target-groups --db-proxy-name aus und verwenden den Namen des Proxys als Parameterwert.

  3. Um die Details der RDS-DB-Instance oder des Aurora-DB-Clusters anzuzeigen, die der zurückgegebenen Zielgruppe zugeordnet sind, führen Sie describe-db-proxy-targets aus.

Verwenden Sie den Vorgang DescribeDBProxies, um Ihre Proxys mit der RDS-API anzuzeigen. Er gibt Werte des Datentyps DBProxy zurück.

Um Details zu den Verbindungseinstellungen für den Proxy anzuzeigen, verwenden Sie die Proxy-Bezeichner aus diesem Rückgabewert mit der Operation DescribeDBProxyTargetGroups. Er gibt Werte des Datentyps DBProxyTargetGroup zurück.

Sie können die dem Proxy zugeordnete RDS-Instance oder das Aurora-DB-Cluster mithilfe der Operation DescribeDBProxyTargets anzeigen. Er gibt Werte des Datentyps DBProxyTarget zurück.

Verbinden mit einer Datenbank über RDS Proxy

Sie stellen eine Verbindung zu einer RDS-DB-Instance oder einem Aurora DB-Cluster über einen Proxy in der Regel auf die gleiche Weise her, wie Sie eine direkte Verbindung mit der Datenbank herstellen. Der Hauptunterschied besteht darin, dass Sie anstelle des Instance- oder Clusterendpunkts den Proxy-Endpunkt angeben. Bei einem Aurora-DB-Cluster verfügen alle Proxy-Verbindungen über Lese-/Schreibfunktionen und verwenden die Schreiber-Instance. Wenn Sie den Leser-Endpunkt für schreibgeschützte Verbindungen verwenden, verwenden Sie den Leser-Endpunkt auf dieselbe Weise.

Herstellen einer Verbindung mit einem Proxy mithilfe der systemeigenen Authentifizierung

Führen Sie die folgenden grundlegenden Schritte aus, um eine Verbindung mit einem Proxy mithilfe der nativen Authentifizierung herzustellen:

  1. Suchen Sie den Proxy-Endpunkt. In der AWS Management Console finden Sie den Endpunkt auf der Detailseite für den entsprechenden Proxy. Mit der AWS CLI können Sie den Befehl describe-db-proxies verwenden. Im folgenden Beispiel wird gezeigt, wie Sie dies tun.

    # Add --output text to get output as a simple tab-separated list. $ aws rds describe-db-proxies --query '*[*].{DBProxyName:DBProxyName,Endpoint:Endpoint}' [ [ { "Endpoint": "the-proxy.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy" }, { "Endpoint": "the-proxy-other-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-other-secret" }, { "Endpoint": "the-proxy-rds-secret.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-rds-secret" }, { "Endpoint": "the-proxy-t3.proxy-demo.us-east-1.rds.amazonaws.com", "DBProxyName": "the-proxy-t3" } ] ]
  2. Geben Sie diesen Endpunkt als Hostparameter in der Verbindungszeichenfolge für Ihre Clientanwendung an. Geben Sie beispielsweise den Proxy-Endpunkt als Wert für die Option mysql -h oder psql -h an.

  3. Geben Sie denselben Datenbankbenutzernamen und dasselbe Passwort an, die Sie normalerweise verwenden.

Herstellen einer Verbindung mit einem Proxy mithilfe der IAM-Authentifizierung

Wenn Sie die IAM-Authentifizierung für RDS Proxy verwenden, müssen Sie die Benutzer Ihrer Datenbank auf die Authentifizierung mit ihrem regulären Benutzernamen und Passwort festlegen. Die IAM-Authentifizierung gilt für den Abruf von Benutzername und Passwort aus Secrets Manager durch RDS Proxy. Die Verbindung von RDS Proxy zur zugrunde liegenden Datenbank erfolgt nicht über IAM.

Um eine Verbindung mit RDS Proxy mittels IAM-Authentifizierung herzustellen, befolgen Sie das gleiche allgemeine Verfahren wie beim Herstellen einer Verbindung mit einer RDS-DB-Instance oder einem Aurora-Cluster mittels IAM-Authentifizierung. Allgemeine Informationen zur Verwendung von IAM mit RDS und Aurora finden Sie unter Sicherheit in Amazon RDS.

Zu den Hauptunterschieden bei der IAM-Nutzung für RDS Proxy gehören die folgenden:

  • Sie konfigurieren nicht jeden einzelnen Datenbankbenutzer mit einem Autorisierungs-Plugin. Die Datenbankbenutzer haben weiterhin normale Benutzernamen und Passwörter innerhalb der Datenbank. Sie richten Secrets Manager-Geheimnisse ein, die diese Benutzernamen und Passwörter enthalten, und autorisieren RDS Proxy, die Anmeldeinformationen von Secrets Manager abzurufen.

    Wichtig

    Die IAM-Authentifizierung gilt für die Verbindung zwischen Ihrem Clientprogramm und dem Proxy. Der Proxy authentifiziert sich dann bei der Datenbank mit den Anmeldeinformationen aus Benutzername und Passwort, die von Secrets Manager abgerufen wurden. Wenn Sie IAM für die Verbindung mit einem Proxy verwenden, stellen Sie sicher, dass für die zugrunde liegende RDS-DB-Instance oder den zugrunde liegenden Aurora-DB-Cluster IAM nicht aktiviert ist.

  • Anstelle des Instance-, Cluster- oder Leser-Endpunkts geben Sie den Proxy-Endpunkt an. Weitere Informationen zum Proxy-Endpunkt finden Sie unter Herstellen einer Verbindung zu Ihrem DB-Instance- mithilfe der IAM-Authentifizierung.

  • Im Anwendungsfall mit direkter DB IAM-Authentifizierung wählen Sie Datenbankbenutzer selektiv aus und konfigurieren sie so, dass sie mit einem speziellen Authentifizierungs-Plugin identifiziert werden. Sie können dann mit IAM-Auth eine Verbindung zu diesen Benutzern herstellen.

    Im Proxy-Anwendungsfall müssen Sie dem Proxy die Geheimnisse bereitstellen, die den Benutzernamen und das Passwort eines Benutzers enthalten (native Authentifizierung). Anschließend stellen Sie mithilfe der IAM-Authentifizierung eine Verbindung zum Proxy her (indem Sie ein Authentifizierungs-Token mit dem Proxy-Endpunkt und nicht dem Datenbank-Endpunkt generieren und einen Benutzernamen verwenden, der mit einem der Benutzernamen für die zuvor angegebenen Geheimnisse übereinstimmt).

  • Sie müssen Transport Layer Security (TLS)/Secure Sockets Layer (SSL) verwenden, wenn Sie mit IAM-Authentifizierung eine Verbindung zu einem Proxy herstellen.

Sie können einem bestimmten Benutzer Zugriff auf den Proxy gewähren, indem Sie die IAM-Richtlinie ändern. Ein Beispiel folgt.

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"

Überlegungen zum Herstellen einer Verbindung mit einem Proxy mit PostgreSQL

Wenn ein Client in PostgreSQL eine Verbindung zu einer PostgreSQL-Datenbank startet, sendet er eine Startmeldung, die Paare von Parameternamen und Wertezeichenfolgen enthält. Weitere Informationen finden Sie unter StartupMessage in den PostgreSQL-Nachrichtenformaten in der PostgreSQL-Dokumentation.

Wenn Sie eine Verbindung über einen RDS Proxy herstellen, kann die Startmeldung die folgenden aktuell erkannten Parameter enthalten:

  • user

  • database

  • replication

Die Startmeldung kann auch die folgenden zusätzlichen Laufzeitparameter enthalten:

Weitere Informationen zum PostgreSQL-Messaging finden Sie im Frontend/Backend-Protokoll in der PostgreSQL-Dokumentation.

Für PostgreSQL empfehlen wir bei Verwendung von JDBC Folgendes, um Pinning zu vermeiden:

  • Stellen Sie den JDBC-Verbindungsparameter assumeMinServerVersion mindestens auf 9.0 ein, um Pinning zu vermeiden. Dadurch wird verhindert, dass der JDBC-Treiber beim Starten der Verbindung einen zusätzlichen Roundtrip ausführt, wenn er SET extra_float_digits = 3 ausführt.

  • Setzen Sie den JDBC-Verbindungsparameter ApplicationName auf any/your-application-name, um Pinning zu vermeiden. Dadurch wird verhindert, dass der JDBC-Treiber beim Starten der Verbindung einen zusätzlichen Roundtrip ausführt, wenn er SET application_name = "PostgreSQL JDBC Driver" ausführt. Beachten Sie, dass der JDBC-Parameter ApplicationName, der PostgreSQL-StartupMessage-Parameter aber application_name ist.

  • Setzen Sie den JDBC-Verbindungsparameter preferQueryMode auf extendedForPrepared, um Pinning zu vermeiden. Mit extendedForPrepared wird sichergestellt, dass der erweiterte Modus nur für vorbereitete Anweisungen verwendet wird.

    Der Standardwert für den Parameter preferQueryMode ist extended, der den erweiterten Modus für alle Abfragen verwendet. Der erweiterte Modus verwendet eine Reihe von Prepare-, Bind-, Execute- und Sync-Anforderungen und entsprechenden Antworten. Dieser Typ von Serie verursacht Verbindungspinning in einem RDS Proxy.

Weitere Informationen finden Sie unter Vermeiden des Fixierens. Weitere Informationen zum Herstellen einer Verbindung mit JDBC finden Sie unter Verbinden mit der Datenbank in der PostgreSQL-Dokumentation.

Verwalten eines RDS Proxy

Im Folgenden finden Sie eine Erläuterung zur Verwaltung von RDS Proxybetrieb und -konfiguration. Diese Verfahren helfen Ihrer Anwendung, Datenbankverbindungen möglichst effizient zu nutzen und eine maximale Wiederverwendung der Verbindung zu erzielen. Je mehr Sie die Wiederverwendung der Verbindung nutzen können, desto mehr CPU- und Arbeitsspeicher-Overhead können Sie sparen. Dies reduziert wiederum die Latenz für Ihre Anwendung und ermöglicht es der Datenbank, mehr Ressourcen für die Verarbeitung von Anwendungsanforderungen zu verwenden.

Ändern eines RDS Proxy

Sie können bestimmte Einstellungen ändern, die einem Proxy zugeordnet sind, nachdem Sie den Proxy erstellt haben. Dazu ändern Sie den Proxy selbst, die zugehörige Zielgruppe oder beides. Jedem Proxy ist eine Zielgruppe zugeordnet.

So ändern Sie die Einstellungen für einen Proxy:

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon RDS-Konsole unter https://console.aws.amazon.com/rds/.

  2. Wählen Sie im Navigationsbereich Proxies (Proxys).

  3. Wählen Sie in der Liste der Proxys den Proxy aus, dessen Einstellungen Sie ändern möchten, oder gehen Sie zur Detailseite.

  4. Wählen Sie für Actions (Aktionen) die Option Modify (Ändern) aus.

  5. Geben Sie die zu ändernden Eigenschaften ein, oder wählen Sie sie aus. Sie haben die folgenden Möglichkeiten:

    • Benennen Sie den Proxy um, indem Sie einen neuen Bezeichner eingeben.

    • Aktivieren oder deaktivieren Sie die Anforderung für Transport Layer Security (TLS).

    • Geben Sie einen Zeitraum für das Timeout für einen Verbindungsleerlauf ein.

    • Sie können Secrets Manager-Secrets hinzufügen oder entfernen. Diese Secrets entsprechen Datenbankbenutzernamen und Passwörtern.

    • Ändern Sie die IAM-Rolle, die zum Abrufen der Secrets von Secrets Manager verwendet wird.

    • Verlangen oder verweigern Sie die IAM-Authentifizierung für Verbindungen mit dem Proxy.

    • Sie können VPC-Subnetze für den zu verwendenden Proxy hinzufügen oder entfernen.

    • Sie können VPC-Sicherheitsgruppen hinzufügen oder entfernen, die der Proxy verwenden soll.

    • Aktivieren oder deaktivieren Sie die erweiterte Protokollierung.

  6. Wählen Sie Modify aus.

Wenn Sie die Einstellungen, die Sie ändern möchten, in der Liste nicht gefunden haben, verwenden Sie das folgende Verfahren, um die Zielgruppe für den Proxy zu aktualisieren. Die Zielgruppe, die einem Proxy zugeordnet ist, steuert die Einstellungen für die physischen Datenbankverbindungen. Jedem Proxy ist eine Zielgruppe mit dem Namen default zugeordnet, die automatisch zusammen mit dem Proxy erstellt wird.

Sie können die Zielgruppe nur über die Proxy-Detailseite ändern, nicht über die Liste auf der Seite Proxies (Proxys) .

So ändern Sie die Einstellungen für eine Proxy-Zielgruppe:

  1. Gehen Sie auf der Seite Proxys zur Detailseite für einen Proxy.

  2. Wählen Sie für Target groups (Zielgruppen) den default-Link aus. Derzeit haben alle Proxys eine einzelne Zielgruppe mit dem Namen default.

  3. Wählen Sie auf der Detailseite für die Standard-Zielgruppe die Option Modify (Ändern).

  4. Wählen Sie neue Einstellungen für die Eigenschaften aus, die Sie ändern können:

    • Wählen Sie eine andere RDS-DB-Instance oder ein anderes Aurora-Cluster aus.

    • Passen Sie den Prozentsatz der maximal verfügbaren Verbindungen an, die der Proxy verwenden kann.

    • Wählen Sie einen Sitzungs-Pinning-Filter aus. Dies kann dazu beitragen, Leistungsprobleme aufgrund einer nicht ausreichenden Wiederverwendung auf Transaktionsebene zu reduzieren. Die Verwendung dieser Einstellung erfordert das Verständnis des Anwendungsverhaltens und der Umstände, unter denen RDS Proxy eine Sitzung an einer Datenbankverbindung fixiert.

    • Passen Sie das Zeitüberschreitungsintervall der Verbindung an. Diese Einstellung gilt, wenn für den Proxy bereits die maximale Anzahl von Verbindungen verwendet wird. Diese Einstellung legt fest, wie lange der Proxy wartet, bis eine Verbindung verfügbar ist, bevor ein Timeout-Fehler zurückgegeben wird.

    Sie können bestimmte Eigenschaften, z. B. die Zielgruppenkennung und die Datenbank-Engine, nicht ändern.

  5. Wählen Sie Modify target group (Zielgruppe ändern).

Um einen Proxy mit der AWS CLI zu ändern, verwenden Sie die Befehle modify-db-proxy, modify-db-proxy-target-group, deregister-db-proxy-targets und register-db-proxy-targets.

Mit dem Befehl modify-db-proxy können Sie Eigenschaften wie die folgenden ändern:

  • Der Satz von Secrets Manager-Secrets, die vom Proxy verwendet werden.

  • Ob TLS erforderlich ist.

  • Das Timeout für Client-Leerlauf.

  • Ob zusätzliche Informationen aus SQL-Anweisungen zum Debuggen protokolliert werden sollen.

  • Die IAM-Rolle, die zum Abrufen von Secrets Manager-Secrets verwendet wird.

  • Die vom Proxy verwendeten Sicherheitsgruppen.

Das folgende Beispiel zeigt, wie ein vorhandener Proxy umbenannt wird.

aws rds modify-db-proxy --db-proxy-name the-proxy --new-db-proxy-name the_new_name

Um verbindungsbezogene Einstellungen zu ändern oder die Zielgruppe umzubenennen, verwenden Sie den Befehl modify-db-proxy-target-group. Derzeit haben alle Proxys eine einzelne Zielgruppe mit dem Namen default. Bei der Arbeit mit dieser Zielgruppe geben Sie den Namen des Proxys und default für den Namen der Zielgruppe an.

Das folgende Beispiel zeigt, wie Sie zuerst die MaxConnectionsPercent-Einstellung für einen Proxy überprüfen und dann mithilfe der Zielgruppe ändern.

aws rds describe-db-proxy-target-groups --db-proxy-name the-proxy { "TargetGroups": [ { "Status": "available", "UpdatedDate": "2019-11-30T16:49:30.342Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 50, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } ] } aws rds modify-db-proxy-target-group --db-proxy-name the-proxy --target-group-name default --connection-pool-config ' { "MaxIdleConnectionsPercent": 75 }' { "DBProxyTargetGroup": { "Status": "available", "UpdatedDate": "2019-12-02T04:09:50.420Z", "ConnectionPoolConfig": { "MaxIdleConnectionsPercent": 75, "ConnectionBorrowTimeout": 120, "MaxConnectionsPercent": 100, "SessionPinningFilters": [] }, "TargetGroupName": "default", "CreatedDate": "2019-11-30T16:49:27.940Z", "DBProxyName": "the-proxy", "IsDefault": true } }

Mit den Befehlen deregister-db-proxy-targets und register-db-proxy-targets ändern Sie, welcher RDS-DB-Instance oder welchem Aurora-DB-Cluster der Proxy über die Zielgruppe zugeordnet ist. Derzeit kann jeder Proxy eine Verbindung zu einer RDS-DB-Instance oder einem Aurora-DB-Cluster herstellen. Die Zielgruppe verfolgt die Verbindungsdetails für alle RDS-DB-Instances in einer Multi-AZ-Konfiguration oder alle DB-Instances in einem Aurora-Cluster.

Das folgende Beispiel beginnt mit einem Proxy, der einem Aurora MySQL-Cluster mit dem Namen cluster-56-2020-02-25-1399 zugeordnet ist. Das Beispiel zeigt, wie der Proxy so geändert wird, dass er eine Verbindung zu einem anderen Cluster namens provisioned-cluster herstellen kann.

Wenn Sie mit einer RDS-DB-Instance arbeiten, geben Sie die --db-instance-identifier-Option an. Wenn Sie mit einem Aurora-DB-Cluster arbeiten, geben Sie stattdessen die --db-cluster-identifier-Option an.

Im folgenden Beispiel wird ein Aurora MySQL-Proxy geändert. Ein Aurora PostgreSQL-Proxy hat Port 5432.

aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [ { "Endpoint": "instance-9814.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-9814" }, { "Endpoint": "instance-8898.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-8898" }, { "Endpoint": "instance-1018.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-1018" }, { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "cluster-56-2020-02-25-1399" }, { "Endpoint": "instance-4330.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "instance-4330" } ] } aws rds deregister-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier cluster-56-2020-02-25-1399 aws rds describe-db-proxy-targets --db-proxy-name the-proxy { "Targets": [] } aws rds register-db-proxy-targets --db-proxy-name the-proxy --db-cluster-identifier provisioned-cluster { "DBProxyTargets": [ { "Type": "TRACKED_CLUSTER", "Port": 0, "RdsResourceId": "provisioned-cluster" }, { "Endpoint": "gkldje.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "gkldje" }, { "Endpoint": "provisioned-1.demo.us-east-1.rds.amazonaws.com", "Type": "RDS_INSTANCE", "Port": 3306, "RdsResourceId": "provisioned-1" } ] }

Um einen Proxy mit der RDS-API zu ändern, verwenden Sie die Vorgänge ModifyDBProxy, ModifyDBProxyTargetGroup, DeregisterDBProxyTargets und RegisterDBProxyTargets .

Mit ModifyDBProxy können Sie Eigenschaften wie die folgenden ändern:

  • Der Satz von Secrets Manager-Secrets, die vom Proxy verwendet werden.

  • Ob TLS erforderlich ist.

  • Das Timeout für Client-Leerlauf.

  • Ob zusätzliche Informationen aus SQL-Anweisungen zum Debuggen protokolliert werden sollen.

  • Die IAM-Rolle, die zum Abrufen von Secrets Manager-Secrets verwendet wird.

  • Die vom Proxy verwendeten Sicherheitsgruppen.

Mit ModifyDBProxyTargetGroup können Sie verbindungsbezogene Einstellungen ändern oder die Zielgruppe umbenennen. Derzeit haben alle Proxys eine einzelne Zielgruppe mit dem Namen default. Bei der Arbeit mit dieser Zielgruppe geben Sie den Namen des Proxys und default für den Namen der Zielgruppe an.

Mit DeregisterDBProxyTargets und RegisterDBProxyTargets ändern Sie, welcher RDS-DB-Instance oder welchem Aurora-DB-Cluster der Proxy über die Zielgruppe zugeordnet ist. Derzeit kann jeder Proxy eine Verbindung zu einer RDS-DB-Instance oder einem Aurora-DB-Cluster herstellen. Die Zielgruppe verfolgt die Verbindungsdetails für alle RDS-DB-Instances in einer Multi-AZ-Konfiguration oder alle DB-Instances in einem Aurora-Cluster.

Hinzufügen eines neuen Datenbankbenutzers

In einigen Fällen können Sie einen neuen Datenbankbenutzer zu einer RDS-DB-Instance oder einem Aurora-Cluster hinzufügen, die/der einem Proxy zugeordnet ist. Fügen Sie dazu ein Secrets Manager-Secret hinzu, um die Anmeldeinformationen für diesen Benutzer zu speichern, oder verwenden Sie ein Secret neu. Wählen Sie dazu eine der folgenden Optionen:

  • Erstellen Sie ein neues Secrets Manager-Secret, indem Sie das unter Einrichten von Datenbank-Anmeldeinformationen in AWS Secrets Manager beschriebene Verfahren verwenden.

  • Aktualisieren Sie die IAM-Rolle, um RDS Proxy Zugriff auf das neue Secrets Manager-Geheimnis zu gewähren. Aktualisieren Sie dazu den Ressourcenabschnitt der IAM-Rollenrichtlinie.

  • Wenn der neue Benutzer an die Stelle eines vorhandenen Benutzers tritt, aktualisieren Sie die Anmeldeinformationen, die im Secrets Manager-Secret des Proxys für den vorhandenen Benutzer gespeichert sind.

Ändern des Passworts für einen Datenbankbenutzer

In einigen Fällen können Sie das Passwort für einen Datenbankbenutzer in einer RDS-DB-Instance oder einem Aurora-Cluster ändern, die/der einem Proxy zugeordnet ist. Aktualisieren Sie dazu das entsprechende Secrets Manager-Secret mit dem neuen Passwort.

Steuern von Verbindungsgrenzen und Zeitüberschreitungen

RDS Proxy verwendet die max_connections-Einstellung für Ihre RDS-DB-Instance oder für Ihr Aurora-DB-Cluster. Diese Einstellung stellt die Obergrenze für die Verbindungen dar, die der Proxy jederzeit öffnen kann. In Aurora-Clustern und RDS-Multi-AZ-Konfigurationen ist der max_connections-Wert, den der Proxy verwendet, der, der für die primäre Aurora-Instance oder die RDS-Schreiber-Instance verwendet wird.

Um diesen Wert für Ihre RDS-DB-Instance oder für Ihr Aurora-DB-Cluster festzulegen, folgen Sie den Anweisungen unter Arbeiten mit DB-Parametergruppen. Diese Verfahren veranschaulichen, wie Sie eine Parametergruppe Ihrer Datenbank zuordnen und den Wert für max_connections in der Parametergruppe bearbeiten.

Die Proxy-Einstellung für maximale Verbindungen stellt einen Prozentsatz des max_connections-Wertes für die Datenbank dar, die dem Proxy zugeordnet ist. Wenn Sie mehrere Anwendungen verwenden, die alle dieselbe Datenbank verwenden, können Sie ihre Verbindungskontingente effektiv aufteilen, indem Sie für jede Anwendung einen Proxy mit einem bestimmten Prozentsatz max_connections von verwenden. Stellen Sie in diesem Fall sicher, dass die Prozentsätze für alle Proxys, die mit derselben Datenbank verknüpft sind, bis zu 100 oder weniger betragen.

RDS Proxy trennt Verbindungen im Leerlauf regelmäßig und gibt sie an den Verbindungspool zurück. Sie können dieses Timeout-Intervall anpassen. Dies hilft Ihren Anwendungen, mit veralteten Ressourcen umzugehen, insbesondere wenn die Anwendung fälschlicherweise eine Verbindung offen lässt und wichtige Datenbankressourcen enthält.

Überwachung und Verwaltung des Verbindungspoolings

Wie unter Verbindungspooling beschrieben, ist das Verbindungspooling eine entscheidende RDS Proxy-Funktion. Im Folgenden erfahren Sie, wie Sie das Verbindungspooling und die Wiederverwendung von Verbindungen auf Transaktionsebene (Multiplexing) am effizientesten nutzen können.

Da der Verbindungspool von RDS Proxy verwaltet wird, können Sie ihn überwachen und Verbindungslimits und Timeout-Intervalle anpassen, ohne den Anwendungscode zu ändern.

Für jeden Proxy können Sie eine Obergrenze für die Anzahl der Verbindungen angeben, die vom Verbindungspool verwendet werden. Sie geben die Obergrenze als Prozentsatz an. Dieser Prozentsatz gilt für die maximalen Verbindungen, die in der Datenbank konfiguriert sind. Die genaue Anzahl variiert je nach DB-Instance-Größe und Konfigurationseinstellungen.

Angenommen, Sie haben RDS Proxy so konfiguriert dass 75 % der maximalen Verbindungen für die Datenbank verwendet werden. Für MySQL wird der Maximalwert durch den Konfigurationsparameter max_connections definiert. In diesem Fall bleiben die anderen 25 % der maximalen Verbindungen verfügbar, um anderen Proxys oder Verbindungen zugewiesen zu werden, die keinen Proxy durchlaufen. In einigen Fällen hält der Proxy zu einem bestimmten Zeitpunkt möglicherweise weniger als 75 Prozent der maximalen Verbindungen offen. Diese Fälle können Situationen umfassen, in denen die Datenbank nicht viele gleichzeitige Verbindungen aufweist oder einige Verbindungen längere Zeit im Leerlauf bleiben.

Die Gesamtanzahl der verfügbaren Verbindungen für den Verbindungspool ändert sich, wenn Sie die max_connections-Konfigurationseinstellung aktualisieren, die für eine RDS-DB-Instance oder einen Aurora-Cluster gilt.

Der Proxy reserviert nicht alle diese Verbindungen im Voraus. Daher können Sie einen relativ großen Prozentsatz angeben, und diese Verbindungen werden nur geöffnet, wenn der Proxy so stark ausgelastet ist, dass er diese benötigt.

Sie können festlegen, wie lange gewartet werden soll, bis eine Verbindung für Ihre Anwendung verfügbar ist. Diese Einstellung wird durch die Option Connection borrow timeout (Verbindungsausleihen-Timeout) repräsentiert, wenn Sie einen Proxy erstellen. Diese Einstellung gibt an, wie lange gewartet werden muss, bis eine Verbindung im Verbindungspool verfügbar ist, bevor ein Timeoutfehler zurückgegeben wird. Sie greift, wenn die maximale Anzahl von Verbindungen erreicht ist und daher keine Verbindungen im Verbindungspool verfügbar sind. Dies gilt auch, wenn keine Schreiber-Instance verfügbar ist, da ein Failover-Vorgang ausgeführt wird. Mit dieser Einstellung können Sie die beste Wartezeit für Ihre Anwendung festlegen, ohne das Abfrage-Timeout im Anwendungscode ändern zu müssen.

Vermeiden des Fixierens

Multiplexing ist effizienter, wenn Datenbankanforderungen nicht auf Statusinformationen aus früheren Anforderungen angewiesen sind. In diesem Fall kann RDS Proxy eine Verbindung zum Abschluss jeder Transaktion wiederverwenden. Beispiele für solche Zustandsinformationen sind die meisten Variablen und Konfigurationsparameter, die Sie durch SET-oder SELECT-Anweisungen ändern können. SQL-Transaktionen auf einer Clientverbindung können standardmäßig zwischen zugrunde liegenden Datenbankverbindungen Multiplexing durchführen.

Ihre Verbindungen zum Proxy können einen Status eingeben, der als Pinning (Fixieren) bezeichnet wird. Wenn eine Verbindung angeheftet wird, verwendet jede spätere Transaktion dieselbe zugrunde liegende Datenbankverbindung, bis die Sitzung beendet ist. Andere Clientverbindungen können diese Datenbankverbindung auch erst dann wieder verwenden, wenn die Sitzung beendet ist. Die Sitzung wird beendet, wenn die Clientverbindung unterbrochen wird.

RDS Proxy heftet automatisch eine Clientverbindung an eine bestimmte DB-Verbindung an, wenn eine Sitzungsstatusänderung erkannt wird, die für andere Sitzungen nicht geeignet ist. Das Fixieren verringert die Effektivität der Wiederverwendung der Verbindung. Wenn alle oder fast alle Verbindungen fixiert sind, können Sie Ihren Anwendungscode oder Ihre Workload ändern, um dafür zu sorgen, dass Fixierungen weniger erforderlich sind.

Wenn Ihre Anwendung beispielsweise eine Sitzungsvariable oder einen Konfigurationsparameter ändert, können sich spätere Anweisungen darauf verlassen, dass die neue Variable oder der neue Parameter wirksam ist. Wenn also RDS Proxy Anforderungen verarbeitet, um Sitzungsvariablen oder Konfigurationseinstellungen zu ändern, wird diese Sitzung an die DB-Verbindung fixiert. Auf diese Weise bleibt der Sitzungsstatus für alle späteren Transaktionen in derselben Sitzung gültig.

Diese Regel gilt nicht für alle Parameter, die Sie festlegen können. RDS Proxy verfolgt Änderungen am Zeichensatz, der Kollationierung, der Zeitzone, dem Autocommit, der aktuellen Datenbank, dem SQL-Modus und den session_track_schema-Einstellungen. RDS Proxy fixiert eine Sitzung somit nicht, wenn Sie diese ändern. In diesem Fall verwendet RDS Proxy nur die Verbindung für andere Sitzungen erneut, die dieselben Werte für diese Einstellungen haben.

Die Leistungsoptimierung für RDS Proxy beinhaltet den Versuch, die Wiederverwendung von Verbindungen auf Transaktionsebene (Multiplexing) zu maximieren, indem das Fixieren minimiert wird. Gehen Sie dazu wie folgt vor:

  • Vermeiden Sie unnötige Datenbankanforderungen, die Anheften (Pinning) verursachen könnten.

  • Legen Sie Variablen und Konfigurationseinstellungen konsistent über alle Verbindungen hinweg fest. Auf diese Weise verwenden spätere Sitzungen häufiger Verbindungen, die über diese speziellen Einstellungen verfügen.

    Wenn für PostgreSQL jedoch eine Variable festgelegt wird, wird die Sitzung durch Pinning fixiert.

  • Wenden Sie einen Sitzungsfixierungsfilter auf den Proxy an. Sie können bestimmte Arten von Operationen vom Fixieren der Sitzung ausnehmen, wenn Sie wissen, dass dies den korrekten Betrieb Ihrer Anwendung nicht beeinträchtigt.

  • Sehen Sie, wie häufig Pinning auftritt, indem Sie die CloudWatch-Metrik DatabaseConnectionsCurrentlySessionPinned überwachen. Hinweise zu diesen und anderen CloudWatch-Metriken finden Sie unter Überwachung von RDS Proxy mit Amazon CloudWatch.

  • Wenn Sie SET-Anweisungen verwenden, um eine identische Initialisierung für jede Clientverbindung durchzuführen, können Sie dies tun, während Sie das Multiplexing auf Transaktionsebene beibehalten. In diesem Fall verschieben Sie die Anweisungen, die den ursprünglichen Sitzungsstatus einrichten, in die Initialisierungsabfrage, die von einem Proxy verwendet wird. Diese Eigenschaft ist eine Zeichenfolge, die eine oder mehrere SQL-Anweisungen enthält, die durch Semikola getrennt sind.

    Beispielsweise können Sie eine Initialisierungsabfrage für einen Proxy definieren, der bestimmte Konfigurationsparameter festlegt. RDS Proxy wendet dann diese Einstellungen an, wenn eine neue Verbindung für diesen Proxy eingerichtet wird. Sie können die entsprechenden SET-Anweisungen aus Ihrem Anwendungscode entfernen, damit sie das Multiplexing auf Transaktionsebene nicht beeinträchtigen.

    Wichtig

    Setzen Sie in der Initialisierungsabfrage bei Proxys, die mit MySQL-Datenbanken verknüpft sind, den Konfigurationsparameter sql_auto_is_null nicht auf true oder einen Wert ungleich Null. Dies kann zu einem falschen Anwendungsverhalten führen.

Der Proxy fixiert die Sitzung an der aktuellen Verbindung in den folgenden Situationen an, in denen Multiplexing unerwartetes Verhalten verursachen kann:

  • Jede Anweisung mit einer Textgröße über 16 KB bewirkt, dass der Proxy die Sitzung fixiert.

  • Vorbereitete Anweisungen bewirken, dass der Proxy die Sitzung fixiert. Diese Regel bestimmt, ob die vorbereitete Anweisung SQL-Text oder das Binärprotokoll verwendet.

  • Die expliziten MySQL-Anweisungen LOCK TABLE, LOCK TABLES oder FLUSH TABLES WITH READ LOCK bewirken, dass der Proxy die Sitzung fixiert.

  • Wenn Sie eine Benutzervariable oder eine Systemvariable festlegen (mit einigen Ausnahmen), wird der Proxy die Sitzung fixieren. Wenn diese Situation die Wiederverwendung der Verbindung zu stark reduziert, können Sie festlegen, dass SET-Vorgänge keine Fixierung verursachen. Weitere Informationen dazu, wie Sie dies tun, indem Sie die Eigenschaft SessionPinningFilters festlegen, finden Sie unter Erstellen eines RDS Proxy.

  • Beim Erstellen einer temporären Tabelle fixiert der Proxy die Sitzung. Auf diese Weise wird der Inhalt der temporären Tabelle während der gesamten Sitzung beibehalten, unabhängig von den Transaktionsgrenzen.

  • Der Aufruf der MySQL-Funktionen ROW_COUNT, FOUND_ROWS und LAST_INSERT_ID verursacht manchmal Pinning.

    Die genauen Umstände, in denen diese Funktionen Pinning verursachen, können sich zwischen Aurora MySQL-Versionen unterscheiden, die mit MySQL 5.6 und MySQL 5.7 kompatibel sind.

Das Aufrufen gespeicherter MySQL-Prozeduren und gespeicherter Funktionen verursacht kein Fixieren. RDS Proxy erkennt keine Sitzungsstatusänderungen, die sich aus solchen Aufrufen ergeben. Stellen Sie daher sicher, dass Ihre Anwendung den Sitzungsstatus in gespeicherten Routinen nicht ändert und sich darauf verlässt, dass dieser Sitzungsstatus transaktionsübergreifend beibehalten wird. Wenn beispielsweise eine gespeicherte Prozedur eine temporäre Tabelle erstellt, die transaktionsübergreifend bestehen bleiben soll, ist diese Anwendung derzeit nicht mit RDS Proxy kompatibel.

Für PostgreSQL verursachen die folgenden Interaktionen eine Fixierung:

  • Verwenden von SET-Befehlen

  • Verwenden des erweiterten Abfrageprotokolls, z. B. mithilfe von JDBC-Standardeinstellungen

  • Erstellen von temporären Sequenzen, Tabellen oder Ansichten

  • Deklarieren von Cursors

  • Verwerfen des Sitzungsstatus

  • Listening für einen Benachrichtigungskanal

  • Laden eines Bibliotheksmoduls wie auto_explain

  • Manipulation von Sequenzen mit Funktionen wie nextval() und setval()

  • Interagieren mit Sperren mit Funktionen wie pg_advisory_lock() und pg_try_advisory_lock()

  • Verwenden von vorbereiteten Anweisungen, Festlegen von Parametern oder Zurücksetzen eines Parameters auf den Standardwert

Wenn Sie über eingehende Kenntnisse über das Verhalten Ihrer Anwendung verfügen, können Sie das Pinning-Verhalten für bestimmte Anwendungsanweisungen überspringen. Dazu wählen Sie beim Erstellen des Proxys die Option Sitzungs-Pinning-Filter. Derzeit können Sie das Sitzungs-Pinning für das Festlegen von Sitzungsvariablen und Konfigurationseinstellungen deaktivieren.

Metriken zur Häufigkeit des Pinnings für einen Proxy finden Sie unter Überwachung von RDS Proxy mit Amazon CloudWatch.

Löschen eines RDS Proxy

Sie können einen Proxy löschen, wenn Sie ihn nicht mehr benötigen. Sie können einen Proxy löschen, wenn die Anwendung, die ihn verwendet hat, nicht mehr relevant ist. Oder Sie löschen einen Proxy, wenn Sie die/den mit ihm verknüpfte DB-Instance oder -Cluster außer Betrieb nehmen.

So löschen Sie einen Proxy:

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die Amazon RDS-Konsole unter https://console.aws.amazon.com/rds/.

  2. Wählen Sie im Navigationsbereich Proxies (Proxys).

  3. Wählen Sie den zu löschenden Proxy aus der Liste aus.

  4. Wählen Sie Delete Proxy (Proxy löschen).

Um einen DB-Proxy zu löschen, verwenden Sie den AWS CLI-Befehl delete-db-proxy. Um zugehörige Zuordnungen zu entfernen, verwenden Sie auch den Befehl deregister-db-proxy-targets .

aws rds delete-db-proxy --name proxy_name
aws rds deregister-db-proxy-targets --db-proxy-name proxy_name [--target-group-name target_group_name] [--target-ids comma_separated_list] # or [--db-instance-identifiers instance_id] # or [--db-cluster-identifiers cluster_id]

Um einen DB-Proxy zu löschen, rufen Sie die Amazon RDS-API-Funktion DeleteDBProxy auf. Um verwandte Elemente und Zuordnungen zu löschen, rufen Sie auch die Funktionen DeletedBProxyTargetGroup und DeregisterDbProxyTargets auf.

Überwachung von RDS Proxy mit Amazon CloudWatch

Sie können RDS Proxy mit Amazon CloudWatch überwachen, wobei CloudWatch Rohdaten von Proxys sammelt und in lesbare, echtzeitnahe Metriken umwandelt. Um diese Metriken in der CloudWatch-Konsole zu finden, wählen Sie Metrics (Metriken), dann RDS, und dann Per-Proxy Metrics (Proxy-Metriken). Weitere Informationen finden Sie unter Verwenden von Amazon CloudWatch-Metriken im Amazon CloudWatch-Benutzerhandbuch.

Anmerkung

RDS veröffentlicht diese Metriken für jede zugrunde liegende Amazon EC2-Instance, die dem Proxy zugeordnet ist. Ein einzelner Proxy kann von mehr als einer EC2-Instance bedient werden. Verwenden Sie CloudWatch-Statistiken, um die Werte für einen Proxy über alle zugeordneten Instances hinweg zu aggregieren.

Einige dieser Metriken sind möglicherweise erst nach der ersten erfolgreichen Verbindung durch einen Proxy sichtbar.

Alle RDS Proxy-Metriken befinden sich in der Gruppe proxy.

Metrik Beschreibung Gültiger Zeitraum CloudWatch-Dimensionen

AvailabilityPercentage

Der Prozentsatz der Zeit, für die die Zielgruppe in der durch die Dimension angegebenen Rolle verfügbar war. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Average.

1 Minute ProxyName, TargetGroup, TargetRole
ClientConnections

Die aktuelle Anzahl von Clientverbindungen. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute

ProxyName
ClientConnectionsClosed

Die Anzahl der geschlossenen Clientverbindungen. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName

ClientConnectionsNoTLS

Die aktuelle Anzahl von Clientverbindungen ohne TLS (Transport Layer Security). Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum. 1 Minute und höher ProxyName

ClientConnectionsReceived

Die Anzahl der empfangenen Clientverbindungsanforderungen. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName
ClientConnectionsSetupFailedAuth

Die Anzahl der Clientverbindungsversuche, die aufgrund einer fehlerhaften Authentifizierungs- oder TLS-Konfiguration fehlgeschlagen sind. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName
ClientConnectionsSetupSucceeded

Die Anzahl der Clientverbindungen, die erfolgreich mit einem Authentifizierungsmechanismus mit oder ohne TLS hergestellt wurden. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName
ClientConnectionsTLS Die aktuelle Anzahl von Clientverbindungen mit TLS. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum. 1 Minute und höher ProxyName
DatabaseConnectionRequests

Die Anzahl der Anforderungen zum Erstellen einer Datenbankverbindung. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName, TargetGroup, Target

DatabaseConnectionRequestsWithTLS

Die Anzahl der Anforderungen zum Erstellen einer Datenbankverbindung mit TLS. Die nützlichste Statistik für diese Metrik ist Sum. 1 Minute und höher ProxyName, TargetGroup, Target
DatabaseConnections

Die aktuelle Anzahl von Datenbankverbindungen. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute

ProxyName, TargetGroup, Target

DatabaseConnectionsBorrowLatency

Die Zeit in Mikrosekunden, die der überwachte Proxy benötigt, um eine Datenbankverbindung zu erhalten. Die nützlichste Statistik für diese Metrik ist Average. 1 Minute und höher ProxyName
DatabaseConnectionsCurrentlyBorrowed

Die aktuelle Anzahl von Datenbankverbindungen im Ausleihstatus. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute

ProxyName, TargetGroup, Target
DatabaseConnectionsCurrentlyInTransaction

Die aktuelle Anzahl der Datenbankverbindungen in einer Transaktion. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute

ProxyName, TargetGroup, Target
DatabaseConnectionsCurrentlySessionPinned

Die aktuelle Anzahl von Datenbankverbindungen, die derzeit aufgrund von Operationen in Clientanforderungen, die den Sitzungsstatus ändern, angeheftet, bzw. fixiert, werden. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute

ProxyName, TargetGroup, Target
DatabaseConnectionsSetupFailed

Die Anzahl der fehlgeschlagenen Datenbankverbindungsanforderungen. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName, TargetGroup, Target
DatabaseConnectionsSetupSucceeded

Die Anzahl der erfolgreich aufgebauten Datenbankverbindungen mit oder ohne TLS. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName, TargetGroup, Target

DatabaseConnectionsWithTLS

Die aktuelle Anzahl von Datenbankverbindungen mit TLS. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum. 1 Minute ProxyName, TargetGroup, Target
MaxDatabaseConnectionsAllowed

Die maximal zulässige Anzahl von Datenbankverbindungen. Diese Metrik wird jede Minute gemeldet. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute

ProxyName, TargetGroup, Target

QueryDatabaseResponseLatency

Die Zeit in Mikrosekunden, die die Datenbank benötigt hat, um auf die Abfrage zu antworten. Die nützlichste Statistik für diese Metrik ist Average. 1 Minute und höher ProxyName, TargetGroup, Target
QueryRequests

Die Anzahl der empfangenen Abfragen. Eine Abfrage, die mehrere Anweisungen enthält, wird als eine Abfrage gezählt. Die nützlichste Statistik für diese Metrik ist Sum.

1 Minute und höher

ProxyName
QueryRequestsNoTLS Die Anzahl der Abfragen, die von Nicht-TLS-Verbindungen empfangen wurden. Eine Abfrage, die mehrere Anweisungen enthält, wird als eine Abfrage gezählt. Die nützlichste Statistik für diese Metrik ist Sum. 1 Minute und höher ProxyName

QueryRequestsTLS

Die Anzahl der Abfragen, die von TLS-Verbindungen empfangen wurden. Eine Abfrage, die mehrere Anweisungen enthält, wird als eine Abfrage gezählt. Die nützlichste Statistik für diese Metrik ist Sum. 1 Minute und höher ProxyName
QueryResponseLatency Die Zeit in Mikrosekunden zwischen dem Abrufen einer Abfrageanforderung und dem darauf antwortenden Proxy. Die nützlichste Statistik für diese Metrik ist Average. 1 Minute und höher ProxyName

Befehlszeilenbeispiele für RDS Proxy

Um zu sehen, wie Kombinationen von Verbindungsbefehlen und SQL-Anweisungen mit RDS Proxy interagieren, sehen Sie sich die folgenden Beispiele an.

Beispiel Beibehalten von Verbindungen zu einer MySQL-Datenbank über ein Failover

Dieses MySQL-Beispiel zeigt, wie offene Verbindungen während eines Failovers weiterhin funktionieren, z. B. wenn Sie eine Datenbank neu starten oder sie aufgrund eines Problems nicht verfügbar ist. In diesem Beispiel werden ein Proxy mit dem Namen the-proxy und ein Aurora-DB-Cluster mit den DB-Instances instance-8898 und instance-9814 verwendet. Wenn Sie den failover-db-cluster-Befehl über die Linux-Befehlszeile ausführen, wechselt die Schreiber-Instance, mit der der Proxy verbunden ist, zu einer anderen DB-Instance. Sie können sehen, dass sich die dem Proxy zugeordnete DB-Instance ändert, während die Verbindung geöffnet bleibt.

$ mysql -h the-proxy.proxy-demo.us-east-1.rds.amazonaws.com -u admin_user -p Enter password: ... mysql> select @@aurora_server_id; +--------------------+ | @@aurora_server_id | +--------------------+ | instance-9814 | +--------------------+ 1 row in set (0.01 sec) mysql> [1]+ Stopped mysql -h the-proxy.proxy-demo.us-east-1.rds.amazonaws.com -u admin_user -p $ # Initially, instance-9814 is the writer. $ aws rds failover-db-cluster --db-cluster-id cluster-56-2019-11-14-1399 JSON output $ # After a short time, the console shows that the failover operation is complete. $ # Now instance-8898 is the writer. $ fg mysql -h the-proxy.proxy-demo.us.us-east-1.rds.amazonaws.com -u admin_user -p mysql> select @@aurora_server_id; +--------------------+ | @@aurora_server_id | +--------------------+ | instance-8898 | +--------------------+ 1 row in set (0.01 sec) mysql> [1]+ Stopped mysql -h the-proxy.proxy-demo.us-east-1.rds.amazonaws.com -u admin_user -p $ aws rds failover-db-cluster --db-cluster-id cluster-56-2019-11-14-1399 JSON output $ # After a short time, the console shows that the failover operation is complete. $ # Now instance-9814 is the writer again. $ fg mysql -h the-proxy.proxy-demo.us-east-1.rds.amazonaws.com -u admin_user -p mysql> select @@aurora_server_id; +--------------------+ | @@aurora_server_id | +--------------------+ | instance-9814 | +--------------------+ 1 row in set (0.01 sec) +---------------+---------------+ | Variable_name | Value | +---------------+---------------+ | hostname | ip-10-1-3-178 | +---------------+---------------+ 1 row in set (0.02 sec)

Beispiel Anpassen der max_connections-Einstellung für einen Aurora-DB-Cluster

Dieses Beispiel zeigt, wie Sie die max_connections-Einstellung für einen Aurora MySQL-DB-Cluster anpassen können. Dazu erstellen Sie eine eigene DB-Cluster-Parametergruppe basierend auf den Standardparametereinstellungen für Cluster, die mit MySQL 5.6 oder 5.7 kompatibel sind. Sie geben einen Wert für die max_connections-Einstellung an und überschreiben die Formel, die den Standardwert festlegt. Sie ordnen die DB-Clusterparametergruppe Ihrem DB-Cluster zu.

export REGION=us-east-1 export CLUSTER_PARAM_GROUP=rds-proxy-mysql-56-max-connections-demo export CLUSTER_NAME=rds-proxy-mysql-56 aws rds create-db-parameter-group --region $REGION \ --db-parameter-group-family aurora5.6 \ --db-parameter-group-name $CLUSTER_PARAM_GROUP \ --description "Aurora MySQL 5.6 cluster parameter group for RDS Proxy demo." aws rds modify-db-cluster --region $REGION \ --db-cluster-identifier $CLUSTER_NAME \ --db-cluster-parameter-group-name $CLUSTER_PARAM_GROUP echo "New cluster param group is assigned to cluster:" aws rds describe-db-clusters --region $REGION \ --db-cluster-identifier $CLUSTER_NAME \ --query '*[*].{DBClusterParameterGroup:DBClusterParameterGroup}' echo "Current value for max_connections:" aws rds describe-db-cluster-parameters --region $REGION \ --db-cluster-parameter-group-name $CLUSTER_PARAM_GROUP \ --query '*[*].{ParameterName:ParameterName,ParameterValue:ParameterValue}' \ --output text | grep "^max_connections" echo -n "Enter number for max_connections setting: " read answer aws rds modify-db-cluster-parameter-group --region $REGION --db-cluster-parameter-group-name $CLUSTER_PARAM_GROUP \ --parameters "ParameterName=max_connections,ParameterValue=$$answer,ApplyMethod=immediate" echo "Updated value for max_connections:" aws rds describe-db-cluster-parameters --region $REGION \ --db-cluster-parameter-group-name $CLUSTER_PARAM_GROUP \ --query '*[*].{ParameterName:ParameterName,ParameterValue:ParameterValue}' \ --output text | grep "^max_connections"

Fehlersuche für RDS Proxy

Im Folgenden finden Sie Tipps zur Problembehandlung für einige häufige RDS Proxy-Probleme und Informationen zu CloudWatch-Protokollen für RDS Proxy.

Häufige Probleme und Lösungen

Mögliche Ursachen und Lösungen für einige häufig auftretende Probleme bei Verwendung von RDS Proxy finden Sie im Folgenden.

Beim Erstellen eines neuen Proxys oder beim Herstellen einer Verbindung mit einem Proxy können die folgenden Probleme auftreten.

Fehler Ursachen oder Problemumgehungen

403: The security token included in the request is invalid

Wählen Sie eine vorhandene IAM-Rolle aus, anstatt eine neue zu erstellen.

Beim Herstellen einer Verbindung mit einem MySQL-Proxy können die folgenden Probleme auftreten.

Fehler Ursachen oder Problemumgehungen
ERROR 1040 (HY000): Connections rate limit exceeded (limit_value) Die Rate der Verbindungsanforderungen vom Client zum Proxy hat den Grenzwert überschritten.
ERROR 1040 (HY000): IAM authentication rate limit exceeded Die Anzahl der gleichzeitigen Anforderungen mit IAM-Authentifizierung vom Client an den Proxy hat den Grenzwert überschritten.
ERROR 1040 (HY000): Number simultaneous connections exceeded (limit_value) Die Anzahl der gleichzeitigen Verbindungsanforderungen vom Client zum Proxy hat den Grenzwert überschritten.

ERROR 1045 (28000): Access denied for user 'DB_USER'@'%' (using password: YES)

Einige mögliche Gründe sind:

  • Das vom Proxy verwendete Secrets Manager-Geheimnis stimmt nicht mit dem Benutzernamen und dem Passwort eines vorhandenen Datenbankbenutzers überein. Aktualisieren Sie entweder die Anmeldeinformationen im Secrets Manager-Geheimnis oder stellen Sie sicher, dass der Datenbankbenutzer vorhanden ist und über das gleiche Passwort wie im Geheimnis verfügt.

ERROR 1105 (HY000): Unknown error Es ist ein unbekannter Fehler aufgetreten.
ERROR 1231 (42000): Variable ''character_set_client'' can't be set to the value of value

Der für den character_set_client-Parameter gesetzte Wert ist ungültig. Beispielsweise ist der Wert ucs2 ungültig, da er den MySQL-Server zum Absturz bringen kann.

ERROR 3159 (HY000): This RDS Proxy requires TLS connections.

Sie haben die Einstellung Beantragen der Sicherheit der Transportebene im Proxy aktiviert, aber Ihre Verbindung enthielt den Parameter ssl-mode=DISABLED im MySQL-Client. Führen Sie eine der folgenden Aufgaben aus:

  • Deaktivieren Sie die Einstellung Beantragen der Sicherheit der Transportebene.

  • Stellen Sie eine Verbindung mit der Datenbank mit der Mindesteinstellung ssl-mode=REQUIRED im MySQL-Client her.

ERROR 2026 (HY000): SSL connection error: Internal Server Error

Der TLS-Handshake an den Proxy ist fehlgeschlagen. Einige mögliche Gründe sind:

  • SSL ist erforderlich, aber der Server unterstützt dies nicht.

  • Es ist ein interner Serverfehler aufgetreten.

  • Es ist ein fehlerhafter Handshake aufgetreten.

ERROR 9501 (HY000): Timed-out waiting to acquire database connection

Auf dem Proxy ist beim Herstellen einer Datenbankverbindung eine Zeitüberschreitung aufgetreten. Einige mögliche Gründe sind:

  • Der Proxy kann keine Datenbankverbindung herstellen, da die maximale Anzahl an Verbindungen erreicht wurde.

  • Der Proxy kann keine Datenbankverbindung herstellen, da die Datenbank nicht verfügbar ist.

Beim Herstellen einer Verbindung mit einem PostgreSQL-Proxy können die folgenden Probleme auftreten.

Fehler Ursache Lösung

IAM authentication is allowed only with SSL connections.

Der Benutzer hat versucht, mithilfe der IAM-Authentifizierung mit der Einstellung sslmode=disable im PostgreSQL-Client eine Verbindung zur Datenbank herzustellen.

Der Benutzer muss eine Verbindung mit der Datenbank mit der Mindesteinstellung sslmode=require im PostgreSQL-Client herstellen. Weitere Informationen finden Sie in der PostgreSQL SSL Support-Dokumentation.

This RDS Proxy requires TLS connections.

Der Benutzer hat die Option Beantragen der Sicherheit der Transportebene aktiviert, hat aber versucht, auf dem PostgreSQL-Client eine Verbindung mit sslmode=disable herzustellen.

Führen Sie einen der folgenden Schritte aus, um diesen Fehler zu beheben:

  • Deaktivieren Sie die Option Beantragen der Sicherheit der Transportebene des Proxys.

  • Herstellen einer Verbindung mit der Datenbank mit der Mindesteinstellung sslmode=allow im PostgreSQL-Client.

IAM authentication failed for user user_name. Check the IAM token for this user and try again.

Dies kann folgende Ursachen haben:

  • Der Client hat den falschen IAM-Benutzernamen angegeben.

  • Der Client hat ein falsches IAM-Autorisierungstoken für den Benutzer angegeben.

  • Der Client verwendet eine IAM-Richtlinie, die nicht über die erforderlichen Berechtigungen verfügt.

  • Der Client hat ein abgelaufenes IAM-Autorisierungstoken für den Benutzer bereitgestellt.

Gehen Sie folgendermaßen vor, um diesen Fehler zu beheben:

  1. Bestätigen Sie, dass der bereitgestellte IAM-Benutzer vorhanden ist.

  2. Vergewissern Sie sich, dass das IAM-Autorisierungstoken dem bereitgestellten IAM-Benutzer gehört.

  3. Bestätigen Sie, dass die IAM-Richtlinie über ausreichende Berechtigungen für RDS verfügt.

  4. Überprüfen Sie die Gültigkeit des verwendeten IAM-Autorisierungstokens.

This RDS proxy has no credentials for the role role_name. Check the credentials for this role and try again.

Es gibt kein Secrets Manager-Secret für diese Rolle.

Fügen Sie ein Secrets Manager-Secret diese Rolle hinzu.

RDS supports only IAM or MD5 authentication.

Der Datenbankclient, der für die Verbindung mit dem Proxy verwendet wird, verwendet einen Authentifizierungsmechanismus, der derzeit vom Proxy nicht unterstützt wird, z. B. SCRAM-SHA-256.

Wenn Sie keine IAM-Authentifizierung verwenden, verwenden Sie nur die MD5-Passwortauthentifizierung.

A user name is missing from the connection startup packet. Provide a user name for this connection.

Der Datenbankclient, der zum Herstellen einer Verbindung mit dem Proxy verwendet wird, sendet beim Versuch, eine Verbindung herzustellen, keinen Benutzernamen.

Stellen Sie sicher, dass Sie beim Einrichten einer Verbindung zum Proxy mit dem PostgreSQL-Client Ihrer Wahl einen Benutzernamen definieren.

Feature not supported: RDS Proxy supports only version 3.0 of the PostgreSQL messaging protocol.

Der PostgreSQL-Client, mit dem eine Verbindung zum Proxy hergestellt wird, verwendet ein Protokoll, das älter als 3.0 ist.

Verwenden Sie einen neueren PostgreSQL-Client, der das 3.0-Messaging-Protokoll unterstützt. Wenn Sie die psql PostgreSQL-CLI verwenden, verwenden Sie Version 7.4 oder höher.

Feature not supported: RDS Proxy currently doesn't support streaming replication mode.

Der PostgreSQL-Client, der für die Verbindung mit dem Proxy verwendet wird, versucht, den Streaming-Replikationsmodus zu verwenden, der derzeit vom RDS-Proxy nicht unterstützt wird.

Deaktivieren Sie den Streaming-Replikationsmodus im PostgreSQL-Client, der für die Verbindung verwendet wird.

Feature not supported: RDS Proxy currently doesn't support the option option_name.

Über die Startmeldung fordert der PostgreSQL-Client, der für die Verbindung mit dem Proxy verwendet wird, eine Option an, die derzeit vom RDS-Proxy nicht unterstützt wird.

Deaktivieren Sie die Option, die in der obigen Nachricht als nicht unterstützt angezeigt wird, in dem PostgreSQL-Client, der für die Verbindung verwendet wird.

The IAM authentication failed because of too many competing requests.

Die Anzahl der gleichzeitigen Anforderungen mit IAM-Authentifizierung vom Client an den Proxy hat den Grenzwert überschritten.

Reduzieren Sie die Rate, mit der Verbindungen mit IAM-Authentifizierung von einem PostgreSQL-Client hergestellt werden.

The maximum number of client connections to the proxy exceeded number_value.

Die Anzahl der gleichzeitigen Verbindungsanforderungen vom Client zum Proxy hat den Grenzwert überschritten.

Reduzieren Sie die Anzahl der aktiven Verbindungen von PostgreSQL-Clients zu diesem RDS-Proxy.

Rate of connection to proxy exceeded number_value.

Die Rate der Verbindungsanforderungen vom Client zum Proxy hat den Grenzwert überschritten.

Reduzieren Sie die Rate, mit der Verbindungen von einem PostgreSQL-Client hergestellt werden.

The password that was provided for the role role_name is wrong.

Das Passwort für diese Rolle stimmt nicht mit dem Secrets Manager-Secret überein.

Überprüfen Sie den Schlüssel für diese Rolle in Secrets Manager, um festzustellen, ob das Passwort mit dem in Ihrem PostgreSQL-Client verwendeten Passwort übereinstimmt.

The IAM authentication failed for the role role_name. Check the IAM token for this role and try again.

Es gibt ein Problem mit dem IAM-Token, das für die IAM-Authentifizierung verwendet wird.

Generieren Sie ein neues Authentifizierungstoken und verwenden Sie es in einer neuen Verbindung.

IAM is allowed only with SSL connections.

Ein Client hat versucht, eine Verbindung über die IAM-Authentifizierung herzustellen, aber SSL war nicht aktiviert.

Aktivieren Sie SSL im PostgreSQL-Client.

Unknown error.

Es ist ein unbekannter Fehler aufgetreten.

Wenden Sie sich an den AWS Support, um das Problem zu untersuchen.

Timed-out waiting to acquire database connection.

Auf dem Proxy ist beim Herstellen einer Datenbankverbindung eine Zeitüberschreitung aufgetreten. Einige mögliche Gründe sind:

  • Der Proxy kann keine Datenbankverbindung herstellen, da die maximale Anzahl an Verbindungen erreicht wurde.

  • Der Proxy kann keine Datenbankverbindung herstellen, da die Datenbank nicht verfügbar ist.

Mögliche Lösungen sind:

  • Überprüfen Sie das Ziel der RDS-DB-Instance oder den Aurora-DB-Clusterstatus, um festzustellen, ob dies nicht verfügbar ist.

  • Prüfen Sie, ob lang andauernde Transaktionen und/oder Abfragen ausgeführt werden. Diese können Datenbankverbindungen aus dem Verbindungspool für eine lange Zeit belegen.

Request returned an error: database_error.

Die vom Proxy hergestellte Datenbankverbindung hat einen Fehler zurückgegeben.

Die Lösung hängt vom spezifischen Datenbankfehler ab. Ein Beispiel ist: Request returned an error: database "your-database-name" does not exist Dies bedeutet, dass der angegebene Datenbankname oder der als Datenbankname verwendete Benutzername (falls kein Datenbankname angegeben wurde) auf dem Datenbankserver nicht vorhanden ist.

Arbeiten mit CloudWatch-Protokollen für RDS Proxy

Sie können Protokolle der RDS Proxy-Aktivität unter CloudWatch in der AWS Management Console finden. Jeder Proxy hat einen Eintrag auf der Seite Log groups (Protokollgruppen) .

Wichtig

Diese Protokolle sind zur menschlichen Verwendung zur Fehlerbehebung und nicht für den programmatischen Zugriff bestimmt. Das Format und der Inhalt der Protokolle können geändert werden.

Überprüfen der Konnektivität für einen Proxy

Sie können die folgenden Befehle verwenden, um zu überprüfen, ob alle Komponenten des Verbindungsmechanismus mit den anderen Komponenten kommunizieren können.

Untersuchen Sie mit dem Befehl describe-db-proxies den Proxy selbst. Überprüfen Sie mithilfe von describe-db-proxy-target-groups auch die zugeordnete Zielgruppe. Überprüfen Sie, ob die Details der Ziele mit der RDS-DB-Instance oder dem Aurora-DB-Cluster übereinstimmen, die Sie dem Proxy zuordnen möchten. Verwenden Sie Befehle wie die folgenden.

aws rds describe-db-proxies --db-proxy-name $DB_PROXY_NAME aws rds describe-db-proxy-target-groups --db-proxy-name $DB_PROXY_NAME

Um zu bestätigen, dass der Proxy eine Verbindung mit der zugrunde liegenden Datenbank herstellen kann, überprüfen Sie mit dem Befehl describe-db-proxy-targets die in den Zielgruppen angegebenen Ziele. Verwenden Sie einen Befehl wie den folgenden.

aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

Die Ausgabe des Befehls describe-db-proxy-targets enthält ein TargetHealth-Feld. Sie können die Felder State, Reason und Description in TargetHealth überprüfen, um festzustellen, ob der Proxy mit der zugrunde liegenden DB-Instance kommunizieren kann.

  • Der Wert AVAILABLE für State gibt an, dass der Proxy eine Verbindung mit der DB-Instance herstellen kann.

  • Der Wert UNAVAILABLE für State weist auf ein temporäres oder dauerhaftes Verbindungsproblem hin. Überprüfen Sie in diesem Fall die Felder Reason und Description. Wenn beispielsweise der Reason den Wert PENDING_PROXY_CAPACITY hat, versuchen Sie erneut , eine Verbindung herzustellen, nachdem der Proxy seinen Skalierungsvorgang beendet hat. Wenn Reason den Wert UNREACHABLE, CONNECTION_FAILED oder AUTH_FAILURE hat, verwenden Sie die Erläuterung aus dem Feld Description, um das Problem leichter zu diagnostizieren.

  • Das Feld State hat möglicherweise für kurze Zeit einen Wert von REGISTERING, bevor Sie zu AVAILABLE oder UNAVAILABLE wechseln.

Wenn der folgende Netcat-Befehl (nc) erfolgreich ist, können Sie über die EC2-Instance oder ein anderes System, auf dem Sie angemeldet sind, auf den Proxy-Endpunkt zugreifen. Dieser Befehl meldet einen Fehler, wenn Sie sich nicht in derselben VPC wie der Proxy und die zugehörige Datenbank befinden. Möglicherweise können Sie sich direkt bei der Datenbank anmelden, ohne sich in derselben VPC zu befinden. Sie können sich jedoch nur am Proxy anmelden, wenn Sie sich in derselben VPC befinden.

nc -zx MySQL_proxy_endpoint 3306 nc -zx PostgreSQL_proxy_endpoint 5432

Sie können die folgenden Befehle verwenden, um sicherzustellen, dass Ihre EC2-Instance über die erforderlichen Eigenschaften verfügt. Insbesondere muss die VPC für die EC2-Instance mit der VPC für die RDS-DB-Instance oder den Aurora-DB-Cluster übereinstimmen, mit der der Proxy eine Verbindung herstellt.

aws ec2 describe-instances --instance-ids your_ec2_instance_id

Untersuchen Sie die für den Proxy verwendeten Secrets Manager-Secrets.

aws secretsmanager list-secrets aws secretsmanager get-secret-value --secret-id your_secret_id

Stellen Sie sicher, dass das von get-secret-value angezeigte SecretString-Feld als JSON-Zeichenfolge codiert ist, die die Felder username und password enthält. Das folgende Beispiel zeigt das Format des SecretString-Feldes.

{ "ARN": "some_arn", "Name": "some_name", "VersionId": "some_version_id", "SecretString": '{"username":"some_username","password":"some_password"}', "VersionStages": [ "some_stage" ], "CreatedDate": some_timestamp }

Verwenden von RDS Proxy mit AWS CloudFormation

Sie können RDS Proxy mit AWS CloudFormation verwenden. Dies unterstützt Sie beim Erstellen von Gruppen verwandter Ressourcen, einschließlich eines Proxys, der eine Verbindung mit einer neu erstellten Amazon RDS-DB-Instance oder einem neu erstellten Aurora-DB-Cluster herstellen kann. Die RDS Proxy-Unterstützung in AWS CloudFormation umfasst zwei neue Registrierungstypen: DBProxy und DBProxyTargetGroup.

Die folgende Auflistung zeigt eine AWS CloudFormation-Beispielvorlage für RDS Proxy.

Resources: DBProxy: Type: AWS::RDS::DBProxy Properties: DBProxyName: CanaryProxy EngineFamily: MYSQL RoleArn: Fn::ImportValue: SecretReaderRoleArn Auth: - {AuthScheme: SECRETS, SecretArn: !ImportValue ProxySecret, IAMAuth: DISABLED} VpcSubnetIds: Fn::Split: [",", "Fn::ImportValue": SubnetIds] ProxyTargetGroup: Type: AWS::RDS::DBProxyTargetGroup Properties: DbProxyName: CanaryProxy TargetGroupName: default InstanceIdentifiers: - Fn::ImportValue: DBInstanceName DependsOn: DBProxy

Weitere Informationen zu den Amazon RDS- und Aurora-Ressourcen, die Sie mit AWS CloudFormation erstellen können, finden Sie unter RDS-Ressourcentyp-Referenz.