调用aws-boto3客户端api时,粘合作业超时



我使用的是粘合控制台,而不是开发端点。涂胶作业可以使用以下代码访问胶水目录和表格

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = 
"glue-db", table_name = "countries")
print "Table Schema:", datasource0.schema()
print "datasource0", datasource0.show() 

现在我想从glue数据库glue数据库中获取所有表的元数据。我在awsglue.context api中找不到函数,因此我使用boto3。

client = boto3.client('glue', 'eu-central-1')
responseGetDatabases = client.get_databases()
databaseList = responseGetDatabases['DatabaseList']
for databaseDict in databaseList:
databaseName = databaseDict['Name']
print ("databaseName:{}".format(databaseName))
responseGetTables = client.get_tables( DatabaseName = databaseName, 
MaxResults=123)
print("responseGetDatabases{}".format(responseGetTables))
tableList = responseGetTables['TableList']
print("response Object{0}".format(responseGetTables))
for tableDict in tableList:
tableName = tableDict['Name']
print("-- tableName:{}".format(tableName))

代码在lambda函数中运行,但在glue-etl作业中失败,出现以下错误

botocore.vendored.requests.exceptions.ConnectTimeout:HTTPSConnectionPool(主机="glu.eu-central-1.amazonaws.com",端口=443):超过了url的最大重试次数:/(由ConnectTimeoutError(,"连接到glue.eucentral-1.amazonaws.com超时。(连接超时=60)")

问题似乎出在环境配置上。Glue VPC有两个子网private subnet:使用s3端点进行粘合,允许来自RDS安全组的入站流量。它有公用子网:在胶水vpc与nat网关。可以通过gate-nat网关访问专用子网。我不确定我在这里错过了什么。

在创建boto3客户端时尝试使用代理:

from pyhocon import ConfigFactory
service_name = 'glue'

default = ConfigFactory.parse_file('glue-default.conf')
override = ConfigFactory.parse_file('glue-override.conf')
host = override.get('proxy.host', default.get('proxy.host'))
port = override.get('proxy.port', default.get('proxy.port'))
config = Config()
if host and port:
config.proxies = {'https': '{}:{}'.format(host, port)}
client = boto3.Session(region_name=region).client(service_name=service_name, config=config)

glue-default.conf和glue-override.conf通过glue部署到集群中,而spark则提交到/tmp目录中。

我也遇到了类似的问题,我也用胶水使用公共图书馆:s3://aws-glue-assets-eu-central-1/scripts/lib/utils.py

您能通过显式指定区域来尝试如下创建boto客户端吗?

client = boto3.client('glue',region_name='eu-central-1')

我在Glue Python Shell中运行此命令时遇到了类似的问题。

因此,我为Glue服务(服务名称:"com.amazonaws.eu-west-1.Glue")创建了端点(VPC->Endpoints),这个端点被分配到与Glue Python Shell作业中使用的Glue Connection相同的子网和安全组。

相关内容

  • 没有找到相关文章

最新更新