跳至內容

如何解決執行 Python Lambda 程式碼時收到的「Unable to import module」錯誤?

2 分的閱讀內容
0

我想解決在 AWS Lambda 函式中執行 Python 程式碼時出現的「Unable to import module 」錯誤。

簡短說明

當 Lambda 環境在 Lambda 部署套件中找不到指定的程式庫時,您會收到「Unable to import module」錯誤。

若要解決此錯誤,請建立包含所有必要程式庫的部署套件。或者,建立包含必要程式庫的 Lambda 層,然後將該層附加至 Lambda 函式。接著,您可以在多個 Lambda 函式中重複使用該層。

解決方法

建立 Lambda 層並附加至多個 Lambda 函式

**注意:**建立 Lambda 層時,請將程式庫放在 /pythonpython/lib/python3.x/site-packages 資料夾中。Lambda 層的檔案大小限制為壓縮後 50 MB,解壓縮後 250 MB。最佳實務是在 Lambda 執行時期所採用的相同作業系統 (OS) 上建立 Lambda 層。例如,Python 3.12 採用 Amazon Linux 2023 Amazon Machine Image (AMI)。因此,請在 Amazon Linux 2023 OS 上建立該層。

如果您使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,且具備進行 PublishLayerVersion API 呼叫的權限,請繼續步驟 5。或者,如果您使用 AWS CloudShell 進行驗證,請繼續步驟 5。

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

請完成以下步驟:

1.使用 AWS CloudShell,或使用 Amazon EC2 主控台建立採用 Amazon Linux 2023 AMI 的執行個體

2.建立 AWS Identity and Access Management (IAM) 政策,授予呼叫 PublishLayerVersion API 操作的權限。

IAM 政策範例:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "lambda:PublishLayerVersion",
            "Resource": "arn:aws:lambda:*:*:layer:*"
        }
    ]
}

3.建立 IAM 角色,然後將 IAM 政策附加至該角色。

4.將 IAM 角色附加至執行個體

5.連線至執行個體或開啟 CloudShell。

6.執行以下命令以建立新資料夾,並使用 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

**注意:**更新函式類型的 platform 參數。對於 x86_64 Lambda 函式,將值設為 manylinux2014_x86_64。對於 arm64 函式,將值設為 manylinux2014_aarch64。將 python-version 參數更新為 Lambda 函式所使用的相同版本。您不需要安裝 Python 3.12,因為 pip 會自動下載與 Python 3.12 相容的套件。

7.執行以下命令,將 python 資料夾的內容放入 layer.zip 檔案:

cd ..
zip -r layer.zip python

8.若要發佈 Lambda 層,請執行以下 publish-layer-version 命令:

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 區域。

9.將層新增至 Lambda 函式

10.若要測試 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 程式庫並進行疑難排解?

AWS 官方已更新 7 個月前