AWS Lambda
Guia do desenvolvedor

Tutorial: configuração de uma função do Lambda para acessar o Amazon RDS em uma Amazon VPC

Neste tutorial, você faz o seguinte:

  • Inicie uma instância do mecanismo de banco de dados MySQL do Amazon RDS na Amazon VPC padrão. Na instância MySQL, crie um banco de dados (ExampleDB) com uma tabela de amostra (Funcionários). Para obter mais informações sobre o Amazon RDS, consulte Amazon RDS.

  • Crie uma função do Lambda para acessar o banco de dados ExampleDB, crie uma tabela (Funcionários), adicione alguns registros e recupere-os da tabela.

  • Invoque a função do Lambda e verifique os resultados da consulta. É assim que você verifica se a função do Lambda foi capaz de acessar a instância MySQL do RDS na VPC.

Para obter detalhes sobre como usar o Lambda com a Amazon VPC, consulte Configurar uma função Lambda para acessar recursos em uma VPC.

Pré-requisitos

Este tutorial pressupõe que você tenha algum conhecimento das operações básicas do Lambda e do console do Lambda. Caso ainda não tenha feito isso, siga as instruções em Conceitos básicos do AWS Lambda para criar sua primeira função do Lambda.

Para seguir os procedimentos neste manual, você precisa de um terminal de linha de comando ou de um shell para executar os comandos. Nas listagens, os comandos são mostrados precedidos por um símbolo de prompt ($) e pelo nome do diretório atual, quando apropriado:

~/lambda-project$ this is a command this is output

Para comandos longos, um caractere de escape (\) é usado para dividir um comando em várias linhas.

No Linux e no macOS, use seu gerenciador preferido de pacotes e de shell. No Windows 10, você pode instalar o Subsistema Windows para Linux para obter uma versão do Ubuntu integrada com o Windows e o Bash.

Criar a função de execução

Crie a função de execução que dá à sua função permissão para acessar recursos do AWS.

Para criar uma função de execução

  1. Abra a página Roles no console do IAM.

  2. Selecione Create role.

  3. Crie uma função com as seguintes propriedades.

    • Entidade confiável – Lambda.

    • PermissõesAWSLambdaVPCAccessExecutionRole.

    • Nome da funçãolambda-vpc-role.

A AWSLambdaVPCAccessExecutionRole tem as permissões que a função precisa para gerenciar conexões de rede com uma VPC.

Criar uma instância de Banco de Dados do Amazon RDS

Neste tutorial, a função do Lambda de exemplo cria uma tabela (Funcionários), insere alguns registros e, em seguida, os recupera. A tabela que a função do Lambda cria tem o seguinte esquema:

Employee(EmpID, Name)

O EmpID é a chave primária. Agora, você precisa adicionar alguns registros a essa tabela.

Primeiro, inicie uma instância MySQL do RDS na VPC padrão com o banco de dados ExampleDB. Se você já tem uma instância MySQL do RDS em execução na sua VPC padrão, ignore essa etapa.

Você pode iniciar uma instância MySQL do RDS usando um dos seguintes métodos:

Anote o nome do banco de dados, o nome do usuário e a senha. Você também precisa do endereço do host (endpoint) da instância de Banco de Dados, que pode obter do console do RDS. Pode ser necessário aguardar até que o status da instância esteja disponível e o valor do endpoint seja exibido no console.

Criar um pacote de implantação

O código em Python de exemplo a seguir executa uma consulta SELECT para a tabela Funcionários na instância MySQL do RDS que você criou na VPC. O código cria uma tabela no banco de dados ExampleDB, adiciona registros de amostra e recupera esse registros.

exemplo app.py

import sys import logging import rds_config import pymysql #rds settings rds_host = "rds-instance-endpoint" name = rds_config.db_username password = rds_config.db_password db_name = rds_config.db_name logger = logging.getLogger() logger.setLevel(logging.INFO) try: conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5) except pymysql.MySQLError as e: logger.error("ERROR: Unexpected error: Could not connect to MySQL instance.") logger.error(e) sys.exit() logger.info("SUCCESS: Connection to RDS MySQL instance succeeded") def handler(event, context): """ This function fetches content from MySQL RDS instance """ item_count = 0 with conn.cursor() as cur: cur.execute("create table Employee ( EmpID int NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (EmpID))") cur.execute('insert into Employee (EmpID, Name) values(1, "Joe")') cur.execute('insert into Employee (EmpID, Name) values(2, "Bob")') cur.execute('insert into Employee (EmpID, Name) values(3, "Mary")') conn.commit() cur.execute("select * from Employee") for row in cur: item_count += 1 logger.info(row) #print(row) conn.commit() return "Added %d items from RDS MySQL table" %(item_count)

A execução de pymysql.connect() fora do manipulador permite que sua função reutilize a conexão com o banco de dados para proporcionar uma melhor performance.

Um segundo arquivo contém informações de conexão para a função.

exemplo rds_config.py

#config file containing credentials for RDS MySQL instance db_username = "username" db_password = "password" db_name = "ExampleDB"

Dependências

  • pymysql – O código da função do Lambda usa essa biblioteca para acessar a instância MySQL (consulte PyMySQL).

Instale dependências com o Pip e crie um pacote de implantação. Para obter instruções, consulte Pacote de implantação do AWS Lambda no Python.

Criar a função do Lambda

Crie a função do Lambda com o comando create-function. Você pode encontrar os IDs de sub-rede e o ID do grupo de segurança da VPC padrão no console do Amazon VPC.

$ aws lambda create-function --function-name CreateTableAddRecordsAndRead --runtime python3.8 \ --zip-file fileb://app.zip --handler app.handler \ --role arn:aws:iam::123456789012:role/lambda-vpc-role \ --vpc-config SubnetIds=subnet-0532bb6758ce7c71f,subnet-d6b7fda068036e11f,SecurityGroupIds=sg-0897d5f549934c2fb

Testar a função do Lambda

Nesta etapa, você invoca a função do Lambda manualmente usando o comando invoke. Quando a função do Lambda for executada, ela executa a consulta SELECT para a tabela Funcionários na instância MySQL do RDS e imprime os resultados, que também vão para o CloudWatch Logs.

  1. Invoque a função do Lambda com o comando invoke.

    $ aws lambda invoke --function-name CreateTableAddRecordsAndRead output.txt
  2. Verifique se a função Lambda foi executada com êxito, da seguinte forma:

    • Analise o arquivo output.txt.

    • Analisar os resultados no console do AWS Lambda.

    • Verifique os resultados no CloudWatch Logs.

Agora que você criou uma função do Lambda que acessa um banco de dados na sua VPC, a função já poderá ser invocada em resposta a eventos. Para obter informações sobre como configurar fontes de eventos e exemplos, consulte Usar o AWS Lambda com outros serviços.