

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
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

## Resumo
<a name="import-psycopg2-library-lambda-summary"></a>

O [Psycopg](https://www.psycopg.org/docs/) é 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html), o ambiente de runtime do Lambda é criado com base em uma [imagem de base destinada ao Lambda](https://github.com/aws/aws-lambda-base-images), 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](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html).
+ Implantar sua função do Lambda a partir de uma imagem de contêiner personalizada.
+ Criar uma [camada para o Lambda](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions) 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](#import-psycopg2-library-lambda-additional).

## Pré-requisitos e limitações
<a name="import-psycopg2-library-lambda-prereqs"></a>

**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](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte a página [Cotas e endpoints de serviços](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

**Versões do produto**
+ Versão do runtime do Python [compatível com o Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ Versão 2.9.3 do Psycopg2
+ Versão 1.5.2 do Pandas

## Arquitetura
<a name="import-psycopg2-library-lambda-architecture"></a>

**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](https://pypi.org/project/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
<a name="import-psycopg2-library-lambda-tools"></a>

**Serviços da AWS**
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) é 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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](https://www.docker.com/) é 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](https://pandas.pydata.org/) é uma ferramenta de código aberto baseada em Python para análise e manipulação de dados.
+ O [Psycopg](https://www.psycopg.org/docs/) é 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](https://www.python.org/) é 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](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) - - em. in-lambda-to-interact with-postgres-database GitHub

## Práticas recomendadas
<a name="import-psycopg2-library-lambda-best-practices"></a>

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](https://www.checkov.io/), que verifica as configurações da infraestrutura de nuvem para identificar falhas de configuração antes da implantação.

## Épicos
<a name="import-psycopg2-library-lambda-epics"></a>

### Clonagem do repositório e configuração da implantação
<a name="clone-the-repository-and-configure-the-deployment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clonar o repositório. | Para clonar o GitHub repositório em sua máquina local, execute os seguintes comandos:<pre>git clone https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database.git<br />cd AWS-lambda-psycopg2</pre> | AWS geral | 
| Configure sua implantação. | Edite o `app.py` arquivo com informações sobre Conta da AWS:<pre>aws_acccount = "AWS_ACCOUNT_ID"<br />region = "AWS_REGION"<br /># Select the CPU architecture you are using to build the image (ARM or X86)<br />architecture = "ARM"</pre> | AWS geral | 

### Inicialização da conta da AWS e implantação da aplicação
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize seu. Conta da AWS | Se você ainda não [inicializou seu ambiente AWS](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html), execute os seguintes comandos com as AWS credenciais da sua conta: AWS <pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | AWS geral | 
| Implante o código. | Para implantar o AWS CDK aplicativo, execute o seguinte comando:<pre>cdk deploy AWSLambdaPyscopg2</pre> | AWS geral | 

### Teste das funções do Lambda usando o Console de Gerenciamento da AWS
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| Tarefa | Description | Habilidades 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)O código a seguir mostra o Dockerfile que o AWS CDK modelo cria:<pre># Start from lambda Python3.13 image<br />FROM public.ecr.aws/lambda/python:3.13<br /><br /># Copy the lambda code, together with its requirements<br />COPY lambda/requirements.txt ${LAMBDA_TASK_ROOT}<br />COPY lambda/lambda_code.py ${LAMBDA_TASK_ROOT}<br /><br /># Install postgresql-devel in your image<br />RUN yum install -y gcc postgresql-devel<br /><br /># install the requirements for the Lambda code<br />RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"<br /><br /># Command can be overwritten by providing a different command in the template directly.<br />CMD ["lambda_code.handler"]</pre>O Dockerfile usa a imagem AWS Lambda fornecida para o tempo de execução do Python e instala o [postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/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
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK documentação](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda documentação](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## Mais informações
<a name="import-psycopg2-library-lambda-additional"></a>

Nesse padrão, o AWS CDK modelo fornece uma AWS pilha com três recursos:
+ Um [perfil do AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) 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.