【问题标题】:Connecting to DocumentDB from AWS Glue从 AWS Glue 连接到 DocumentDB
【发布时间】:2020-05-18 09:55:51
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 我确实试过这个。但是我面临的问题是,一旦我建立了与数据库的连接(MongoDB),我就无法安装其他库。在我的情况下,我使用 PyMongo,当我添加连接时,whl 文件不会从云中拉出库,但是当我没有明确添加连接时,库会在我运行作业时自动拉入。
  • 在 Glue 中使用连接时应注意的一件事是,弹性网络接口会从您指定的子网内的 IP 地址范围内分配一个私有 IP 地址。没有分配公共 IP 地址。设置一个 nat 网关,它应该允许作业从私有子网连接到互联网:aws.amazon.com/premiumsupport/knowledge-center/…
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我已经能够在 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. 使用该数据库和表将其摄取到您的文档数据库中。

    【讨论】:

    • 创建了一个爬虫,该爬虫创建了您的数据架构和一个源为 mongodb 的表在胶水目录中。当我尝试从目录创建动态框架时,它向我抛出了以下错误 IllegalArugmentException:缺少数据库名称。通过 spark.mongo.input.uri 设置............
    猜你喜欢
    • 2019-11-08
    • 2021-11-26
    • 1970-01-01
    • 2022-06-27
    • 2020-02-04
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    相关资源
    最近更新 更多