Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwendung AWS Lambda mit Amazon Aurora DSQL
Das folgende Tutorial beschreibt, wie Lambda mit Aurora DSQL verwendet wird.
Voraussetzungen
-
Autorisierung zur Erstellung von Lambda-Funktionen. Weitere Informationen finden Sie unter Erste Schritte mit Lambda.
-
Autorisierung zum Erstellen oder Ändern der von Lambda erstellten IAM-Richtlinie. Sie benötigen zwei Berechtigungen
iam:CreatePolicy
und.iam:AttachRolePolicy
Weitere Informationen finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für IAM. -
Sie müssen npm v8.5.3 oder höher installiert haben.
-
Sie müssen Zip v3.0 oder höher installiert haben.
Erstellen Sie eine neue Funktion in AWS Lambda.
Melden Sie sich bei der an AWS Management Console und öffnen Sie die AWS Lambda Konsole unter https://console.aws.amazon.com/lambda/
. -
Wählen Sie Funktion erstellen.
-
Geben Sie einen Namen ein, z.
dsql-sample
B. -
Bearbeiten Sie die Standardeinstellungen nicht, um sicherzustellen, dass Lambda eine neue Rolle mit grundlegenden Lambda-Berechtigungen erstellt.
-
Wählen Sie Funktion erstellen.
Autorisieren Sie Ihre Lambda-Ausführungsrolle, um eine Verbindung zu Ihrem Cluster herzustellen
-
Wählen Sie in Ihrer Lambda-Funktion Konfiguration > Berechtigungen.
-
Wählen Sie den Rollennamen, um die Ausführungsrolle in der IAM-Konsole zu öffnen.
-
Wählen Sie „Berechtigungen hinzufügen“ > „Inline-Richtlinie erstellen“ und verwenden Sie den JSON-Editor.
-
Fügen Sie in Aktion die folgende Aktion ein, um Ihre IAM-Identität zu autorisieren, mithilfe der Admin-Datenbankrolle eine Verbindung herzustellen.
"Action": ["dsql:DbConnectAdmin"],
Anmerkung
Wir verwenden eine Administratorrolle, um die Anzahl der erforderlichen Schritte für den Einstieg zu minimieren. Sie sollten keine Administrator-Datenbankrolle für Ihre Produktionsanwendungen verwenden. Unter erfahren Verwenden von Datenbankrollen und IAM-Authentifizierung Sie, wie Sie benutzerdefinierte Datenbankrollen mit der Autorisierung erstellen, die über die wenigsten Berechtigungen für Ihre Datenbank verfügt.
-
Fügen Sie unter Ressource den Amazon-Ressourcennamen (ARN) Ihres Clusters hinzu. Sie können auch einen Platzhalter verwenden.
"Resource": ["*"]
-
Wählen Sie Weiter aus.
-
Geben Sie einen Namen für die Richtlinie ein, z. B.
dsql-sample-dbconnect
-
Wählen Sie Richtlinie erstellen aus.
Erstellen Sie ein Paket, das auf Lambda hochgeladen werden soll.
-
Erstellen Sie einen Ordner mit dem Namen
myfunction
. -
Erstellen Sie in dem Ordner eine neue Datei
package.json
mit dem folgenden Inhalt.{ "dependencies": { "@aws-sdk/dsql-signer": "^3.705.0", "assert": "2.1.0", "pg": "^8.13.1" } }
-
Erstellen Sie in dem Ordner eine Datei mit dem Namen
index.mjs
in dem Verzeichnis mit dem folgenden Inhalt.import { DsqlSigner } from "@aws-sdk/dsql-signer"; import pg from "pg"; import assert from "node:assert"; const { Client } = pg; async function dsql_sample(clusterEndpoint, region) { let client; try { // The token expiration time is optional, and the default value 900 seconds const signer = new DsqlSigner({ hostname: clusterEndpoint, region, }); const token = await signer.getDbConnectAdminAuthToken(); // <https://node-postgres.com/apis/client> // By default `rejectUnauthorized` is true in TLS options // <https://nodejs.org/api/tls.html#tls_tls_connect_options_callback> // The config does not offer any specific parameter to set sslmode to verify-full // Settings are controlled either via connection string or by setting // rejectUnauthorized to false in ssl options client = new Client({ host: clusterEndpoint, user: "admin", password: token, database: "postgres", port: 5432, // <https://node-postgres.com/announcements> for version 8.0 ssl: true, rejectUnauthorized: false }); // Connect await client.connect(); // Create a new table await client.query(`CREATE TABLE IF NOT EXISTS owner ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(30) NOT NULL, city VARCHAR(80) NOT NULL, telephone VARCHAR(20) )`); // Insert some data await client.query("INSERT INTO owner(name, city, telephone) VALUES($1, $2, $3)", ["John Doe", "Anytown", "555-555-1900"] ); // Check that data is inserted by reading it back const result = await client.query("SELECT id, city FROM owner where name='John Doe'"); assert.deepEqual(result.rows[0].city, "Anytown") assert.notEqual(result.rows[0].id, null) await client.query("DELETE FROM owner where name='John Doe'"); } catch (error) { console.error(error); throw new Error("Failed to connect to the database"); } finally { client?.end(); } Promise.resolve(); } // https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html export const handler = async (event) => { const endpoint = event.endpoint; const region = event.region; const responseCode = await dsql_sample(endpoint, region); const response = { statusCode: responseCode, endpoint: endpoint, }; return response; };
-
Verwenden Sie die folgenden Befehle, um ein Paket zu erstellen.
npm install zip -r pkg.zip .
Laden Sie das Codepaket hoch und testen Sie Ihre Lambda-Funktion
-
Wählen Sie auf der Registerkarte Code Ihrer Lambda-Funktion die Option Upload from > .zip-Datei
-
Laden Sie die von
pkg.zip
Ihnen erstellte Datei hoch. Weitere Informationen finden Sie unter Bereitstellen von Lambda-Funktionen von Node.js mit ZIP-Dateiarchiven. -
Fügen Sie auf der Registerkarte Test Ihrer Lambda-Funktion die folgende JSON-Payload ein und ändern Sie sie so, dass sie Ihre Cluster-ID verwendet.
-
Verwenden Sie auf der Registerkarte Test Ihrer Lambda-Funktion den folgenden Event-JSON, der geändert wurde, um den Endpunkt Ihres Clusters anzugeben.
{"endpoint": "replace_with_your_cluster_endpoint"}
-
Geben Sie einen Namen für das Ereignis ein, z. B.
dsql-sample-test
Wählen Sie Speichern. -
Wählen Sie Test aus.
-
Wählen Sie Details, um die Ausführungsantwort und die Protokollausgabe zu erweitern.
-
Wenn dies erfolgreich war, sollte die Antwort auf die Ausführung der Lambda-Funktion einen Statuscode 200 zurückgeben.
{"statusCode": 200, "endpoint": "your_cluster_endpoint"}
Wenn die Datenbank einen Fehler zurückgibt oder wenn die Verbindung zur Datenbank fehlschlägt, gibt die Antwort auf die Ausführung der Lambda-Funktion den Statuscode 500 zurück.
{"statusCode": 500,"endpoint": "your_cluster_endpoint"}