

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# PostgreSQL 데이터베이스와 상호 작용 AWS Lambda 하기 위해 로 psycopg2 라이브러리 가져오기
<a name="import-psycopg2-library-lambda"></a>

*Louis Hourcade, Amazon Web Services*

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

[Psycopg](https://www.psycopg.org/docs/)는 Python용 PostgresSQL 데이터베이스 어댑터입니다. 개발자는 `psycopg2` 라이브러리를 사용하여 PostgreSQL 데이터베이스와 상호 작용하는 Python 애플리케이션을 작성합니다.

Amazon Web Services(AWS)에서 개발자는 [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)를 사용하여 애플리케이션 또는 백엔드 서비스에 대한 코드를 실행합니다. Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 서버리스 이벤트 기반 컴퓨팅 서비스입니다.

기본적으로 [Lambda에서 지원하는 Python 런타임](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)을 사용하는 새 함수를 생성하면에서 제공하는 Lambda[용 기본 이미지에서 Lambda](https://github.com/aws/aws-lambda-base-images) 런타임 환경이 생성됩니다 AWS. `pandas` 또는와 같은 라이브러리`psycopg2`는 기본 이미지에 포함되지 않습니다. 라이브러리를 사용하려면 사용자 지정 패키지에 번들링하여 Lambda에 연결해야 합니다.

라이브러리를 번들링하고 연결하는 방법은 다음과 같이 여러 가지가 있습니다.
+ [.zip 파일 아카이브](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html)에서 Lambda 함수를 배포합니다.
+ 사용자 지정 컨테이너 이미지에서 Lambda 함수를 배포합니다.
+ [Lambda 계층](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html#lambda-layer-versions)을 생성하여 Lambda 함수에 연결합니다.

이 패턴은 처음 두 가지 옵션을 보여줍니다.

.zip 배포 패키지를 사용하면 `pandas` 라이브러리를 Lambda 함수에 추가하는 것이 비교적 간단합니다. Linux 시스템에서 폴더를 생성하고, `pandas` 라이브러리 및 라이브러리의 종속성과 함께 Lambda 스크립트를 폴더에 추가하고, 폴더를 압축하고, Lambda 함수의 소스로 제공합니다.

.zip 배포 패키지를 사용하는 것은 일반적인 방법이지만 `psycopg2` 라이브러리에서는 이러한 접근 방식이 작동하지 않습니다. 이 패턴은 먼저 .zip 배포 패키지를 사용하여 `psycopg2` 라이브러리를 Lambda 함수에 추가하는 경우 발생하는 오류를 보여줍니다. 그런 다음이 패턴은 Dockerfile에서 Lambda를 배포하고 `psycopg2` 라이브러리가 작동하도록 Lambda 이미지를 편집하는 방법을 보여줍니다.

패턴이 배포하는 세 가지 리소스에 대한 자세한 내용은 [추가 정보](#import-psycopg2-library-lambda-additional) 섹션을 참조하세요.

## 사전 조건 및 제한 사항
<a name="import-psycopg2-library-lambda-prereqs"></a>

**사전 조건**
+ 이 패턴에서 사용하는 AWS 리소스를 배포할 수 있는 충분한 권한이 AWS 계정 있는 활성
+ AWS Cloud Development Kit (AWS CDK) 를 실행하여 전역적으로 설치됨 `npm install -g aws-cdk`
+ Git 클라이언트.
+ Python
+ Docker

**제한 사항**
+ 일부 AWS 서비스 는 전혀 사용할 수 없습니다 AWS 리전. 리전 가용성은 [리전별AWS 서비스](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) 섹션을 참조하세요. 구체적인 엔드포인트는 [서비스 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) 페이지를 참조하고 서비스 링크를 선택합니다.

**제품 버전**
+ [Lambda에서 지원하는](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) Python 런타임 버전
+ Psycopg2 버전 2.9.3
+ Pandas 버전 1.5.2

## 아키텍처
<a name="import-psycopg2-library-lambda-architecture"></a>

**솔루션 개요**

Lambda에서 `psycopg2` 라이브러리를 사용할 때 직면할 수 있는 문제를 설명하기 위해 패턴은 두 개의 Lambda 함수를 배포합니다.
+ .zip 파일에서 생성된 Python 런타임이 있는 Lambda 함수 1개. `psycopg2` 및 `pandas` 라이브러리는 [pip](https://pypi.org/project/pip/)를 사용하여이 .zip 배포 패키지에 설치됩니다.
+ Dockerfile에서 생성된 Python 런타임이 있는 Lambda 함수 1개. Dockerfile은 Lambda 컨테이너 이미지에 `psycopg2` 및 `pandas` 라이브러리를 설치합니다.

첫 번째 Lambda 함수는 .zip 파일에 `pandas` 라이브러리와 해당 종속성을 설치하고 Lambda는 해당 라이브러리를 사용할 수 있습니다.

두 번째 Lambda 함수는 Lambda 함수에 대한 컨테이너 이미지를 빌드하여 Lambda에서 및 `psycopg2` 라이브러리를`pandas` 실행할 수 있음을 보여줍니다.

## 도구
<a name="import-psycopg2-library-lambda-tools"></a>

**AWS 서비스**
+ AWS Cloud Development Kit(AWS CDK)는 AWS 클라우드 인프라를 코드로 정의하고 프로비저닝하는 데 도움이 되는 소프트웨어 개발 프레임워크입니다.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.

**기타 도구**
+ [Docker](https://www.docker.com/)는 운영 체제 수준의 가상화를 사용하여 컨테이너에 소프트웨어를 제공하는 서비스형 플랫폼(PaaS) 제품 세트입니다.
+ [pandas](https://pandas.pydata.org/)는 데이터 분석 및 조작을 위한 Python 기반 오픈 소스 도구입니다.
+ [Psycopg](https://www.psycopg.org/docs/)는 다중 스레드 애플리케이션용으로 설계된 Python 언어용 PostgreSQL 데이터베이스 어댑터입니다. 이 패턴은 Psycopg 2를 사용합니다.
+ [Python](https://www.python.org/)은 범용 컴퓨터 프로그래밍 언어입니다.

**코드 리포지토리**

이 패턴의 코드는 GitHub의 [import-psycopg2-in-lambda-to-interact-with-postgres-database](https://github.com/aws-samples/import-psycopg2-in-lambda-to-interact-with-postgres-database) 리포지토리에서 사용할 수 있습니다.

## 모범 사례
<a name="import-psycopg2-library-lambda-best-practices"></a>

이 패턴은를 사용하여 Dockerfile에서 Lambda 함수를 AWS CDK 생성하는 작업 예제를 제공합니다. 애플리케이션에서이 코드를 재사용하는 경우 배포된 리소스가 모든 보안 요구 사항을 충족하는지 확인합니다. 인프라를 배포하기 전에 클라우드 인프라 구성을 스캔하여 잘못된 구성을 찾는 [Checkov](https://www.checkov.io/)와 같은 도구를 사용합니다.

## 에픽
<a name="import-psycopg2-library-lambda-epics"></a>

### 리포지토리 복제 및 배포 구성
<a name="clone-the-repository-and-configure-the-deployment"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | 다음 명령을 실행하여 GitHub 리포지토리를 복제합니다.<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 | 
| 배포를 구성합니다. |  AWS 계정다음에 대한 정보로 `app.py` 파일을 편집합니다.<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 | 

### AWS 계정 부트스트랩 및 애플리케이션 배포
<a name="bootstrap-your-aws-account-and-deploy-the-application"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 를 부트스트랩합니다 AWS 계정. | [AWS 환경을 아직 부트스트래핑](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)하지 않은 경우 AWS 계정의 AWS 자격 증명으로 다음 명령을 실행합니다.<pre>cdk bootstrap aws://<tooling-account-id>/<aws-region></pre> | 일반 AWS | 
| 모델 배포 |  AWS CDK 애플리케이션을 배포하려면 다음 명령을 실행합니다.<pre>cdk deploy AWSLambdaPyscopg2</pre> | 일반 AWS | 

### AWS Management Console에서 Lambda 함수 테스트
<a name="test-the-lambda-functions-from-the-aws-management-console"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| .zip 파일에서 생성된 Lambda 함수를 테스트합니다. | .zip 파일에서 생성된 Lambda 함수를 테스트하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)Lambda는 기본 이미지에서 필요한 PostgreSQL 라이브러리를 찾지 못하므로 `psycopg2` 라이브러리를 사용할 수 없습니다. | 일반 AWS | 
| Dockerfile에서 생성된 Lambda 함수를 테스트합니다. | Lambda 함수 내에서 `psycopg2` 라이브러리를 사용하려면 Lambda Amazon Machine Image(AMI)를 편집해야 합니다.Dockerfile에서 생성된 Lambda 함수를 테스트하려면 다음을 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/import-psycopg2-library-lambda.html)다음 코드는 AWS CDK 템플릿이 생성하는 Dockerfile을 보여줍니다.<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>Dockerfile은 Python 런타임을 위해 AWS 제공된 Lambda 이미지를 가져와 [PostgreSQL 관리 서버와 직접 상호 작용하는 애플리케이션을 컴파일하는 데 필요한 라이브러리가 포함된 postgresql-devel](https://yum-info.contradodigital.com/view-package/updates/postgresql-devel/)을 설치합니다. PostgreSQL Dockerfile은 `requirements.txt` 파일에 표시된 `pandas` 및 `psycopg2` 라이브러리도 설치합니다. | 일반 AWS | 

## 관련 리소스
<a name="import-psycopg2-library-lambda-resources"></a>
+ [AWS CDK 설명서](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
+ [AWS Lambda 설명서](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)

## 추가 정보
<a name="import-psycopg2-library-lambda-additional"></a>

이 패턴에서 AWS CDK 템플릿은 다음 세 가지 리소스가 있는 AWS 스택을 제공합니다.
+ Lambda 변환 함수를 위한 IAM 역할
+ Python 런타임이 있는 Lambda 함수입니다. 함수는 배포 패키지에서 `Constructs/lambda/lambda_deploy.zip` 배포됩니다.
+ Python 런타임이 있는 Lambda 함수입니다. 함수는 `Constructs` 폴더 아래의 Dockerfile에서 배포됩니다.

두 Lambda 함수의 스크립트는 `pandas` 및 `psycopg2` 라이브러리를 성공적으로 가져오는지 확인합니다.

```
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"}
```

`lambda_deploy.zip` 배포 패키지는 `Constructs/lambda/build.sh` bash 스크립트로 빌드됩니다. 이 스크립트는 폴더를 생성하고, Lambda 스크립트를 복사하고, `pandas` 및 `psycopg2` 라이브러리를 설치하고, .zip 파일을 생성합니다. .zip 파일을 직접 생성하려면이 bash 스크립트를 실행하고 AWS CDK 스택을 재배포합니다.

Dockerfile은 Python 런타임이 있는 Lambda에 대해 AWS 제공된 기본 이미지로 시작합니다. Dockerfile은 기본 이미지 위에 `pandas` 및 `psycopg2` 라이브러리를 설치합니다.