Importe a biblioteca psycopg2 para interagir com seu banco AWS Lambda de dados PostgreSQL - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Importe a biblioteca psycopg2 para interagir com seu banco AWS Lambda de dados PostgreSQL

Louis Hourcade, Amazon Web Services

Resumo

O Psycopg é um adaptador de banco de dados do PostgreSQL para Python. Os desenvolvedores empregram a biblioteca psycopg2 para gravar aplicações em Python que interagem com bancos de dados do PostgreSQL.

Na Amazon Web Services (AWS), os desenvolvedores também usam o AWS Lambda para executar código em aplicações ou em serviços de backend. O Lambda é um serviço de computação orientado a eventos e com tecnologia sem servidor que executa código sem a necessidade de provisionar ou gerenciar servidores.

Por padrão, quando você cria uma nova função que utiliza um runtime do Python com suporte por parte do Lambda, o ambiente de runtime do Lambda é criado com base em uma imagem de base destinada ao Lambda, que é fornecida pela AWS. Bibliotecas, como pandas ou psycopg2, não estão incluídas na imagem de base. Para usar uma biblioteca, é necessário empacotá-la em um pacote personalizado e anexá-la ao Lambda.

Existem várias formas de empacotar e anexar uma biblioteca, incluindo:

  • Implantar sua função do Lambda a partir de um arquivo .zip.

  • Implantar sua função do Lambda a partir de uma imagem de contêiner personalizada.

  • Criar uma camada para o Lambda e anexá-la à sua função do Lambda.

Esse padrão demonstra as duas primeiras opções.

Com um pacote de implantação em .zip, adicionar a biblioteca pandas à sua função do Lambda é relativamente simples. Crie uma pasta em sua máquina do Linux, adicione o script do Lambda juntamente com a biblioteca pandas e as respectivas dependências à pasta, realize a compactação da pasta em um arquivo .zip e forneça-o como origem para a função do Lambda.

Embora usar um pacote de implantação em .zip seja uma prática comum, essa abordagem não funciona para a biblioteca psycopg2. Primeiro, este padrão apresenta o erro que ocorre se você tentar adicionar a biblioteca psycopg2 à sua função do Lambda usando um pacote de implantação em .zip. Em seguida, o padrão demonstra como implantar o Lambda usando um Dockerfile e editar a imagem do Lambda para que a biblioteca psycopg2 funcione corretamente.

Para obter informações sobre os três recursos que o padrão implanta, consulte a seção Informações adicionais.

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS com permissões suficientes para implantar os AWS recursos usados por esse padrão

  • AWS Cloud Development Kit (AWS CDK) instalado globalmente executando npm install -g aws-cdk

  • Um cliente do Git

  • Python

  • Docker

Limitações

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte Serviços da AWS by Region. Para endpoints específicos, consulte a página Cotas e endpoints de serviços e clique no link correspondente ao serviço desejado.

Versões do produto

Arquitetura

Visão geral da solução

Para ilustrar os desafios que você pode enfrentar ao usar a biblioteca psycopg2 no Lambda, o padrão implanta duas funções do Lambda:

  • Uma função do Lambda com runtime do Python criada com base em um arquivo .zip. As bibliotecas psycopg2 e pandas são instaladas nesse pacote de implantação .zip usando pip.

  • Uma função do Lambda com runtime do Python criada com base em um Dockerfile. O Dockerfile instala as bibliotecas psycopg2 e pandas na imagem de contêiner do Lambda.

A primeira função do Lambda instala a biblioteca pandas e as respectivas dependências em um arquivo .zip, e o Lambda pode usar essa biblioteca.

A segunda função do Lambda demonstra que, ao criar uma imagem de contêiner para a função do Lambda, você pode executar as bibliotecas pandas e psycopg2 no Lambda.

Ferramentas

Serviços da AWS

  • O AWS Cloud Development Kit (AWS CDK) é uma estrutura de desenvolvimento de software que ajuda a definir e a provisionar a infraestrutura da Nuvem AWS por meio de código.

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

Outras ferramentas

  • O Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.

  • O pandas é uma ferramenta de código aberto baseada em Python para análise e manipulação de dados.

  • O Psycopg é um adaptador de banco de dados do PostgreSQL para a linguagem Python, projetado para aplicações que usam várias threads. Este padrão usa o Psycopg 2.

  • Python é uma linguagem de programação de computador de uso geral.

Repositório de código

O código desse padrão está disponível no repositório import-psycopg2 - - em. in-lambda-to-interact with-postgres-database GitHub

Práticas recomendadas

Esse padrão fornece um exemplo prático de uso AWS CDK para criar uma função Lambda a partir de um Dockerfile. Se você reutilizar esse código em sua aplicação, certifique-se de que os recursos implantados atendam a todos os requisitos de segurança. Empregue ferramentas como o Checkov, que verifica as configurações da infraestrutura de nuvem para identificar falhas de configuração antes da implantação.

