我怎樣才能將 Amazon Linux 2 AMI 原生二進位套件與 Lambda 搭配使用?

2 分的閱讀內容
0

我想建立包含二進位共用程式庫相依性,且在 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 函數


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