如何透過 Docker 使用模擬的 Lambda 環境建立 Lambda 圖層?

2 分的閱讀內容
0

我想建立與目標環境執行時期相容的 AWS Lambda 圖層。我該如何操作?

簡短描述

開發 Lambda 函數時,您可以在支援的 Lambda 執行時期版本之間進行選擇。若要建立與特定執執行時期相容的 Lambda 函數和圖層,您可以執行下列其中一項操作:

如需詳細資訊,請參閱建立和共用 Lambda 圖層

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您使用的是最新的 AWS CLI 版本

下列指示使用 Python 作為編碼語言,以 Linux 型電腦平台作為範例。對於其他編碼語言和平台,請相應地調整步驟。

在電腦上安裝 Docker

如果尚未在電腦上安裝適用於 LinuxWindowsmacOS 的 Docker,請安裝。

建立適當的目錄結構並在 pip 要求文件 (requirements.txt) 中指定相依性

如需有關建立目錄結構的詳細資訊,請參閱在圖層中包括資源庫相依性。如需有關指定相依性的詳細資訊,請參閱 pip 使用者指南中的要求檔案

與 Python 3.6 及 3.8 版相容的 Lambda 圖層的範例目錄結構

├── requirements.txt
└── python/
    └── lib/
        ├── python3.6/
        │   └── site-packages/
        └── python3.8/
            └── site-packages/

**注意:**函數和所有圖層的解壓縮總大小不能超過解壓縮的部署套件大小限制 250 MB。如需有關 Lambda 中 Python 版本支援的詳細資訊,請參閱使用 Python 建立 Lambda 函數

根據您在目錄結構中指定的執行時期,將程式庫相依性安裝到其適當的子資料夾

對您在目錄結構中指定的每個執行時期執行一次下列 AWS CLI 命令:

**重要:**視您要安裝的相容程式庫而定,將 3.6 取代為 3.73.8

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"

為您的圖層建立 .zip 檔案封存

執行下列命令以壓縮 python 資料夾並建立圖層套件:

**注意:**您可以將 mypythonlibs 取代為偏好的任何名稱。

zip -r mypythonlibs.zip python > /dev/null

.zip 檔案會在 Lambda 環境的 /opt 資料夾中被解壓縮。可從您的 Lambda 函數程式碼存取 /opt 資料夾。

建立或更新圖層

執行下列命令以建立或更新 Lambda 圖層:

**重要:**請確定包含您之前指定的相容執行時期。將 mypythonlibs 取代為您在上一步驟中使用的套件名稱。將 My python libs 取代為您偏好的任何描述。

aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"

檢閱輸出並複製圖層的 Amazon Resource Name (ARN)。您需要圖層的 ARN 來完成下一步。

更新 Lambda 函數組態以使用圖層

執行下列命令來更新 Lambda 函數組態以使用圖層:

**重要:**將 arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 取代為圖層 ARN。

aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function

(選用) 對 Lambda 套件使用 Docker 映像檔,而不是 AWS SAM 檔案

您也可以不使用 AWS SAM 檔案,而使用 amazon/aws-sam-cli-build-image Docker 映像檔來建立 Lambda 套件。使用 Docker 映像檔可讓您在不建立圖層的情況下建立套件。

1.    執行下列命令以取得相依性的所需版本:

**重要:**視您要安裝的相容程式庫而定,將 3.6 取代為 3.73.8

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"

2.    建立 Lambda 部署套件,其中包含函數代碼和正確的程式庫。


相關資訊

為什麼我的 Python (Boto 3) Lambda 函數收到 "unknown service"、"parameter validation failed" 或 "object has no attribute" 錯誤?

建立圖層

使用任何程式設計語言並共用常用元件

Lambda (AWS CLI 命令參考)

AWS 官方
AWS 官方已更新 3 年前