當我在 AWS Lambda 函數中執行 Python 程式碼時,我想解決 “Unable to import module” 的錯誤。
簡短描述
當 Lambda 環境在 Lambda 部署套件中找不到指定的程式庫時,您會收到「無法匯入模組」錯誤。
若要解決此錯誤,請建立包含所有必要程式庫的部署套件。或者,建立具有所需程式庫的 Lambda 圖層,並將圖層附加到 Lambda 函數。接著您就可以在多個 Lambda 函數中重複使用圖層。
解決方法
建立 Lambda 圖層以連接至多個 Lambda 函數
**注意:**建立 Lambda 圖層時,將程式庫放在 /python 或 python/lib/python3.x/site-packages 資料夾中。最佳實務是在 Lambda 執行期所依據的相同作業系統 (OS) 上建立 Lambda 圖層。例如,Python 3.12 基於 Amazon Linux 2023 Amazon Machine Image (AMI)。因此,在 Amazon Linux 2023 作業系統上建立圖層。
如果您的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體具有使用 PublishLayerVersion API 呼叫來上傳 Lambda 圖層的權限,請繼續執行步驟 5。
完成下列步驟:
-
使用 Amazon EC2 主控台建立具有 Amazon Linux 2023 AMI 的執行個體。或者,使用 AWS Cloud9 主控台。
-
建立 AWS Identity and Access Management (IAM) 政策,以授予呼叫 PublishLayerVersion API 操作的許可。
IAM 政策範例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:PublishLayerVersion",
"Resource": "*"
}
]
}
-
建立 IAM 角色,然後將 IAM 政策連接至此角色。
-
將 IAM 角色連接至執行個體。
-
連線至您的執行個體或 AWS Cloud9 環境。
-
執行下列命令以建立新資料夾,並使用 pip 來安裝名為 "numpy" 的程式庫:
mkdir -p lambda-layer/python
cd lambda-layer/python
pip3 install --platform manylinux2014_x86_64 --target . --python-version 3.12 --only-binary=:all: numpy
注意:更新您的函數類型的平台參數。對於 x86_64 Lambda 函數,將值設定為 manylinux2014_x86_64。對於 arm64 函數,將值設定為 manylinux2014_aarch64。將 python-version 參數更新為 Lambda 函數使用的相同版本。
-
執行下列命令以將 python 資料夾的內容壓縮到 layer.zip 檔案:
cd ..
zip -r layer.zip python
-
執行下列命令以發佈 Lambda 圖層:
aws lambda publish-layer-version --layer-name numpy-layer --zip-file fileb://layer.zip --compatible-runtimes python3.12 --region us-east-1
**注意:**將 us-east-1 取代為 Lambda 函數的 AWS 區域。
-
將圖層新增至您的 Lambda 函數。
-
若要測試 Lambda 函數,請匯入套件並列印版本。
輸出範例:
import json
import numpy
def lambda_handler(event, context):
print(numpy.__version__)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
相關資訊
如何在 Amazon EMR 和 Amazon EMR Serverless 叢集中安裝 Python 程式庫和進行疑難排解?