2

对于当前的 ETL 工作,我正在尝试Python Shell Job在 Glue 中创建一个。转换后的数据需要保存在 DocumentDB 中。我无法从 Glue 访问 DocumentDB。

由于 DocumentDb 集群驻留在 VPC 中,我想创建一个接口网关以从 Glue 访问 Document DB,但 DocumentDB 不是接口网关中批准的服务之一。我认为隧道是一个建议的选择,但我不想这样做。

所以,我想知道有没有办法从 Glue 连接到 DocumentDB。

4

3 回答 3

2

在 AWS Glue 中创建一个虚拟 JDBC 连接。您不需要进行测试连接,但这将允许在 VPC 中创建 ENI。将此连接附加到您的 python shell 作业。这将允许您与资源进行交互。

于 2020-05-18T12:42:05.457 回答
1

您是否尝试过在粘合连接中使用 mongo db 连接,我们可以通过该选项连接文档 db。

于 2020-05-19T18:18:36.633 回答
1

我已经能够在 S3 中使用胶水连接 DocumentDb 并使用 csv 摄取数据,这是执行此操作的脚本

# Constants
data_catalog_database = 'sample-db'
data_catalog_table = 'data'

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

spark_context = SparkContext()
glue_context = GlueContext(spark_context)
job = Job(glue_context)
job.init(args['JOB_NAME'], args)

# Read from data source
## @type: DataSource
## @args: [database = "glue-gzip", table_name = "glue_gzip"]
## @return: dynamic_frame
## @inputs: []
dynamic_frame = glue_context.create_dynamic_frame.from_catalog(
    database=data_catalog_database,
    table_name=data_catalog_table
)

documentdb_write_uri = 'mongodb://yourdocumentdbcluster.amazonaws.com:27017'
write_documentdb_options = {
    "uri": documentdb_write_uri,
    "database": "yourdbname",
    "collection": "yourcollectionname",
    "username": "###",
    "password": "###"
}

# Write DynamicFrame to MongoDB and DocumentDB
glue_context.write_dynamic_frame.from_options(dynamic_frame, connection_type="documentdb",
                                             connection_options=write_documentdb_options)

总之:

  1. 创建一个爬虫来创建您的数据和表的架构,该表可以存储在 S3 存储桶中。
  2. 使用该数据库和表将其摄取到您的文档数据库中。
于 2020-07-17T00:57:59.393 回答