Utilisation AWS Lambda avec Amazon Aurora DSQL - Amazon Aurora DSQL

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation AWS Lambda avec Amazon Aurora DSQL

Le didacticiel suivant explique comment utiliser Lambda avec Aurora DSQL

Prérequis

  • Autorisation de créer des fonctions Lambda. Pour plus d'informations, consultez Getting started with Lambda.

  • Autorisation de créer ou de modifier la politique IAM créée par Lambda. Vous avez besoin d'autorisations iam:CreatePolicy etiam:AttachRolePolicy. Pour plus d'informations, consultez la section Actions, ressources et clés de condition pour IAM.

  • Vous devez avoir installé npm v8.5.3 ou supérieur.

  • Vous devez avoir installé zip v3.0 ou supérieur.

Créez une nouvelle fonction dans AWS Lambda.
  1. Connectez-vous à la AWS Lambda console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/lambda/.

  2. Choisissez Créer une fonction.

  3. Entrez un nom, tel quedsql-sample.

  4. Ne modifiez pas les paramètres par défaut pour vous assurer que Lambda crée un nouveau rôle avec des autorisations Lambda de base.

  5. Choisissez Créer une fonction.

Autorisez votre rôle d'exécution Lambda à se connecter à votre cluster
  1. Dans votre fonction Lambda, choisissez Configuration > Autorisations.

  2. Choisissez le nom du rôle pour ouvrir le rôle d'exécution dans la console IAM.

  3. Choisissez Ajouter des autorisations > Créer une politique intégrée, puis utilisez l'éditeur JSON.

  4. Dans Action, collez l'action suivante pour autoriser votre identité IAM à vous connecter à l'aide du rôle de base de données d'administrateur.

    "Action": ["dsql:DbConnectAdmin"],
    Note

    Nous utilisons un rôle d'administrateur afin de minimiser les étapes préalables au démarrage. Vous ne devez pas utiliser de rôle d'administrateur de base de données pour vos applications de production. Consultez Utilisation des rôles de base de données et de l'authentification IAM pour savoir comment créer des rôles de base de données personnalisés avec l'autorisation qui dispose du moins d'autorisations sur votre base de données.

  5. Dans Resource, ajoutez le nom de ressource Amazon (ARN) de votre cluster. Vous pouvez également utiliser un joker.

    "Resource": ["*"]
  6. Choisissez Suivant.

  7. Entrez un nom pour la politique, par exempledsql-sample-dbconnect.

  8. Choisissez Create Policy (Créer une politique).

Créez un package à télécharger sur Lambda.
  1. Créez un dossier nommémyfunction.

  2. Dans le dossier, créez un nouveau fichier dont le nom package.json est le suivant.

    { "dependencies": { "@aws-sdk/dsql-signer": "^3.705.0", "assert": "2.1.0", "pg": "^8.13.1" } }
  3. Dans le dossier, créez un fichier nommé index.mjs dans le répertoire avec le contenu suivant.

    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; };
  4. Utilisez les commandes suivantes pour créer un package.

    npm install zip -r pkg.zip .
Téléchargez le package de code et testez votre fonction Lambda
  1. Dans l'onglet Code de votre fonction Lambda, choisissez Upload from > .zip

  2. Téléchargez le fichier pkg.zip que vous avez créé. Pour plus d'informations, voir Déployer les fonctions Lambda de Node.js avec des archives de fichiers .zip.

  3. Dans l'onglet Test de votre fonction Lambda, collez la charge utile JSON suivante et modifiez-la pour utiliser votre ID de cluster.

  4. Dans l'onglet Test de votre fonction Lambda, utilisez le JSON d'événement modifié suivant pour spécifier le point de terminaison de votre cluster.

    {"endpoint": "replace_with_your_cluster_endpoint"}
  5. Entrez un nom d'événement, tel quedsql-sample-test. Choisissez Enregistrer.

  6. Sélectionnez Tester).

  7. Choisissez Détails pour développer la réponse d'exécution et la sortie du journal.

  8. En cas de succès, la réponse d'exécution de la fonction Lambda doit renvoyer un code d'état 200.

    {"statusCode": 200, "endpoint": "your_cluster_endpoint"}

    Si la base de données renvoie une erreur ou si la connexion à la base de données échoue, la réponse d'exécution de la fonction Lambda renvoie un code d'état 500.

    {"statusCode": 500,"endpoint": "your_cluster_endpoint"}