翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
psycopg2 ライブラリを にインポート AWS Lambda して PostgreSQL データベースとやり取りする
作成者:Louis Hourcade (AWS)
概要
Psycopgpsycopg2
ライブラリを使用して、PostgreSQL データベースとやり取りする Python アプリケーションを記述します。
Amazon Web Services (AWS) では、デベロッパーは AWS Lambda を使用してアプリケーションまたはバックエンドサービスのコードを実行することもできます。Lambda は、サーバーレスのイベント駆動型のコンピューティングサービスで、サーバーのプロビジョニングや管理を必要とせずにコードを実行します。
デフォルトでは、Python ランタイム (バージョン 3.9、3.8、または 3.7) を使用する新しい関数を作成すると、 が提供する Lambda のベースイメージから Lambdapandas
や などのライブラリはpsycopg2
、ベースイメージに含まれません。ライブラリを使用するには、カスタムパッケージにバンドルして Lambda にアタッチする必要があります。
ライブラリをバンドルおよびアタッチするには、次のような複数の方法があります。
.zip ファイルアーカイブから Lambda 関数をデプロイします。
カスタムコンテナイメージから Lambda 関数をデプロイします。
Lambda レイヤーを作成し、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 のサービス はすべての で利用できるわけではありません AWS リージョン。利用可能なリージョンについては、AWS のサービス 「リージョン別
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」ページを参照し、サービスのリンクを選択します。
製品バージョン
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 は、 ライブラリ
psycopg2
とpandas
ライブラリを Lambda コンテナイメージにインストールします。
最初の Lambda 関数はpandas
ライブラリとその依存関係を .zip ファイルにインストールし、Lambda はそのライブラリを使用できます。
2 番目の Lambda 関数は、Lambda 関数のコンテナイメージを構築することで、Lambda で および psycopg2
ライブラリを実行pandas
できることを示しています。
ツール
AWS のサービス
AWS Cloud Development Kit (AWS CDK) は、AWS クラウドインフラストラクチャをコードで定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
その他のツール
コードリポジトリ
このパターンのコードは、GitHub の import-psycopg2-in-lambda-to-interact-with-postgres-database
ベストプラクティス
このパターンでは、 AWS CDK を使用して Dockerfile から Lambda 関数を作成する実例を示します。このコードをアプリケーションで再利用する場合は、デプロイされたリソースがすべてのセキュリティ要件を満たしていることを確認してください。インフラストラクチャがデプロイされる前に、クラウドインフラストラクチャ設定をスキャンして設定ミスを見つける Checkov
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
リポジトリをクローン作成します。 | ローカルマシンで GitHub リポジトリのクローンを作成するには、次のコマンドを実行します。
| AWS 全般 |
デプロイを設定します。 | 次の情報を使用して
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
をブートストラップします AWS アカウント。 | AWS 環境をまだブートストラップしていない場合は、 AWS アカウントの AWS 認証情報を使用して次のコマンドを実行します。
| AWS 全般 |
コードをデプロイします。 | AWS CDK アプリケーションをデプロイするには、次のコマンドを実行します。
| AWS 全般 |
タスク | 説明 | 必要なスキル |
---|---|---|
.zip ファイルから作成された Lambda 関数をテストします。 | .zip ファイルから作成された Lambda 関数をテストするには、次の手順を実行します。
Lambda は、必要な PostgreSQL ライブラリをデフォルトイメージで見つけられないため、 | AWS 全般 |
Dockerfile から作成された Lambda 関数をテストします。 | Lambda 関数内で Dockerfile から作成された Lambda 関数をテストするには、次の手順を実行します。
次のコードは、 AWS CDK テンプレートが作成する Dockerfile を示しています。
Dockerfile は、Python 3.8 ランタイム用に AWS 提供された Lambda イメージを取得し、PostgreSQL 管理サーバーと直接やり取りするアプリケーションをコンパイルするために必要なライブラリを含む postgresql-devel | 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 関数のスクリプトは、 ライブラリ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
デプロイパッケージは bash Constructs/lambda/build.sh
スクリプトで構築されます。このスクリプトはフォルダを作成し、Lambda スクリプトをコピーして、 pandas
および psycopg2
ライブラリをインストールし、.zip ファイルを生成します。.zip ファイルを自分で生成するには、この bash スクリプトを実行して AWS CDK スタックを再デプロイします。
Dockerfile は、Python 3.8 ランタイムを使用する Lambda 用に AWS 提供されたベースイメージで始まります。Dockerfile は、デフォルトイメージの上に ライブラリpandas
と psycopg2
ライブラリをインストールします。
このパターンは、Dockerfile から関数を作成し、必要な依存関係を Lambda イメージに追加することで、Lambda でpsycopg2
ライブラリを使用する方法の 1 つを示しています。これを実現するその他の方法については、GitHub awslambda-psycopg2