Configurar o acesso ao banco de dados para uma função do Lambda - AWS Lambda

Configurar o acesso ao banco de dados para uma função do Lambda

É possível usar o console do Lambda para criar um proxy de banco de dados do Amazon RDS Proxy para sua função. Um proxy de banco de dados gerencia um grupo de conexões de banco de dados e retransmite consultas de uma função. Isso permite que uma função atinja altos níveis de simultaneidade sem esgotar conexões de banco de dados.

Como criar um proxy de banco de dados

  1. Abra a página Funções do console do Lambda.

  2. Escolha uma função.

  3. Escolha Add database proxy (Adicionar proxy de banco de dados).

  4. Configure as opções a seguir.

    • Identificador de proxy – o nome do proxy.

    • Instância de banco de dados do RDS – uma instância ou cluster de banco de dados MySQL ou PostgreSQL compatível.

    • Segredo – um Secrets Manager segredo com o nome de usuário e senha do banco de dados.

      exemplo segredo

      { "username": "admin", "password": "e2abcecxmpldc897" }
    • Função do IAM – uma função do IAM com permissão para usar o segredo e uma política de confiança que permite ao Amazon RDS assumir a função.

    • Autenticação – o método de autenticação e autorização para se conectar ao proxy do código da função.

  5. Escolha Add (Adicionar).

Definição de preços

O Amazon RDS cobra um preço por hora para proxies que é determinado pelo tamanho da instância do banco de dados. Para obter detalhes, consulte Definição de preço do proxy do RDS.

A criação do proxy leva alguns minutos. Quando o proxy estiver disponível, configure sua função para se conectar ao endpoint do proxy em vez do endpoint do banco de dados.

A definição de preço do Amazon RDS Proxy padrão é aplicada. Para obter mais informações, consulte Gerenciar conexões com o proxy do Amazon RDS no Guia do usuário do Amazon Aurora.

Usar as permissões da função para autenticação

Por padrão, é possível se conectar a um proxy com o mesmo nome de usuário e senha usado para se conectar ao banco de dados. A única diferença no código da função é o endpoint ao qual o cliente de banco de dados se conecta. A desvantagem desse método é que é necessário expor a senha ao código da função, configurando-a em uma variável de ambiente seguro ou recuperando-a do Secrets Manager.

É possível criar um proxy de banco de dados que usa as credenciais do IAM da função para autenticação e autorização, em vez de uma senha. Para usar as permissões da função para se conectar ao proxy, defina a Autenticação como Função de execução.

O console do Lambda adiciona a permissão necessária (rds-db:connect) à função de execução. Depois disso, é possível usar o AWS SDK para gerar um token que permite que ele se conecte ao proxy. O exemplo a seguir mostra como configurar uma conexão de banco de dados com a biblioteca mysql2 em Node.js.

exemplo dbadmin/index-iam.js – signer do AWS SDK

const signer = new AWS.RDS.Signer({ region: region, hostname: host, port: sqlport, username: username }) exports.handler = async (event) => { let connectionConfig = { host : host, user : username, database : database, ssl: 'Amazon RDS', authPlugins: { mysql_clear_password: () => () => signer.getAuthToken() } } var connection = mysql.createConnection(connectionConfig) var query = event.query var result connection.connect()

Para obter detalhes, consulte Autenticação de banco de dados do IAM no Guia do usuário da Amazon RDS.

Aplicativo de amostra

Aplicativos de exemplo que demonstram o uso do Lambda com um banco de dados Amazon RDS estão disponíveis no repositório do GitHub deste guia. Existem dois aplicativos:

  • RDS MySQL – o modelo do AWS CloudFormation template-vpcrds.yml cria um banco de dados MySQL 5.7 em uma VPC privada. No aplicativo de exemplo, uma função do Lambda usa um proxy para consultas ao banco de dados. Os modelos de função e banco de dados usam o Secrets Manager para acessar credenciais de banco de dados.

    
                The dbadmin function relays queries to a database.

  • Gerenciador de listas – uma função de processador lê eventos de um stream do Kinesis. Ele usa os dados dos eventos para atualizar tabelas do DynamoDB e armazena uma cópia do evento em um banco de dados MySQL.

    
                The processor function processes Kinesis events and stores the events in a
                  MySQL database.

Para usar os aplicativos de exemplo, siga as instruções no repositório do GitHub: RDS MySQL, Gerenciador de listas.