调用AWS Boto3客户端api时粘胶作业超时

时间:2019-01-04 22:30:45

标签: etl boto3 aws-glue aws-glue-data-catalog

我正在使用胶水控制台而不是dev端点。胶水作业可以使用以下代码访问胶水目录和表

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

现在,我想从胶水数据库胶数据库获取所有表的元数据。 我在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函数中运行,但在胶水etl作业中失败,并出现以下错误

botocore.vendored.requests.exceptions.ConnectTimeout:HTTPSConnectionPool(host ='glue.eu-central-1.amazonaws.com',port = 443):URL超过最大重试次数:/(由ConnectTimeoutError(,'连接到gum.eu-central-1.amazonaws.com的连接超时(连接超时= 60)'))

问题似乎出在环境配置中。胶水VPC有两个子网 专用子网:使用s3端点进行粘合,允许来自RDS安全组的入站流量。它有 公共子网:在带有nat网关的胶水vpc中。专用子网可通过网关nat访问。我不确定我在这里想念的是什么。

3 个答案:

答案 0 :(得分:0)

您可以通过明确指定区域来尝试按以下方式创建boto客户端吗?

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

答案 1 :(得分:0)

在创建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

答案 2 :(得分:0)

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

因此,我为Glue服务(服务名称:“ com.amazonaws.eu-west-1.glue”)创建了端点(VPC-> Endpoints),该端点被分配给与Glue Connection相同的子网和安全组。这是在Glue Python Shell Job中使用的。