我使用的是胶水控制台而不是开发端点。胶水作业能够使用以下代码访问胶水目录和表格
datasource0 = glueContext.create_dynamic_frame.from_catalog(database =
"glue-db", table_name = "countries")
print "Table Schema:", datasource0.schema()
print "datasource0", datasource0.show()
现在我想从胶水数据库glue-db 中获取所有表的元数据。我在 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(, 'Connection to glue .eu-central-1.amazonaws.com 超时。(连接超时=60)'))
问题似乎出在环境配置中。Glue VPC 有两个子网私有子网:使用 s3 端点进行粘合,允许来自 RDS 安全组的入站流量。它有公共子网:在带有 nat 网关的胶水 vpc 中。私有子网可通过门 nat 网关访问。我不确定我在这里缺少什么。