我正在尝试使用 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
拥有 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 运行时