本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 psycopg2 程式庫匯入 AWS Lambda ,以與您的 PostgreSQL 資料庫互動
由 Louis Hourcade (AWS) 建立
Summary
Psycopgpsycopg2
程式庫撰寫與 PostgreSQL 資料庫互動的 Python 應用程式。
在 Amazon Web Services (AWS) 上,開發人員也會使用 AWS Lambda來執行應用程式或後端服務的程式碼。Lambda 是一種無伺服器、事件驅動的運算服務,無需佈建或管理伺服器即可執行程式碼。
根據預設,當您建立使用 Python 執行期 (3.9、3.8 或 3.7 版) 的新函數時,Lambda 執行期環境會從 提供的 Lambda 基礎映像psycopg2
中不包含 pandas
或 等程式庫。若要使用程式庫,您需要將其封裝在自訂套件中,並將其連接至 Lambda。
有多種方式可以綁定和連接程式庫,包括下列項目:
此模式示範前兩個選項。
使用 .zip 部署套件,將pandas
程式庫新增至 Lambda 函數相對簡單。在 Linux 機器上建立資料夾、將 Lambda 指令碼與程式pandas
庫和程式庫的相依性新增至資料夾、壓縮資料夾,並提供它做為 Lambda 函數的來源。
雖然使用 .zip 部署套件是常見的做法,但該方法不適用於程式psycopg2
庫。如果您使用 .zip 部署套件將psycopg2
程式庫新增至 Lambda 函數,此模式會先顯示您遇到的錯誤。然後,模式會示範如何從 Dockerfile 部署 Lambda,並編輯 Lambda 映像,讓psycopg2
程式庫運作。
如需模式部署的三個資源的相關資訊,請參閱其他資訊一節。
先決條件和限制
先決條件
具有足夠許可 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
程式庫時可能面臨的挑戰, 模式會部署兩個 Lambda 函數:
一個 Lambda 函數搭配從 .zip 檔案建立的 Python 3.8 執行期。
psycopg2
和pandas
程式庫是使用 pip安裝在此 .zip 部署套件中。 從 Dockerfile 建立的具有 Python 3.8 執行期的 Lambda 函數。Dockerfile 會將
psycopg2
和pandas
程式庫安裝到 Lambda 容器映像中。
第一個 Lambda 函數會在 .zip 檔案中安裝程式pandas
庫及其相依性,Lambda 可以使用該程式庫。
第二個 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
最佳實務
此模式提供您使用 從 Dockerfile AWS CDK 建立 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-devel | 一般 AWS |
相關資源
其他資訊
在此模式中, AWS CDK 範本提供具有三個資源的 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
部署套件是使用 Constructs/lambda/build.sh
bash 指令碼建置的。此指令碼會建立資料夾、複製 Lambda 指令碼、安裝 pandas
和 psycopg2
程式庫,以及產生 .zip 檔案。若要自行產生 .zip 檔案,請執行此 bash 指令碼並重新部署 AWS CDK 堆疊。
Dockerfile 開頭為具有 Python 3.8 執行時間的 Lambda AWS 基本映像。Dockerfile 會在預設映像的頂端安裝 pandas
和 psycopg2
程式庫。
此模式顯示從 Dockerfile 建立函數,並將必要的相依性新增至 Lambda 映像,藉此在 Lambda 中使用psycopg2
程式庫的一種方式。如需達成此目標的其他方法,請參閱 GitHub awslambda-psycopg2