O Amazon Aurora DSQL é fornecido como um serviço em versão prévia. Para saber mais, consulte Versões beta e pré-visualizações
Usar o AWS Lambda com o Amazon Aurora DSQL
O tutorial a seguir descreve como usar o Lambda com o Aurora DSQL.
Pré-requisitos
-
Autorização para criar funções do Lambda. Para ter mais informações, consulte Criar sua primeira função do Lambda.
-
Autorização para criar ou modificar a política do IAM criada pelo Lambda. Você precisa das permissões
iam:CreatePolicy
eiam:AttachRolePolicy
. Para ter mais informações, consulte Actions, resources, and condition keys for IAM. -
Você deve ter instalado o npm v8.5.3 ou posterior.
-
Você deve ter instalado o npm v3.0 ou posterior.
Crie uma função no AWS Lambda.
Faça login no AWS Management Console e abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Escolha a opção Criar função.
-
Forneça um nome, como
dsql-sample
. -
Não edite as configurações padrão para garantir que o Lambda crie uma função com permissões básicas do Lambda.
-
Escolha a opção Criar função.
Autorize sua função de execução do Lambda a se conectar ao seu cluster.
-
Em sua função do Lambda, escolha Configuração > Permissões.
-
Escolha o nome do perfil para abrir o perfil de execução no console do IAM.
-
Escolha Adicionar permissões > Criar política em linha.
-
Em Ação, cole a ação a seguir para autorizar a identidade do IAM a se conectar usando o perfil de administrador do banco de dados.
"Action": ["dsql:DbConnectAdmin"],
nota
Estamos usando um perfil de administrador para minimizar as etapas necessárias para começar. Você não deve usar um perfil de administrador de banco de dados para suas aplicações de produção. Consulte Usar perfis de banco de dados com perfis do IAM para saber como criar perfis de banco de dados personalizados com autorização que tenha o menor número de permissões para o banco de dados.
-
Em Recurso, adicione o nome do recurso da Amazon (ARN) do cluster. Você também pode usar caracteres curinga.
"Resource": ["*"]
-
Escolha Próximo.
-
Insira um nome para a política, como
dsql-sample-dbconnect
. -
Escolha Criar política.
Crie um pacote para fazer upload no Lambda.
-
Crie uma pasta denominada
myfunction
. -
Na pasta, crie um arquivo denominado
package.json
com o conteúdo a seguir.{ "dependencies": { "@aws-sdk/dsql-signer": "^3.705.0", "assert": "2.1.0", "pg": "^8.13.1" } }
-
Na pasta, crie um arquivo denominado
index.mjs
no diretório com o conteúdo a seguir.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; };
-
Use os comandos a seguir para criar um pacote.
npm install zip -r pkg.zip .
Faça upload do pacote de código e teste a função do Lambda.
-
Na guia Código da função do Lambda, escolha Fazer upload de > arquivo .zip.
-
Faça o upload do
pkg.zip
que você criou. Para ter mais informações, consulte Implantar funções do Lambda em Node.js com arquivos .zip. -
Na guia Teste da função do Lambda, cole a carga útil JSON a seguir e modifique-a para usar o ID do seu cluster.
-
Na guia Teste da função do Lambda, use o evento JSON modificado a seguir para especificar o endpoint do seu cluster.
{"endpoint": "replace_with_your_cluster_endpoint"}
-
Insira um nome de evento, como
dsql-sample-test
. Escolha Salvar. -
Escolha Test (Testar).
-
Escolha Detalhes para expandir a resposta de execução e a saída do log.
-
Se bem-sucedida, a resposta da execução da função do Lambda deverá exibir um código de status 200:
{statusCode": 200, "endpoint": "your_cluster_endpoint"}
Se o banco de dados exibir um erro ou se a conexão com o banco de dados falhar, a resposta de execução da função do Lambda exibirá um código de status 500.
{"statusCode": 500,"endpoint": "your_cluster_endpoint"}