AWS Lambda 执行失败并出现 AWS 常见运行时错误

问题描述 投票:0回答:1

我正在尝试使用 python 和 boto3 依赖项部署 lambda 函数,以与 CloudFront 密钥存储进行交互。我收到一个我不太明白的错误,表明我在 lambda 环境中没有可用的 botocore[crt],但据我所知我有。

错误:

Missing Dependency: This operation requires an additional dependency. Use pip install botocore[crt] before proceeding.

我正在遵循这组说明:https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-create-dependency有一个小例外: 我正在使用

pip install --target ./package boto3
而不是
pip install --target ./package -r requirements.txt
。我在一台带有 m1 芯片的 Mac 上,使用 python 3.11.9。我尝试过arm64和x86_64环境。

示例代码:

import json
import boto3

cf_kvs_client = boto3.client("cloudfront-keyvaluestore")
cf_client = boto3.client("cloudfront")
KVS_ARN = "blah"

def lambda_handler(event, context):
    return fetch_current_values()

def fetch_current_values() -> str:
    current_values, etag = get_keys()
    return json.dumps({"etag": etag, "versions": current_values})

def get_keys() -> tuple[str, str]:
    kvs_etag = cf_kvs_client.describe_key_value_store(KvsARN=KVS_ARN)["ETag"]
    kvs_response = cf_kvs_client.list_keys(KvsARN=KVS_ARN)["Items"]
    return kvs_response, kvs_etag

需求.txt

boto3[crt]==1.35.62
botocore[crt]==1.35.62
jmespath==1.0.1
python-dateutil==2.9.0.post0
s3transfer==0.10.3
six==1.16.0
urllib3==2.2.3
amazon-web-services aws-lambda boto3 python-3.9 botocore
1个回答
0
投票

拥有 MAC 操作系统并尝试为 Lambda 创建程序包最终会遇到这些兼容性问题。为了确保这不是软件包问题,请尝试从您的要求中删除 boto3 和 botocore 并使用将 AWS 提供的 boto3 层添加到您的 Lambda 函数。

由于 lambda 使用 Linux (Amazon Linux),而您使用的是 Mac,因此当您想要使用

创建包时,最好使用与 Lambda 运行时兼容的 Docker 镜像
FROM public.ecr.aws/lambda/python:3.11
RUN pip install --target /var/task -r requirements.txt

添加 --platform=linux/arm64 以匹配 lambda 运行时

© www.soinside.com 2019 - 2024. All rights reserved.