如何将AWS Glue连接到VPC并访问私有资源?

12
我正在尝试从AWS Glue作业连接到运行在VPC(私有子网)内的服务和数据库。私有资源不应公开暴露(例如,移动到公共子网或设置公共负载均衡器)。
不幸的是,AWS Glue似乎不支持在用户定义的VPC中运行。 AWS提供了Glue Database Connections,当与Glue SDK一起使用时,会在指定的VPC内为Glue / Spark工作节点设置弹性网络接口。然后,网络接口将通过隧道将流量从Glue传输到VPC内的特定数据库。但是,这需要特定数据库的位置和凭据,并且不清楚是否会隧道其他流量(例如,对服务的REST调用)通过VPC。
是否有可靠的方法设置Glue-> VPC连接,以通过VPC隧道所有流量?

难道没有为Glue提供VPC接口端点吗?(https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoint.html) - Marcin
1
@Marcin VPC 端点只允许在私有子网中没有 Internet 访问的资源能够调用 AWS Glue API。这允许来自 VPC 内部的网络连接访问 Glue,而这个问题是关于允许来自 Glue 内部的连接访问 VPC。 - Mark B
@MarkB 我明白了,谢谢。我误解了问题。 - Marcin
2
是的,数据库连接是唯一的方法,而且它不必有效。请查看由AWS发布的Cloudformation示例,它运行一个Python shell作业,仅创建虚假连接,但具有正确的子网详细信息。 - Farid Nouri Neshat
这个临时方法对我很有效。我的VPC中有MongoDB 4.x。我在GUI中为它创建了一个Glue连接。测试连接失败了(AWS正在解决),但我的VPC设置是正确的。我创建了一个新的作业,并勾选了“目录选项”>“使用Glue数据目录作为Hive元存储”的选项。接下来,我选择了刚刚设置的Glue连接。这使我能够使用elasticsearch-spark-20_2.11-7.10.1.jar在我的脚本中连接到MongoDB。理论上,当Glue连接被修复后,作业将被重新编写以使用它。但这个解决方法正在成功运行。 - Matthew
2个回答

10
你可以使用 NETWORK 连接类型创建数据库连接,并在 Glue 作业中使用该连接。这将允许你的作业调用 VPC 内的 REST API 或任何其他资源。

enter image description here

https://docs.aws.amazon.com/glue/latest/dg/connection-using.html

网络(指Amazon Virtual Private Cloud环境(Amazon VPC)内连接到数据源的连接)

enter image description here

https://docs.aws.amazon.com/glue/latest/dg/connection-JDBC-VPC.html

为了让AWS Glue与其组件通信,需指定一个安全组,并为所有TCP端口创建一个自引用的入站规则。通过创建自引用规则,您可以将源限制为VPC中相同的安全组,而不是向所有网络开放。

enter image description here


谢谢!这似乎是最近添加的新功能。 - Turiphro

1
然而,这需要特定数据库的位置和凭据,并且不清楚其他流量(例如对服务的REST调用)何时通过VPC进行隧道传输。
我同意文档很令人困惑,但根据您链接的页面上的本段,似乎确实所有流量都通过VPC进行隧道传输,因为一旦您配置了VPC访问权限,就必须拥有NAT网关或VPC终端节点才能允许Glue访问VPC外部的内容。
所有被作业访问的JDBC数据存储库必须从VPC子网中可用。要从VPC内部访问Amazon S3,需要VPC终端节点。如果作业需要访问VPC资源和公共互联网,则VPC需要在VPC内部具有网络地址转换(NAT)网关。

问题在于你无法“配置具有VPC访问权限的Glue”;这个链接没有在任何地方配置。该链接仅在使用预定义连接时隐式出现。您可以尝试使用虚假连接并忽略异常,但这听起来不像是可靠的工程方法。 - Turiphro
是的,我同意,但如果您还没有在VPC中想要连接的数据源,为什么要让Glue作业在VPC中运行呢? - Mark B
目标是访问内部REST服务(Fargate)。 - Turiphro
有时还会查询数据库;SDK仅允许数据接收器(而非SQL查询),凭据会轮换(因此在“Glue Connection”创建期间不应固定)。将VPC连接与内部数据库接收器SDK分开可能会有所帮助。对我来说,这两个功能似乎是不同的。 - Turiphro
1
我同意,这些功能应该是分开的。考虑到当前的Glue API,看起来你只能使用假的JDBC连接,但正如你所说,这远非理想。你唯一能做的就是向AWS提交一个功能请求。 - Mark B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接