我想建立包含二進位共用程式庫相依性,且在 Amazon Linux 2 Amazon Machine Image (AMI) 上執行的 AWS Lambda 函數。有沒有辦法可以在不重新編譯套件的情況下使用 Amazon Linux 2 AMI 軟體套件?
簡短描述
用於 Lambda 執行期的 Amazon Linux 2 AMI 和 Amazon Linux AMI 並不支援所有相同的原生二進位套件。
解決方法是先使用 Docker 命令列介面 (CLI) 建置 Lambda 容器映像檔。然後,使用容器映像檔執行 Lambda 函數。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確定您使用的是最新的 AWS CLI 版本。
下列指示說明如何將 curl 程式庫安裝到 Docker 映像檔 (Lambda 容器映像檔) 中。然後,如何使用映像檔來執行 Python 3.9 版 Lambda 函數。對於其他編碼語言,請相應地調整步驟。
1. 如果您尚未這樣做,請安裝 Docker CLI。
2. 建立名為 lambda-project 的專案目錄。
3. 使用文字編輯器在 lambda-project 目錄中建立 Dockerfile,其中包含以下範例程式碼:
FROM public.ecr.aws/lambda/python:3.9
# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}
# Install the binary packages using yum install
RUN yum install -y curl
# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.lambda_handler" ]
4. 使用文字編輯器在 lambda-project 目錄中建立 lambda_function.py 檔案,其中包含以下範例程式碼:
import subprocess
def lambda_handler(event, context):
my_output = subprocess.check_output(["curl","-X", "GET", "https://www.httpbin.org/get"], stderr=subprocess.STDOUT, shell=False)
print(my_output.decode('utf8'))
**重要:**確保在 lambda-project 目錄中執行以下所有命令 (步驟 5-10)。
5. 執行下列 docker build Docker CLI 命令,以建立 Lambda 容器映像檔:
docker build -t hello-world
6. 在本機啟動容器映像檔以測試容器映像檔的設定。若要在本機啟動容器映像檔,請執行下列 docker run Docker CLI 命令:
docker run -p 9000:8080 hello-world
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
7. 執行下列 get-login-password AWS CLI 命令,以向 Amazon Elastic Container Registry (Amazon ECR) 登錄檔驗證 Docker:
**重要:**使用您的 AWS 區域取代 us-east-1。使用您的 AWS 帳戶 ID 取代 123456789012。
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的使用授權權杖。
8. 執行下列 create-repository AWS CLI 命令,以建立 Amazon ECR 儲存庫:
**重要:**使用您的 Amazon ECR 儲存庫名稱取代 hello-world。
aws ecr create-repository --repository-name hello-world --image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLE
如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的步驟 3: 建立儲存庫。
9. 執行下列 docker tag Docker CLI 命令,標記您的容器映像檔以推送至儲存庫:
**重要:**使用您的 AWS 帳戶 ID 取代 123456789012。使用您的 AWS 區域取代 us-east-1。
docker tag hello-world:latest 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
10. 執行下列 docker push Docker CLI 命令,以將容器映像檔推送至儲存庫:
**重要:**使用您的 AWS 帳戶 ID 取代 123456789012。使用您的 AWS 區域取代 us-east-1。
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest
您的容器映像檔現在位於 Amazon ECR 儲存庫中。如需詳細資訊,請參閱《Amazon ECR 使用者指南》中的步驟 4: 將映像檔推送至 Amazon ECR。
11. 使用您建立的容器映像檔建立和測試 Lambda 函數。如需指示,請參閱《Lambda 開發人員指南》中的建立定義為容器映像檔的 Lambda 函數。