Тайм-аут работы при вызове клиентского API aws boto3

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

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(, 'Соединение с клеем) Тайм-аут.eu-central-1.amazonaws.com (время ожидания соединения =60)'))

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

1 ответ

Попробуйте использовать прокси при создании клиента 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 развертываются в кластере с помощью клея, а искра отправляется в каталог / tmp.

У меня была аналогичная проблема, и я сделал то же самое, используя публичную библиотеку из glue:s3://aws-glue-assets-eu-central-1/scripts/lib/utils.py

У меня была аналогичная проблема, когда я запускал эту команду из Glue Python Shell.

Итак, я создал конечную точку (VPC->Endpoints) для службы Glue (имя службы: "com.amazonaws.eu-west-1.glue"), она была назначена той же подсети и группе безопасности, что и используемое связующее соединение. в задании Glue Python Shell.

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

client = boto3.client('glue',region_name='eu-central-1')
Другие вопросы по тегам