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

部署Python Lambda集成OpenSearch时awswrangler模块导入失败排查

Lambda依赖未安装的验证与解决方法

问题背景

我按照AWS CDK示例部署Python Lambda对接OpenSearch端点,Lambda目录包含处理程序文件及requirements.txt,CDK代码如下:

const lambdaFunction: lambda.Function = new lambda.Function(this, id, {
    runtime: lambda.Runtime.PYTHON_3_9,
    handler: 'index.handler',
    code: lambda.Code.fromAsset(`lambda`)}
);

requirements.txt内容:

awswrangler[opensearch]
boto3

调用Lambda时出现“Internal server error”,CloudWatch日志报错:

[ERROR] Runtime.ImportModuleError: Unable to import module 'index': No module named 'awswrangler'
Traceback (most recent call last):

Lambda代码导入了awswrangler:

import awswrangler as wr

# 此配置在CDK中设置
open_search_domain_endpoint = os.environ.get('DOMAIN_ENDPOINT')
os_client = wr.opensearch.connect(
    host=open_search_domain_endpoint,
)

看起来requirements.txt中的依赖未安装,需要验证依赖状态并解决模块导入错误。


一、验证依赖是否已安装的方法

  • 查看部署包内容
    1. 找到CDK构建后cdk.out目录下对应Stack的资产文件夹,找到Lambda的.zip部署包
    2. 解压该压缩包,检查根目录或python文件夹下是否存在awswrangler文件夹,无则说明依赖未打包
  • Lambda控制台检查
    1. 登录AWS控制台进入Lambda服务,找到目标函数
    2. 切换到「代码」标签页,查看代码源文件列表,确认是否有awswrangler相关模块文件夹
  • 临时调试代码输出
    在Lambda处理函数开头添加以下代码,部署后触发函数,查看CloudWatch日志的依赖列表:
    import pkg_resources
    installed_packages = pkg_resources.working_set
    installed_packages_list = sorted(["%s==%s" % (i.key, i.version) for i in installed_packages])
    print(installed_packages_list)
    
    日志中若无awswrangler,则依赖未安装

二、解决依赖未安装的问题

当前CDK代码直接导入本地文件夹,未配置依赖安装步骤,可通过以下方式处理:

方式1:使用Lambda层管理依赖(推荐)

创建依赖层并关联到Lambda函数,修改CDK代码:

import { PythonLayerVersion } from 'aws-cdk-lib/aws-lambda-python-alpha';

// 创建包含依赖的层
const dependenciesLayer = new PythonLayerVersion(this, 'WranglerLayer', {
  entry: './lambda', // 指向包含requirements.txt的目录
  compatibleRuntimes: [lambda.Runtime.PYTHON_3_9],
});

// 创建Lambda并关联层
const lambdaFunction: lambda.Function = new lambda.Function(this, id, {
    runtime: lambda.Runtime.PYTHON_3_9,
    handler: 'index.handler',
    code: lambda.Code.fromAsset(`lambda`),
    layers: [dependenciesLayer],
});

注意:需先安装依赖包:npm install @aws-cdk/aws-lambda-python-alpha

方式2:本地手动打包依赖

  1. 在Lambda目录下创建python文件夹
  2. 执行命令将依赖安装到该文件夹(根据Lambda架构调整平台参数):
    # x86_64架构
    pip install -r requirements.txt -t ./python --platform manylinux2014_x86_64 --only-binary=:all:
    # ARM架构
    pip install -r requirements.txt -t ./python --platform manylinux2014_aarch64 --only-binary=:all:
    
  3. 确保python文件夹与index.py同目录,重新执行CDK部署

方式3:使用PythonFunction构造自动处理依赖

替换原Function为专门的Python函数构造,它会自动读取requirements.txt并安装依赖:

import { PythonFunction } from 'aws-cdk-lib/aws-lambda-python-alpha';

const lambdaFunction = new PythonFunction(this, id, {
  runtime: lambda.Runtime.PYTHON_3_9,
  entry: './lambda',
  index: 'index.py',
  handler: 'handler',
});

内容的提问来源于stack exchange,提问作者219CID

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:46:25