使用Terraform操作AWS Glue时无法导入psycopg2模块问题
解决AWS Glue 4.0 Job无法导入psycopg2的问题
核心原因
Glue 4.0基于Python 3.10,标准psycopg2包依赖系统libpq库,但Glue环境未预装该库,直接使用普通whl或PyPI源的包会因底层依赖缺失报错。必须使用psycopg2-binary或编译好的兼容Glue环境的psycopg2包。
具体解决步骤
1. 替换为psycopg2-binary包
放弃标准psycopg2,改用预编译的psycopg2-binary(内置libpq依赖),修改Terraform的Glue Job配置:
resource "aws_glue_job" "example_job" { name = "example-glue-job" role_arn = aws_iam_role.glue_role.arn command { name = "glueetl" script_location = "s3://your-bucket/scripts/your-script.py" python_version = "3" # 直接指定PyPI源的psycopg2-binary版本 additional_python_modules = "psycopg2-binary==2.9.9" # 或引用S3上的兼容whl包(需对应Python3.10、x86_64架构) # additional_python_modules = "s3://your-bucket/packages/psycopg2_binary-2.9.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" } glue_version = "4.0" }
2. 生成兼容标准psycopg2的whl包(可选)
若坚持用标准psycopg2,需生成适配Glue环境的包:
- 在Amazon Linux 2(x86_64)EC2实例上安装Python3.10
- 执行命令编译生成兼容whl:
pip wheel psycopg2==2.9.9 --no-binary :all: - 将生成的whl上传至S3,再通过
additional_python_modules引用
3. 验证权限与配置
- 确保Glue Job的IAM角色拥有目标S3包路径的
s3:GetObject权限 - 检查
additional_python_modules参数无拼写错误,包版本与Python3.10兼容
4. 规范脚本导入
脚本中直接使用标准导入语句:
import psycopg2
psycopg2-binary的导入包名仍为psycopg2,无需修改代码。
常见误区
- 禁止在Glue脚本中执行
pip install手动安装依赖,Glue环境不允许此类操作 - 不要使用ARM架构编译的whl包,Glue运行环境为x86_64
内容的提问来源于stack exchange,提问作者elijahLogan
相关产品推荐
相关产品推荐

