Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

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

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

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

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

作成者:Louis Hourcade (AWS)

概要

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

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

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

ライブラリをバンドルおよびアタッチするには、次のような複数の方法があります。

このパターンは、最初の 2 つのオプションを示しています。

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

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

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

前提条件と制限

前提条件

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

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

  • Git クライアント

  • Python

  • Docker

機能制限

製品バージョン

  • AWS Lambda ランタイムバージョン: Python 3.8 (このパターンは他の Python バージョンに合わせて調整できます)。

  • Psycopg2 バージョン 2.9.3

  • Pandas バージョン 1.5.2

アーキテクチャ

ソリューションの概要

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

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

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

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

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

ツール

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 全般

リポジトリのクローンを作成し、デプロイを設定する

タスク説明必要なスキル

リポジトリをクローン作成します。

ローカルマシンで 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 全般

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.8 image FROM public.ecr.aws/lambda/python:3.8 # 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 3.8 ランタイム用に AWS 提供された Lambda イメージを取得し、PostgreSQL 管理サーバーと直接やり取りするアプリケーションをコンパイルするために必要なライブラリを含む postgresql-devel をインストールします。 PostgreSQL Dockerfile は、 requirements.txt ファイルで示されている pandasおよび psycopg2ライブラリもインストールします。

AWS 全般

AWS マネジメントコンソールから Lambda 関数をテストする

タスク説明必要なスキル

.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.8 image FROM public.ecr.aws/lambda/python:3.8 # 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 3.8 ランタイム用に AWS 提供された Lambda イメージを取得し、PostgreSQL 管理サーバーと直接やり取りするアプリケーションをコンパイルするために必要なライブラリを含む postgresql-devel をインストールします。 PostgreSQL Dockerfile は、 requirements.txt ファイルで示されている pandasおよび psycopg2ライブラリもインストールします。

AWS 全般

関連リソース

追加情報

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

  • Lambda 関数の AWS Identity and Access Management (IAM) ロール

  • Python 3.8 ランタイムを使用する Lambda 関数。関数はデプロイパッケージからConstructs/lambda/lambda_deploy.zipデプロイされます。

  • Python 3.8 ランタイムを使用する Lambda 関数。関数は Constructsフォルダの下の Dockerfile からデプロイされます。

両方の Lambda 関数のスクリプトは、 ライブラリpandaspsycopg2ライブラリが正常にインポートされたかどうかを確認します。

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 デプロイパッケージは bash Constructs/lambda/build.sh スクリプトで構築されます。このスクリプトはフォルダを作成し、Lambda スクリプトをコピーして、 pandas および psycopg2ライブラリをインストールし、.zip ファイルを生成します。.zip ファイルを自分で生成するには、この bash スクリプトを実行して AWS CDK スタックを再デプロイします。

Dockerfile は、Python 3.8 ランタイムを使用する Lambda 用に AWS 提供されたベースイメージで始まります。Dockerfile は、デフォルトイメージの上に ライブラリpandaspsycopg2ライブラリをインストールします。

このパターンは、Dockerfile から関数を作成し、必要な依存関係を Lambda イメージに追加することで、Lambda でpsycopg2ライブラリを使用する方法の 1 つを示しています。これを実現するその他の方法については、GitHub awslambda-psycopg2 リポジトリを参照してください。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.