psycopg2 ライブラリを にインポート AWS Lambda して PostgreSQL データベースとやり取りする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

psycopg2 ライブラリを にインポート AWS Lambda して PostgreSQL データベースとやり取りする

Amazon Web Services、Louis Hourcade

概要

Psycopg は Python 用の PostgresSQL データベースアダプタです。開発者は、この psycopg2 ライブラリを使用して、PostgreSQL データベースとやり取りする Python アプリケーションを作成します。

Amazon Web Services (AWS) では、開発者は AWS Lambda を使用して、アプリケーションやバックエンドサービスのコードも実行できます。Lambda は、サーバーをプロビジョニングしたり管理したりすることなくコードを実行する、サーバーレスでイベント駆動型のコンピューティングサービスです。

デフォルトでは、Lambda でサポートされている Python ランタイムを使用する新しい関数を作成すると、 AWSによって提供される Lambda のベースイメージから Lambda ランタイム環境が作成されます。pandaspsycopg2 などのライブラリは、ベースイメージに含まれません。ライブラリを使用するには、ライブラリをカスタムパッケージにバンドルして Lambda にアタッチする必要があります。

ライブラリをバンドルしてアタッチする方法は複数あります。以下に例を示します。

このパターンでは、最初の 2 つのオプションについて説明します。

.zip デプロイパッケージを使用すると、Lambda 関数に pandas ライブラリを追加するのが比較的簡単になります。Linux マシンにフォルダを作成し、Lambda スクリプトを pandas ライブラリとライブラリの依存関係とともにフォルダに追加して、フォルダを圧縮して、Lambda 関数のソースとして提供します。

.zip デプロイパッケージを使用するのは一般的な方法ですが、この方法は psycopg2 ライブラリでは機能しません。このパターンではまず、.zip デプロイパッケージを使用して psycopg2 ライブラリを Lambda 関数に追加した場合に表示されるエラーを示します。次に、このパターンでは、Dockerfile から Lambda をデプロイし、psycopg2 ライブラリが機能するように Lambda イメージを編集する方法を示します。

パターンがデプロイする 3 つのリソースの詳細については、「追加情報」セクションを参照してください。

前提条件と制限事項

前提条件

  • このパターンで使用される AWS リソースをデプロイするための十分なアクセス許可 AWS アカウント を持つアクティブな

  • AWS Cloud Development Kit (AWS CDK) を実行してグローバルにインストールする npm install -g aws-cdk

  • Git クライアント

  • Python

  • Docker

制限事項

  • 一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS のサービス (リージョン別)」を参照してください。特定のエンドポイントについては、「Service endpoints and quotas」ページから、サービスのリンクを選択してご確認ください。

製品バージョン

アーキテクチャ

ソリューションの概要

Lambda で psycopg2 ライブラリを使用する際に直面する可能性のある課題を説明するために、このパターンでは、次の 2 つの Lambda 関数をデプロイします。

  • .zip ファイルから作成された Python ランタイムを含む 1 つの Lambda 関数。psycopg2 および pandas ライブラリは、pip を使用してこの .zip デプロイパッケージにインストールされます。

  • Dockerfile から作成された Python ランタイムを含む 1 つの Lambda 関数。Dockerfile は、Lambda コンテナイメージに psycopg2 および pandas ライブラリをインストールします。

最初の Lambda 関数は、pandas ライブラリとその依存関係を .zip ファイルにインストールし、Lambda はそのライブラリを使用できます。

2 番目の Lambda 関数は、Lambda 関数のコンテナイメージを構築することで、Lambda で pandas および psycopg2 ライブラリを実行できることを示しています。

ツール

AWS のサービス

  • AWS Cloud Development Kit (AWS CDK) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

その他のツール

  • Docker は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしての Platform as a Service (PaaS) 製品のセットです。

  • pandas は、データの分析と操作を行うための Python ベースのオープンソースツールです。

  • Psycopg は、マルチスレッドアプリケーション用に設計された Python 言語用の PostgreSQL データベースアダプタです。このパターンでは Psycopg 2 を使用します。

  • Python」は汎用のコンピュータプログラミング言語です。

コードリポジトリ

このパターンのコードは、GitHub の import-psycopg2-in-lambda-to-interact-with-postgres-database リポジトリで使用できます。

ベストプラクティス

このパターンでは、 AWS CDK を使用して Dockerfile から Lambda 関数を作成する作業例を示します。アプリケーションでこのコードを再利用する場合は、デプロイされたリソースがすべてのセキュリティ要件を満たしていることを確認してください。インフラストラクチャがデプロイされる前に設定ミスを見つけるには、クラウドインフラストラクチャ設定をスキャンする Checkov などのツールを使用します。

エピック

タスク説明必要なスキル

リポジトリのクローン作成

ローカルマシンに GitHub リポジトリのクローンを作成するには、次のコマンドを実行します。

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

デプロイを設定します。

次の情報を使用して app.py ファイルを編集します 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 全般
タスク説明必要なスキル

をブートストラップします AWS アカウント。

AWS 環境をブートストラップしていない場合は、 AWS アカウントの AWS 認証情報を使用して次のコマンドを実行します。

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

コードをデプロイします。

AWS CDK アプリケーションをデプロイするには、次のコマンドを実行します。

cdk deploy AWSLambdaPyscopg2
AWS 全般
タスク説明必要なスキル

.zip ファイルから作成された Lambda 関数をテストします。

.zip ファイルから作成された Lambda 関数をテストするには、以下を行います。

  1. コンソールにサインインして https://console.aws.amazon.com/lambda/ で Lambda コンソールを開きます。

  2. lambda-from-zip Lambda 関数を選択します。

  3. 関数を呼び出すテストイベントを作成します。

  4. 呼び出した場合、関数により、次のメッセージを含むエラーが生成されます。

    "errorMessage": Unable to import module 'lambda_code': libpq.so.5: cannot open shared object, "stackTrace": [] "errorType": Runtime.ImportModuleError",
  5. https://console.aws.amazon.com/cloudwatch/ で Amazon CloudWatch コンソールを開きます。CloudWatch ログには、pandas ライブラリが正常にインポートされたが、psycopg2 ライブラリのインポートが失敗したことが示されています。

Lambda はデフォルトイメージ内に必要な PostgreSQL ライブラリを見つけられないため、psycopg2 ライブラリを使用できません。

AWS 全般

Dockerfile から作成された Lambda 関数をテストします。

Lambda 関数内で psycopg2 ライブラリを使用するには、Lambda Amazon マシンイメージ (AMI) を編集する必要があります。

Dockerfile から作成された Lambda 関数をテストするには、以下を行います。

  1. コンソールにサインインし、Lambda コンソールを開きます。

  2. lambda-from-docker Lambda 関数を選択します。

  3. 関数を呼び出すテストイベントを作成します。

  4. 呼び出すと、関数は正常に実行されます。

次のコードは、 AWS CDK テンプレートが作成する Dockerfile を示しています。

# 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"]

Dockerfile は、Python ランタイム用に AWS 提供された Lambda イメージを取得し、postgresql-devel をインストールします。これには、PostgreSQL 管理サーバーと直接やり取りするアプリケーションをコンパイルするために必要なライブラリが含まれています。Dockerfile は、requirements.txt ファイルで示されている pandas および psycopg2 ライブラリもインストールします。

AWS 全般

関連リソース

追加情報

このパターンでは、 AWS CDK テンプレートは 3 つのリソースを持つ AWS スタックを提供します。

  • Lambda 関数の AWS Identity and Access Management (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 ライブラリをインストールします。