тайм-аут работы при вызове клиентского API aws boto3 - PullRequest
0 голосов
/ 05 января 2019

Я использую консоль клея, а не конечную точку разработчика. Клеевая работа может получить доступ к каталогу клея и таблице, используя код ниже

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

Теперь я хочу получить метаданные для всех таблиц из базы данных glue glue-db. Я не смог найти функцию в api awsglue.context, поэтому я использую 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))

код выполняется в лямбда-функции, но не выполняется в задании glue etl со следующей ошибкой

botocore.vendored.requests.exceptions.ConnectTimeout: HTTPSConnectionPool (host = 'glue.eu-central-1.amazonaws.com', port = 443): максимальное количество повторных попыток превышено с помощью URL: / (вызвано ConnectTimeoutError (, ' Тайм-аут соединения с glue.eu-central-1.amazonaws.com (тайм-аут соединения = 60) '))

Кажется, проблема в конфигурации среды. Клей VPC имеет две подсети частная подсеть: с конечной точкой s3 для клея, позволяет входящий трафик из группы безопасности RDS. Она имеет публичная подсеть: в клей vpc с нат шлюзом. Частная подсеть доступна через шлюз nat Gateway. Я не уверен, что мне здесь не хватает.

1 Ответ

0 голосов
/ 07 января 2019

Можете ли вы попробовать создание клиента boto, как указано ниже, явно указав регион?

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