You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无互联网VPC下Glue Python Shell添加外部库及生成egg/whl问询

解决无互联网VPC下Glue Python Shell作业添加外部依赖的问题

我来帮你搞定这个问题——在无网VPC环境下给Glue Python Shell作业加外部依赖,核心思路是提前准备好离线包,而不是在作业运行时尝试在线安装。下面是一步步的具体操作:

一、提前生成离线Python包(whl/egg)

因为你的VPC没网,必须在有互联网的环境下先把pyathenapytest及其所有依赖包下载好,保存为Glue支持的whl/egg格式。建议用和Glue版本匹配的Python环境操作,避免兼容性问题(比如Glue 3.0对应Python 3.7,Glue 4.0对应Python 3.9)。

操作步骤:

  1. (可选但推荐)创建虚拟环境隔离本地环境:
# 以Python 3.7为例(对应Glue 3.0)
python3.7 -m venv glue-deps-venv
source glue-deps-venv/bin/activate
  1. pip download下载所有依赖到本地目录:
# 把pyathena、pytest及其依赖下载到local-packages文件夹
pip download pyathena pytest -d ./local-packages/

执行完后,local-packages目录里会出现所有需要的whl/egg文件(比如pyathena-3.10.0-py3-none-any.whlpytest-7.4.0-py3-none-any.whl等)。

二、上传离线包到S3

Glue需要从S3读取依赖包,所以把本地的包上传到你的S3存储桶:

# 替换成你的S3路径
aws s3 cp ./local-packages/ s3://your-glue-bucket/dependencies/python-packages/ --recursive

三、配置Glue Python Shell作业

  1. 打开AWS Glue控制台,找到你的Python Shell作业,点击编辑
  2. 作业参数区域,找到Python路径(Python path)字段,填入你的S3包路径:
    s3://your-glue-bucket/dependencies/python-packages/
    
    这个路径会让Glue自动加载该S3目录下的所有Python包。
  3. 确保你的Glue作业IAM角色拥有访问该S3路径的权限(需要s3:GetObject权限)。
  4. 保存作业配置。

四、修改Python脚本(移除在线安装代码)

删掉之前尝试在线安装的代码,直接导入依赖就行——因为Glue会自动加载S3上的包:

import pyathena
import pytest

def main():
    # 示例:用pyathena连接Athena
    from pyathena import connect
    cursor = connect(
        s3_staging_dir='s3://your-athena-staging-bucket/',
        region_name='us-east-1'
    ).cursor()
    cursor.execute("SELECT * FROM your_database.your_table LIMIT 5")
    results = cursor.fetchall()
    for row in results:
        print(row)

if __name__ == "__main__":
    main()

为什么之前的方法失败?

你之前用easy_install.main()尝试安装时,这个命令本质还是会去PyPI下载包,但你的VPC没有互联网连接,所以必然会出现连接超时/无法访问的错误。正确的思路是离线准备依赖包,让Glue直接加载S3上的本地包,而不是运行时在线下载。


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

火山引擎 最新活动