Épicos

TarefaDescriptionHabilidades necessárias

Clonar o repositório.

Para clonar o GitHub repositório em sua máquina local, execute os seguintes comandos:

git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git cd AWS-lambda-psycopg2
AWS geral

Configure sua implantação.

Edite o app.py arquivo com informações sobre Conta da AWS:

aws_acccount = "AWS_ACCOUNT_ID" region = "AWS_REGION" # Select the CPU architecture you are using to build the image (ARM or X86) architecture = "ARM"
AWS geral
TarefaDescriptionHabilidades necessárias

Inicialize seu. Conta da AWS

Se você ainda não inicializou seu ambiente AWS, execute os seguintes comandos com as AWS credenciais da sua conta: AWS

cdk bootstrap aws://<tooling-account-id>/<aws-region>
AWS geral

Implante o código.

Para implantar o AWS CDK aplicativo, execute o seguinte comando:

cdk deploy AWSLambdaPyscopg2
AWS geral
TarefaDescriptionHabilidades necessárias

Teste a função do Lambda criada usando o arquivo .zip.

Para testar a função do Lambda criada usando o arquivo .zip, execute as seguintes etapas:

  1. Faça login no console e abra o console Lambda em. https://console.aws.amazon.com/lambda/

  2. Selecione a função do Lambda lambda-from-zip.

  3. Crie um evento de teste para invocar a função.

  4. Quando invocada, a função deve gerar um erro com a seguinte mensagem:

    "errorMessage": Unable to import module 'lambda_code': libpq.so.5: cannot open shared object, "stackTrace": [] "errorType": Runtime.ImportModuleError",
  5. Abra o CloudWatch console da Amazon em https://console.aws.amazon.com/cloudwatch/. Os CloudWatch registros mostram que a pandas biblioteca foi importada com sucesso, mas que a importação da psycopg2 biblioteca falhou.

Como o Lambda não encontra as bibliotecas do PostgreSQL necessárias na imagem padrão, ele não consegue usar a biblioteca psycopg2.

AWS geral

Teste a função do Lambda criada usando o Dockerfile.

Para usar a biblioteca psycopg2 em sua função do Lambda, é necessário editar a imagem de máquina da Amazon (AMI) do Lambda.

Para testar a função do Lambda criada usando o Dockerfile, execute as seguintes etapas:

  1. Faça login no console e abra o console do Lambda.

  2. Selecione a função do Lambda lambda-from-docker.

  3. Crie um evento de teste para invocar a função.

  4. Ao ser invocada, a função deverá ser executada com êxito.

O código a seguir mostra o Dockerfile que o AWS CDK modelo cria:

# Start from lambda Python3.13 image FROM public.ecr.aws/lambda/python:3.13 # Copy the lambda code, together with its requirements COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT} COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT} # Install postgresql-devel in your image RUN yum install -y gcc postgresql-devel # install the requirements for the Lambda code RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # Command can be overwritten by providing a different command in the template directly. CMD ["lambda_code.handler"]

O Dockerfile usa a imagem AWS Lambda fornecida para o tempo de execução do Python e instala o postgresql-devel, que contém as bibliotecas necessárias para compilar aplicativos que interagem diretamente com o servidor de gerenciamento do PostgreSQL. O Dockerfile também instala as bibliotecas pandas e psycopg2, conforme indicado no arquivo requirements.txt.

AWS geral

Recursos relacionados

Mais informações

Nesse padrão, o AWS CDK modelo fornece uma AWS pilha com três recursos:

  • Um perfil do AWS Identity and Access Management (IAM) para as funções do Lambda.

  • Uma função do Lambda com um runtime do Python. A função é implantada usando o pacote de implantação Constructs/lambda/lambda_deploy.zip.

  • Uma função do Lambda com um runtime do Python. A função é implantada usando o Dockerfile presente na pasta Constructs.

O script de ambas as funções do Lambda verifica se as bibliotecas pandas e psycopg2 foram importadas com êxito:

import pandas print("pandas successfully imported") import psycopg2 print("psycopg2 successfully imported") def handler(event, context): """Function that checks whether psycopg2 and pandas are successfully imported or not""" return {"Status": "psycopg2 and pandas successfully imported"}

O pacote de implantação lambda_deploy.zip é desenvolvido com o script bash Constructs/lambda/build.sh. Esse script cria uma pasta, copia o script do Lambda, instala as bibliotecas pandas e psycopg2, e gera o arquivo .zip. Para gerar você mesmo o arquivo.zip, execute esse script bash e reimplante a pilha. AWS CDK

O Dockerfile começa com a imagem base AWS fornecida para o Lambda com um tempo de execução do Python. O Dockerfile instala as bibliotecas pandas e psycopg2 na imagem padrão.