从AWS Glue连接到DocumentDB

时间:2020-05-18 09:55:51

标签: mongodb amazon-web-services aws-glue aws-documentdb

对于当前的ETL作业,我试图在Glue中创建Python Shell Job。转换后的数据需要保留在DocumentDB中。我无法从Glue访问DocumentDB。

由于DocumentDb群集位于VPC中,因此我想创建一个接口网关来从Glue访问Document DB,但是DocumentDB并不是Interface Gateway中批准的服务之一。我将隧道视为建议的选项,但我不想这样做。

所以,我想知道是否有一种方法可以从Glue连接到DocumentDB。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我已经能够用胶水连接DocumentDb并使用S3中的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. 使用该数据库和表将其提取到您的documentdb中。