为什么我的 AWS Glue 测试连接失败?

上次更新日期:2021 年 7 月 27 日

我希望排查 AWS Glue 中的测试连接失败问题。

解决方法

检查以下常见问题。

网络问题

  • 检查与 JDBC 数据存储的连接:Amazon Glue 使用连接子网中的私有 IP 地址创建弹性网络接口。这意味着 AWS Glue 无法使用公共互联网连接到数据存储。
    • 如果数据存储位于 Amazon Virtual Private Cloud (Amazon VPC) 之外,则子网的路由表必须有通往公有子网中 NAT 网关的路由。否则,连接将会超时。
      注意:Amazon VPC 之外的数据存储可能是本地部署数据存储,或带有公有主机名的 Amazon Relational Database Service (Amazon RDS) 资源。
    • 若数据存储位于 Amazon VPC 内部,确认连接的安全组和网络访问控制列表(网络 ACL)允许传入数据存储的流量。
  • 检查连接的安全组:与连接关联的其中一个安全组必须有对所有 TCP 端口开放的自引用入站规则。同样地,其中也要有一个安全组必须对所有出站流量开放。您可以使用自引用规则限制传入 Amazon VPC 的出站流量。有关更多信息,请参阅设置 VPC 以连接到 JDBC 数据存储
  • 检查空闲 IP 地址的数量:子网中空闲 IP 地址的数量必须大于为该作业指定的数据处理单元 (DPU) 的数量。这让 AWS Glue 可以在指定子网中创建弹性网络接口。
  • 确认子网可以访问 Amazon Simple Storage Service (Amazon S3):提供 Amazon S3 终端节点或指向您的子网路由表中 NAT 网关的路由。有关更多信息,请参阅错误:在 VPC 中找不到 subnetId 的 S3 端点或 NAT 网关
  • 检查您是否有 AWS KMS VPC 终端节点:如果您的 AWS Glue 数据目录正在加密连接,请确保您有指向 AWS KMS 的路由。例如,此路由可以是 AWS KMS VPC 接口端点。有关更多信息,请参阅通过 VPC 终端节点连接到 Amazon KMS
  • 检查 AWS Glue 连接和数据库是否使用不同的 VPC:当满足以下条件时,测试连接失败并显示超时错误:
    数据库不可公开访问。
    AWS Glue 任务附加到使用不同 VPC 的连接,而不使用 VPC 对等连接。
    可以通过创建专用 AWS Glue VPC 并根据需要与您的其他 VPC 设置相应的 VPC 对等连接来解决此问题。有关更多信息,请参阅使用专用 AWS Glue VPC 跨多个 VPC 连接并运行 ETL 任务
  • 检查与本地部署数据存储的连接:如果您正在测试与本地数据库的 AWS Glue 连接,那么最佳实践是连接到用于连接的同一个 VPC、子网和安全组中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。然后,从 Amazon EC2 实例运行以下测试。如果您在运行命令时遇到问题,请检查 VPN 以及 VPC、子网、安全组和网络访问控制列表 (ACL) 的配置。请确保这些配置不会阻止从 VPC 到本地数据库的连接,也不会从本地部署数据库造成防火墙问题。如需更多信息,请参阅如何使用 AWS Glue 访问和分析本地部署数据存储
$ telnet hostname port
$ nc -zv hostname port
$ dig hostname
$ traceroute -AnT -p IP port

身份验证问题

  • 选择正确的 IAM 角色:您为测试连接选择的 Amazon Identity and Access Management (IAM) 角色必须与 Amazon Glue 存在信任关系。其中一种简单的做法是,选择附加了 AWSGlueServiceRole 策略的服务关联角色。
  • 检查连接 IAM 角色:如果连接密码使用 AWS Key Management Service (AWS KMS) 进行加密,则确认连接的 IAM 角色允许为该密钥执行 kms:Decrypt 操作。有关更多信息,请参阅在 AWS Glue 中设置加密
  • 检查连接日志:测试连接的日志位于 /aws-glue/testconnection/output 下方的 Amazon CloudWatch Logs 中。检查日志以查看错误消息。
  • 检查 SSL 设置:如果数据存储针对特定用户有 SSL 连接要求,确保在控制台创建连接时选择需要 SSL 连接。若数据存储不支持 SSL,不要选择此选项。
  • 检查 JDBC 用户名和密码:访问 JDBC 数据存储的用户必须有足够的访问权限。例如,AWS Glue 爬网程序需要“选择”权限。要写入数据存储的作业需要“插入”、“更新”和“删除”权限。
  • 检查 JDBC URL 语法:不同的数据库引擎有不同的语法要求。有关更多信息,请参阅添加 Amazon Glue 连接并查看 JDBC URL 下方的示例。

其他问题排查方法

  • 检查连接类型:
    • 确保选择正确的连接类型。当您为连接类型选择 Amazon RDSAmazon Redshift 时,AWS Glue 会自动填充 VPC、子网和安全组。
    • 如果您需要连接到 MySQL,则请注意测试连接功能仅适用于 MySQL 5.x 版本。内置的 AWS Glue JDBC 驱动程序不支持 MySQL 版本 8。如果您对照比 5.x 版本更新的 MySQL 版本测试连接,则可能会出现连接超时错误。但是,您仍然可以利用解决方法,使用 AWS Glue 连接来连接到 MySQL 版本 8。通过手动提供适用于 MySQL 版本 8 及更高版本的兼容驱动程序 JAR,在提取、加载和转换 (ETL) 任务上使用连接。然后,将此 JAR 文件加载到您的任务中,与在 Spark 任务上加载任何 JDBC 驱动程序的方式类似。有关更多信息,请参阅 AWS Glue 中的 ETL 的连接类型和选项
  • 排查 DNS 问题:要排查 DNS 问题,使用数据存储的公有或私有 IP 地址作为 AWS Glue 连接的 JDBC URL。在执行此操作时,您必须取消选中需要 SSL 连接,因为您不再使用域名。
  • 检查驱动程序是否不兼容:如果因驱动程序不兼容而导致连接失败,在任务属性中以额外 JAR 文件的方式提供正确的驱动程序,以及失败的连接名称。(当您将连接名称指定为任务属性时,AWS Glue 会使用连接的联网设置,例如,VPC 和子网。) 然后,通过使用您在任务属性中提供的 JAR 文件手动创建 Apache Spark 数据框架来覆盖默认的 AWS Glue 数据存储。在创建数据框架后,您可以选择将其转换为 AWS Glue DynamicFrame。有关更多信息,请参阅 fromDF
  • 检查 JDBC 数据存储是否可公开访问:使用 MySQL Workbench 和 JDBC URL 连接到数据存储。或者,启动具有 SSH 访问权限的 Amazon EC2 实例,该实例可访问用于连接的相同子网及安全组。然后,通过 SSH 连接实例,并运行以下命令测试连接。
$ dig hostname
$ nc -zv hostname port

这篇文章对您有帮助吗?


您是否需要账单或技术支持?