我想使用 Amazon Elastic Container Registry (Amazon ECR) 映像檔和 Docker,建立與我的環境執行時期相容的 AWS Lambda 層。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。以下解決方案使用 Python 和 Linux。對於其他編碼語言和作業系統 (OS),步驟可能會有所不同。
**先決條件:**在您的電腦上安裝 Docker。有關安裝步驟,請參閱 Docker Docs 網站上的取得 Docker 和安裝 Docker Engine (僅限 Linux)。
建立目錄結構並指定相依性
建立目錄結構,並在 requirements.txt pip 要求檔案中指定您的相依性。有關如何指定相依性的詳細資訊,請參閱 pip 網站上的要求檔案。
以下範例目錄結構適用於與 Python 3.x 相容的 Lambda 圖層:
my-layer/
├── requirements.txt
└── python/
**注意:**函式和所有圖層解壓縮後的總大小不能超過解壓縮部署套件的大小限制 250 MB。有關 Lambda 中 Python 版本支援的資訊,請參閱使用 Python 建立 Lambda 函式。
將程式庫相依性安裝到其子資料夾中
對目錄結構中指定的每個執行時期執行以下命令一次:
docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.x" /bin/sh -c "pip install -r requirements.txt -t python/; exit"
**注意:**將 3.x 替換為您要安裝的相容 Python 程式庫。
為您的圖層建立 .zip 檔案封存
若要壓縮 python 資料夾並建立圖層套件,請執行下列命令:
zip -r mypythonlibs.zip python > /dev/null
**注意:**將 mypythonlibs 替換為您的圖層套件的名稱。
建立或更新圖層
執行以下 publish-layer-version AWS CLI 命令:
aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.x"
**注意:**將 mypythonlibs 替換為您的圖層套件名稱,將 My python libs 替換為圖層套件的描述,並將 python3.x 替換為已安裝的 Python 程式庫。
在輸出中,記下該圖層的 Amazon Resource Name (ARN)。
更新您的 Lambda 函式組態以使用圖層
執行以下 update-function-configuration 命令:
aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function
**注意:**將 arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 替換為圖層 ARN,並將 my-function 替換為您的函式名稱。上述命令會將圖層放置在 Lambda 環境的 /opt 資料夾中。您可以從 Lambda 函式程式碼存取 /opt 資料夾。
相關資訊
如何解決 Python (Boto3) Lambda 函式中的 "unknown service"、"parameter validation failed" 或 錯誤?"object has no attribute"
AWS Lambda 的新功能 - 使用任何程式設計語言並共用通用元件
Amazon ECR 公共映像庫