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

3 分钟阅读
0

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

解决方法

检查以下常见问题。

网络问题

  • **检查与 JDBC 数据存储的连接:**AWS Glue 会在连接的子网中创建带私有 IP 地址的弹性网络接口。这意味着 AWS Glue 无法使用公共互联网连接至数据存储。

  • 如果数据存储位于 Amazon Virtual Private Cloud(Amazon VPC)外部,则子网的路由表必须具有指向公有子网中的 NAT 网关的路由。否则,连接会超时。
    **注意:**Amazon VPC 外部的数据存储可能是本地数据存储或具有公有主机名的 Amazon Relational Database Service(Amazon RDS)资源。

  • 如果数据存储位于 Amazon VPC 中,请确认连接的安全组和网络访问控制列表允许流量进入数据存储。

  • **检查连接的安全组:**与连接关联的某个安全组必须具有对所有 TCP 端口开放的自引用入站规则。同样,其中一个安全组也必须对所有出站流量开放。您可以使用自引用规则来限制流向 Amazon VPC 的出站流量。有关更多信息,请参阅 Setting up a VPC to connect to JDBC Data Stores

  • **检查空闲 IP 地址的数量:**子网中的空闲 IP 地址数必须大于为该作业指定的数据处理单元(DPU)数。这样才能使 AWS Glue 在指定的子网中创建弹性网络接口。

  • **确认子网可以访问 Amazon Simple Storage Service(Amazon S3):**在子网的路由表中提供 Amazon S3 端点或指向 NAT 网关的路由。有关更多信息,请参阅 Error: Could not find S3 endpoint or NAT Gateway for subnetId in VPC

  • **检查是否存在 AWS KMS VPC 端点:**如果 AWS Glue Data Catalog 正在加密连接,请确保存在指向 AWS KMS 的路由。例如,此路由可以是 AWS KMS VPC 接口端点。有关更多信息,请参阅 Connecting to AWS KMS through a VPC endpoint

  • **检查 AWS Glue 连接和数据库是否使用不同的 VPC:**当满足以下条件时,测试连接会失败并出现超时错误:
    数据库不可公开访问。
    AWS Glue 任务附加到的连接使用了不同 VPC 且没有 VPC 对等连接。
    要解决此问题,可以创建专用 AWS Glue VPC 并根据需要设置与其他 VPC 的相应 VPC 对等关系。有关更多信息,请参阅 Connect to and run ETL jobs across multiple VPCs using a dedicated AWS Glue VPC

  • **检查与本地数据存储的连接:**如果正在测试 AWS Glue 与本地数据库的连接,最佳做法是连接到用于该连接的同一 VPC、子网和安全组中的 Amazon Elastic Compute Cloud(Amazon EC2)实例。然后,从 Amazon EC2 实例运行以下测试。如果在运行命令时遇到问题,请检查 VPN 以及 VPC、子网、安全组和网络访问控制列表(ACL)的配置。确保这些配置不会阻止从 VPC 连接到本地数据库,也不会造成本地数据库出现防火墙问题。有关更多信息,请参阅 How to access and analyze on-premises data stores using AWS Glue

$ telnet hostname port
$ nc -zv hostname port
$ dig hostname
$ traceroute -AnT -p IP port

身份验证问题

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

其他故障排查

  • 检查连接类型:

  • 请务必选择正确的连接类型。当选择 Amazon RDSAmazon Redshift 连接类型时,AWS Glue 会自动填充 VPC、子网和安全组。

  • 如果需要连接到 MySQL,请注意测试连接功能仅适用于 MySQL 5.x 版本。内置 AWS Glue JDBC 驱动程序不支持 MySQL 8 版本。如果使用比 MySQL 5.x 版本更新的版本测试连接,可能会出现连接超时错误。但是,仍然可以通过某种解决方法,使用 AWS Glue 连接来连接到 MySQL 8 版本。通过为 MySQL 8 版本及更高版本手动提供兼容的驱动程序 JAR,在提取、加载和转换(ETL)任务上使用该连接。然后,将此 JAR 文件加载到任务中,方法与在 Spark 任务中加载 JDBC 驱动程序类似。有关更多信息,请参阅 Connection types and options for ETL in AWS Glue

  • 排查 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

相关信息

Defining connections in the AWS Glue Data Catalog

Troubleshooting errors in AWS Glue

AWS 官方
AWS 官方已更新 3 年前