Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo AWS Lambda con Amazon Aurora DSQL
Il seguente tutorial descrive come usare Lambda con Aurora DSQL
Prerequisiti
-
Autorizzazione a creare funzioni Lambda. Per ulteriori informazioni, consulta Guida introduttiva a Lambda.
-
Autorizzazione a creare o modificare la policy IAM creata da Lambda. Sono necessarie autorizzazioni
iam:CreatePolicy
e.iam:AttachRolePolicy
Per ulteriori informazioni, consulta Azioni, risorse e chiavi di condizione per IAM. -
È necessario aver installato npm v8.5.3 o versione successiva.
-
Devi aver installato zip v3.0 o versione successiva.
Crea una nuova funzione in AWS Lambda.
Accedi a AWS Management Console e apri la AWS Lambda console all'indirizzo https://console.aws.amazon.com/lambda/
. -
Scegli Crea funzione.
-
Fornisci un nome, ad esempio
dsql-sample
. -
Non modificare le impostazioni predefinite per assicurarti che Lambda crei un nuovo ruolo con autorizzazioni Lambda di base.
-
Scegli Crea funzione.
Autorizza il tuo ruolo di esecuzione Lambda a connettersi al cluster
-
Nella tua funzione Lambda, scegli Configurazione > Autorizzazioni.
-
Scegli il nome del ruolo per aprire il ruolo di esecuzione nella console IAM.
-
Scegli Aggiungi autorizzazioni > Crea policy in linea e usa l'editor JSON.
-
In Action incolla la seguente azione per autorizzare la tua identità IAM a connettersi utilizzando il ruolo del database di amministrazione.
"Action": ["dsql:DbConnectAdmin"],
Nota
Stiamo utilizzando un ruolo di amministratore per ridurre al minimo i passaggi preliminari necessari per iniziare. Non dovresti usare un ruolo di amministratore del database per le tue applicazioni di produzione. Scopri come creare ruoli di database personalizzati con autorizzazione e con il minor numero di autorizzazioni per accedere al database. Utilizzo dei ruoli del database e dell'autenticazione IAM
-
In Resource, aggiungi l'Amazon Resource Name (ARN) del tuo cluster. Puoi anche usare un jolly.
"Resource": ["*"]
-
Scegli Next (Successivo).
-
Inserisci un nome per la politica, ad esempio
dsql-sample-dbconnect
. -
Scegliere Create Policy (Crea policy).
Crea un pacchetto da caricare su Lambda.
-
Crea una cartella denominata
myfunction
. -
Nella cartella, crea un nuovo file denominato
package.json
con il seguente contenuto.{ "dependencies": { "@aws-sdk/dsql-signer": "^3.705.0", "assert": "2.1.0", "pg": "^8.13.1" } }
-
Nella cartella, create un file denominato
index.mjs
nella directory con il seguente contenuto.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; };
-
Utilizzate i seguenti comandi per creare un pacchetto.
npm install zip -r pkg.zip .
Carica il pacchetto di codice e testa la tua funzione Lambda
-
Nella scheda Codice della funzione Lambda, scegli Carica da > .zip file
-
Carica il file che
pkg.zip
hai creato. Per ulteriori informazioni, consulta Distribuire le funzioni Lambda di Node.js con archivi di file.zip. -
Nella scheda Test della funzione Lambda, incolla il seguente payload JSON e modificalo per utilizzare l'ID del cluster.
-
Nella scheda Test della funzione Lambda, usa il seguente Event JSON modificato per specificare l'endpoint del cluster.
{"endpoint": "replace_with_your_cluster_endpoint"}
-
Inserisci il nome di un evento, ad esempio.
dsql-sample-test
Scegli Save (Salva). -
Scegli Test (Esegui test).
-
Scegliete Dettagli per espandere la risposta di esecuzione e l'output del registro.
-
Se ha avuto successo, la risposta di esecuzione della funzione Lambda dovrebbe restituire un codice di stato 200.
{"statusCode": 200, "endpoint": "your_cluster_endpoint"}
Se il database restituisce un errore o se la connessione al database fallisce, la risposta di esecuzione della funzione Lambda restituisce un codice di stato 500.
{"statusCode": 500,"endpoint": "your_cluster_endpoint"}