AWS Glue Studio运行Python脚本无法在S3创建文件的解决方法
AWS Glue Studio脚本无法在S3生成文件的解决方法
问题描述
我希望在AWS Glue Studio中运行测试脚本,在指定S3目录s3://test-dir-awsglue/创建myfile.txt文件。该脚本在本地运行正常,但部署到AWS Glue Studio后未在S3生成任何输出,求解决。
测试脚本代码:
import sys import os # Specify the path path = '.' # path = 's3://test-dir-awsglue/' # Specify the file name file = 'myfile.txt' # Creating a file at specified location with open(os.path.join(path, file), 'w') as fp: pass # To write data to new file uncomment # this fp.write("New file created")
作业相关截图:
- 作业基础配置截图
- 脚本参数配置截图
- 作业运行状态截图
- 权限配置截图
解决方法
1. 替换文件操作方式:使用AWS SDK写入S3
Python原生open()函数不支持直接操作S3路径,Glue运行环境无法通过本地文件系统的方式写入S3。必须使用AWS官方SDK(boto3)来完成S3对象的创建,修改后的脚本如下:
import boto3 # 初始化S3客户端 s3_client = boto3.client('s3') # 定义S3存储桶和文件键(路径) bucket_name = 'test-dir-awsglue' file_key = 'myfile.txt' # 创建空文件(如需写入内容,将Body参数替换为b"你要写入的内容") s3_client.put_object( Bucket=bucket_name, Key=file_key, Body=b'' )
2. 确认Glue作业角色的S3权限
检查Glue作业使用的IAM角色是否具备s3:PutObject权限,确保角色策略包含以下内容(根据实际存储桶调整):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::test-dir-awsglue/*" } ] }
3. 避免本地路径与S3路径混淆
注释或删除本地路径path = '.'的配置,不要用os.path.join拼接S3路径——S3是对象存储,并非本地文件系统,该拼接方式无效。
4. 通过日志排查问题
在Glue控制台进入作业运行详情,查看CloudWatch日志:
- 若出现
AccessDenied,说明角色权限不足,补充S3写入权限 - 若出现
NoSuchBucket,检查存储桶名称是否拼写错误 - 若出现其他IO错误,确认S3路径格式是否正确
内容的提问来源于stack exchange,提问作者user2205916
相关产品推荐
相关产品推荐

