Conecte uma função do AWS Lambda disparada pelo API Gateway ao banco de dados Aurora Serverless MySQL

1

Eu tenho uma função do AWS Lambda que está sendo executada com êxito por meio de uma solicitação HTTP para um gateway de API. Ele retorna uma resposta JSON que posso ver no meu navegador da Web local.

Agora eu quero reunir dados de um banco de dados Aurora Serverless MySQL que eu configurei. Eu posso acessar esse banco de dados de um ambiente Cloud 9. Posso importar minha função do Lambda para o Cloud 9 e escolher "executar local" e conectar-se com êxito ao banco de dados e executar consultas SQL.

No entanto, quando executo a função Lambda do gateway da API, pymysql.connect falha, lançando um OperationalError com a mensagem "Não é possível conectar-se ao servidor MySQL em 'testdb.cluster-xxxxx.us-east-1.rds .amazonaws.com ".

Eu segui Tutorial: Configurando uma função do Lambda para acessar o Amazon RDS em um Amazon VPC e executou estas etapas:

  1. No console do IAM, crie uma função chamada lambda-vpc-role com permissões AWSLambdaVPCAccessExecutionRole.
  2. No console do Lambda para a função, defina a função de execução / função existente como lambda-vpc-role

Li Usando o Amazon Aurora Serverless , que afirma que "Você pode acessar um cluster do Aurora Serverless DB a partir do AWS Lambda "e direciona-me para Configurando uma função do Lambda para acessar recursos em um Amazon VPC . Depois disso, executei estas etapas:

  1. No console do Lambda para a função, na caixa Rede, defina o VPC como o VPC no qual o cluster Aurora Serverless está em execução.

Esse documento também declara: "Quando você adiciona a configuração do VPC a uma função do Lambda, ela só pode acessar recursos nesse VPC. Se uma função do Lambda precisar acessar os recursos do VPC e a Internet pública, o VPC precisa ter uma rede. Instância de conversão de endereços (NAT) dentro do VPC. " Portanto, eu leio Como posso conceder acesso à internet para minha função VPC Lambda? e executou estas etapas:

  1. No console VPC / Gateways NAT, crie um novo NAT Gateway em uma sub-rede pública existente, o que significa uma com uma tabela de rotas com uma rota padrão apontando para igw - *
  2. No Console / Tabelas de rotas do VPC, crie uma nova tabela de rotas com uma rota padrão apontando para o novo gateway NAT, nat - *
  3. No console / sub-redes do VPC, crie uma nova sub-rede privada associada à nova tabela de rotas, cuja rota padrão aponta para o gateway NAT.
  4. No console do Lambda para a função, na caixa Rede, defina as Sub-redes para conter apenas a nova sub-rede privada.

Agora acredito que minha função Lambda está sendo executada dentro da VPC e posso executá-la com êxito usando o gateway da API e ver sua resposta JSON. No entanto, ainda é incapaz de se conectar ao banco de dados MySQL.

Quais outras etapas são necessárias para permitir que a função do Lambda se conecte ao banco de dados?

    
por Rob Fisher 27.11.2018 / 20:07

1 resposta

0

O passo em falta é:

  1. No console / grupos de segurança do VPC, selecione o grupo rds-launch-wizard (o grupo de segurança criado quando o cluster Aurora Serverless foi criado), escolha a guia Regras de entrada e clique em editar. Adicione uma regra. Para o tipo, escolha MYSQL / Aurora (que seleciona a porta TCP 3306). Para origem, insira o CIDR para a sub-rede privada criada na etapa 6 e que a função Lambda está configurada para usar.

Como a função Lambda é executada em uma máquina em uma sub-rede diferente do cluster de banco de dados, embora esteja na mesma VPC, o grupo de segurança ainda precisa ser configurado para permitir a conexão de entrada com o banco de dados dessa origem. / p>

Acho que a pergunta e essa resposta agora fornecem as etapas completas para configurar uma função Lambda voltada ao público com acesso a um cluster de banco de dados Aurora Serverless, mas talvez outras respostas possam melhorar nessas instruções. Pode haver uma maneira mais concisa de descrever a configuração ou um método mais facilmente reproduzível, por exemplo, usando ferramentas de linha de comando em vez dos consoles da Web.

    
por 28.11.2018 / 01:03