You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda添加CloudFront KeyValueStore遇botocore/awscrt依赖问题

解决AWS Lambda中CloudFront KeyValueStore的MissingDependencyException问题

问题根源

Lambda运行在Amazon Linux 2环境中,你本地安装的awscrt依赖系统底层库,和Lambda环境不兼容,直接打包本地的依赖文件会导致运行时找不到正确的依赖库,从而抛出异常。

解决方案1:用Docker模拟Lambda环境构建兼容依赖

这是最可靠的解决方式,能确保依赖和Lambda运行环境完全匹配:

  1. 拉取对应架构的Lambda Python基础镜像(x86_64用public.ecr.aws/lambda/python:3.11,arm64用public.ecr.aws/lambda/python:3.11-arm64,替换成你实际使用的Python版本)
  2. 在容器内将依赖安装到指定目录:
    • 如果是直接打包函数代码,安装到当前工作目录:
      docker run -v "$PWD:/var/task" public.ecr.aws/lambda/python:3.11 /bin/bash -c "pip install botocore[crt] awscrt boto3 -t /var/task/"
      
    • 如果准备用Lambda层托管依赖,安装到python子目录:
      mkdir -p python/lib/python3.11/site-packages
      docker run -v "$PWD:/var/task" public.ecr.aws/lambda/python:3.11 /bin/bash -c "pip install botocore[crt] awscrt boto3 -t /var/task/python/lib/python3.11/site-packages/"
      
  3. 将生成的依赖文件和你的Lambda代码一起打包成zip。

解决方案2:使用Lambda层托管依赖

把依赖单独打包成Lambda层,既能避免代码打包时的路径问题,也方便后续复用:

  1. 按照上面的步骤用Docker构建好python目录结构的依赖
  2. 将python文件夹打包成zip:
    zip -r cf-kvs-deps.zip python/
    
  3. 在AWS控制台创建新的Lambda层,上传这个zip包,然后将该层附加到你的目标Lambda函数上。

额外检查点

  • 不要手动复制本地的botocore、awscrt、boto3文件夹到zip,本地环境的依赖和Lambda环境不兼容,必须用匹配的环境构建。
  • 确认Lambda函数的Python运行时版本和你构建依赖时使用的版本一致(比如都是3.11)。
  • 查看Lambda函数的CloudWatch日志,确认错误是否还是依赖缺失,若提示具体系统库找不到,说明必须用Docker构建来获取兼容的二进制依赖。

内容的提问来源于stack exchange,提问作者Tomer Fikler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:16:06