AWS Lambda函数无法导入paramiko模块问题求助
解决AWS Lambda无法导入paramiko模块的问题
问题情况
使用Python 3.9编写AWS Lambda函数,通过pip install paramiko -t .安装模块并打包成.zip作为Lambda Layer关联后,测试时仍报错:
Unable to import module 'lambda_function': No module named 'paramiko'
Lambda函数代码:
import io import boto3 import paramiko ACCESS_KEY = '...' PRIVATE_ACCESS_KEY = '...' AWS_REGION = 'eu-central-1' INSTANCE = ['...'] EC2_IP = '...' def lambda_handler(event, context): #start EC2 instance ec2 = boto3.client('ec2', region_name=AWS_REGION) ec2.start_instances(InstanceIds=INSTANCE) print('Started the instance: ' + str(INSTANCE))
解决步骤
1. 修正Layer的打包结构
Lambda Layer对Python模块的存放路径有严格要求,必须放在python/lib/python3.9/site-packages/目录下,否则Lambda无法识别。之前的打包方式会把模块直接放在zip根目录,导致加载失败。正确操作:
# 创建符合要求的目录结构 mkdir -p python/lib/python3.9/site-packages # 将paramiko安装到指定目录 pip install paramiko -t python/lib/python3.9/site-packages/ # 打包成zip文件 zip -r paramiko-layer.zip python/
重新上传这个修正后的zip作为新的Layer版本。
2. 确保模块与Lambda运行环境兼容
如果在本地Windows/macOS直接安装paramiko,依赖的C扩展库可能和Lambda的Amazon Linux 2环境不兼容,导致无法加载。建议用Docker模拟Lambda环境打包:
docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.9:latest /bin/sh -c "pip install paramiko -t python/lib/python3.9/site-packages/ && zip -r paramiko-layer.zip python/"
3. 检查Layer关联配置
进入Lambda函数的配置页面,在Layers部分确认已添加正确的paramiko Layer版本,并且保存了配置。有时候会出现添加后未保存的情况,导致Layer未生效。
4. 排除代码包冲突
确保你的Lambda函数代码包中没有重复包含paramiko模块,避免和Layer中的模块产生冲突。
内容的提问来源于stack exchange,提问作者J.Fasterling
相关产品推荐
相关产品推荐

