翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
psycopg2 ライブラリを にインポート AWS Lambda して PostgreSQL データベースとやり取りする
Amazon Web Services、Louis Hourcade
概要
Psycopgpsycopg2 ライブラリを使用して、PostgreSQL データベースとやり取りする Python アプリケーションを作成します。
Amazon Web Services (AWS) では、開発者は AWS Lambda を使用して、アプリケーションやバックエンドサービスのコードも実行できます。Lambda は、サーバーをプロビジョニングしたり管理したりすることなくコードを実行する、サーバーレスでイベント駆動型のコンピューティングサービスです。
デフォルトでは、Lambda でサポートされている Python ランタイムを使用する新しい関数を作成すると、 AWSによって提供される Lambda のベースイメージpandas や psycopg2 などのライブラリは、ベースイメージに含まれません。ライブラリを使用するには、ライブラリをカスタムパッケージにバンドルして Lambda にアタッチする必要があります。
ライブラリをバンドルしてアタッチする方法は複数あります。以下に例を示します。
.zip ファイルアーカイブから Lambda 関数をデプロイします。
カスタムコンテナイメージから Lambda 関数をデプロイします。
Lambda レイヤーを作成して、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-cdkGit クライアント
Python
Docker
制限事項
一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては、「AWS のサービス (リージョン別)
」を参照してください。特定のエンドポイントについては、「Service endpoints and quotas」ページから、サービスのリンクを選択してご確認ください。
製品バージョン
Lambda でサポートされている Python ランタイムバージョン
Psycopg2 バージョン 2.9.3
Pandas バージョン 1.5.2
アーキテクチャ
ソリューションの概要
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 は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
その他のツール
コードリポジトリ
このパターンのコードは、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 ランタイム用に AWS 提供された Lambda イメージを取得し、postgresql-devel | 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 ライブラリをインストールします。