AWS Glue 测试连接失败

上次更新时间:2019 年 11 月 7 日

我该如何排查 AWS Glue 中的测试连接失败问题?

解决方法

检查以下常见问题。

网络问题

  • 检查与 JDBC 数据存储的连接:AWS Glue 使用连接子网中的私有 IP 地址创建弹性网络接口。这意味着 AWS Glue 无法使用公共互联网连接到数据存储。如果数据存储位于 VPC 外部,例如,本地数据存储或具有公共主机名的 Amazon Relational Database Service (Amazon RDS) 资源,则子网的路由表必须有指向公共子网内 NAT 网关的路由。否则,连接将会超时。若数据存储位于 VPC 内部,确认连接的安全组和网络访问控制表(网络 ACL)允许传入数据存储的流量。
  • 检查连接的安全组:与连接关联的其中一个安全组必须有对所有 TCP 端口开放的自引用入站规则。同样地,其中也要有一个安全组必须对所有出站流量开放。您可以使用自引用规则限制传入 VPC 的出站流量。有关更多信息,见设置 VPC 以连接到 JDBC 数据存储
  • 检查空闲 IP 地址的数量:子网中空闲 IP 地址的数量必须大于为该作业指定的数据处理单元 (DPU) 的数量。这让 AWS Glue 可以在指定子网中创建弹性网络接口。
  • 确认子网可以访问 Amazon Simple Storage Service (Amazon S3):提供 Amazon S3 终端节点 或指向您的子网路由表中 NAT 网关的路由。有关更多信息,见错误:在 VPC 中找不到 subnetId 的 S3 终端节点或 NAT 网关

身份验证问题

  • 选择正确的 IAM 角色:您为测试连接选择的 AWS Identity and Access Management (IAM) 角色必须与 AWS Glue 存在信任关系。其中一种简单的做法是,选择具有AWSGlueServiceRole 策略的服务关联角色。
  • 如果连接密码使用 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 语法:不同的数据库引擎有不同的语法要求。有关更多信息,请见将 JDBC 连接添加到数据存储并查看 JDBC URL 下方的示例。

其他问题排查方法

  • 连接类型:确保选择正确的连接类型。当您为连接类型选择 Amazon RDSAmazon Redshift 时,AWS Glue 会自动填充 VPC、子网和安全组。
  • DNS 问题:要排查 DNS 问题,使用数据存储的公共或私有 IP 地址作为 AWS Glue 连接的 JDBC URL。在执行此操作时,您必须取消选中需要 SSL 连接, 因为您不再使用域名。
  • 不兼容的驱动程序:如果因驱动程序不兼容而导致连接失败,在作业属性中以额外 JAR 文件的方式提供正确的驱动程序,以及失败的连接名称。(当您将连接名称指定为作业属性时,AWS Glue 会使用连接的网络设置,例如,VPC 和子网。) 然后,通过使用您在作业属性中提供的 JAR 文件手动创建 Apache Spark 数据框架来覆盖默认的 AWS Glue 数据存储。在创建数据框架后,您可以选择将其转换为 AWS Glue 动态框架。有关更多信息,见 fromDF
  • 如果 JDBC 数据存储可公开访问:使用 MySQL Workbench 和 JDBC URL 连接到数据存储。或者,启动具有 SSH 访问权限的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,该实例可访问用于连接的相同子网及安全组。然后,通过 SSH 连接实例,并运行以下命令测试连接。
$ dig hostname
$ nc -zv hostname port