Redshift plpythonu函数导入boto3报No module named boto3如何解决
Redshift plpythonu函数无法导入boto3的解决方案
你遇到的报错是因为Redshift的PL/Python运行环境默认没有预装boto3第三方库,可通过以下步骤解决:
- 首先确认你使用的PL/Python版本:
plpythonu对应Python2.7,plpython3u对应Python3.x,需要在同版本Python、同架构的环境中安装boto3依赖,避免兼容问题。执行如下命令将依赖下载到指定目录:# 以Python2.7为例,Python3将pip改为对应pip3版本即可 pip install boto3 -t ./boto3_lib - 将
boto3_lib目录下的所有文件打包为zip压缩包,注意不要将外层boto3_lib文件夹一起打包,需要让所有依赖文件直接位于zip包的根目录。 - 将生成的zip包上传到和Redshift集群同区域的S3存储桶,同时给Redshift集群关联的IAM角色开通该S3路径的
s3:GetObject权限。 - 执行SQL命令在Redshift中导入boto3依赖库:
CREATE LIBRARY boto3 LANGUAGE plpythonu FROM 's3://<你的S3桶路径>/boto3_package.zip' IAM_ROLE 'arn:aws:iam::<你的AWS账号ID>:role/<Redshift关联的IAM角色名称>'; - 依赖库导入完成后,你原来编写的
aes_encrypt函数就可以正常导入boto3运行,不需要修改函数内部的import逻辑。
提示:如果Redshift集群部署在私有子网,需要配置S3 VPC端点保证可以拉取S3中的依赖包,调用KMS服务时也需要配置KMS VPC端点或者公网出口保证网络连通。
内容的提问来源于stack exchange,提问作者Khoa
相关产品推荐
相关产品推荐

