我想对 AWS Glue 中的测试连接失败问题进行故障排除。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
要解决您在 AWS Glue 中测试连接失败的问题,请检查您的网络和身份验证连接。
网络问题
检查与 JDBC 数据存储的连接
AWS Glue 会在连接的子网中创建包含私有 IP 地址的弹性网络接口。存储在 Amazon Virtual Private Cloud (Amazon VPC) 之外的数据要求子网的路由表在公有子网中包含 NAT 网关。否则,连接会超时。
**注意:**存储在 Amazon VPC 之外的数据是本地数据存储或具有公有主机名的 Amazon Relational Database Service (Amazon RDS) 资源。
检查连接的安全组和网络访问控制列表(网络 ACL)是否允许流量访问存储在 VPC 中的数据。然后,使用 AWS Systems Manager 中的 AWSSupport-TroubleshootGlueConnection 运行手册。有关详细信息,请参阅如何对具有 JDBC 来源的 AWS Glue 连接的错误进行故障排除?
如果连接使用需要 NAT 网关或访问 AWS Secrets Manager 和 AWS Security Token Service (AWS STS),请附加端点。有关详细信息,请参阅连接到数据。
检查连接的安全组
与连接关联的某个安全组必须具有对所有 TCP 端口开放的自引用入站规则。其中一个安全组必须对所有出站流量开放。您可以使用自引用规则来限制流向 VPC 的出站流量。有关详细信息,请参阅设置 Amazon VPC 以建立从 AWS Glue 到 Amazon RDS 数据存储的 JDBC 连接。
检查空闲 IP 地址的数量
子网中空闲 IP 地址的数量必须大于为该作业指定的工作线程数。这样才能使 AWS Glue 在指定的子网中创建网络接口。
检查子网是否可以访问 Amazon S3
在子网的路由表中提供 Amazon Simple Storage Service (Amazon S3) 端点或指向 NAT 网关的路由。有关详细信息,请参阅错误: 在 VPC 中找不到 subnetId 的 S3 端点或 NAT 网关。
检查您是否有 AWS KMS VPC 端点
要加密 AWS Glue Data Catalog 的连接,请确保存在指向 AWS Key Management Service (AWS KMS) 的路由。例如,此路由可以是 AWS KMS VPC 接口端点。有关详细信息,请参阅 Connecting to AWS KMS through a VPC endpoint(通过 VPC 端点连接到 AWS KMS)。
检查 AWS Glue 连接和数据库是否使用不同的 VPC
当满足以下条件时,测试连接会失败并出现超时错误:
- 数据库不可公开访问。
- AWS Glue 作业附加到的连接使用了不同 VPC 且没有 VPC 对等连接。
要解决测试连接失败问题,请创建专用 AWS Glue VPC 并设置与您的其他 VPC 关联的 VPC 对等连接。
检查与本地数据存储的连接
要检查 AWS Glue 与连接到 Amazon Elastic Compute Cloud (Amazon EC2) 实例的本地数据库的连接,请运行以下命令:
$ telnet hostname port
$ nc -zv hostname port
$ dig hostname
$ traceroute -AnT -p IP port
检查您的 VPN 和 VPC、子网、安全组和网络 ACL 配置。确保这些配置不会阻止从 VPC 连接到本地数据库,也不会造成本地数据库出现防火墙问题。有关详细信息,请参阅 How to access and analyze on-premises data stores using AWS Glue(如何使用 AWS Glue 访问和分析本地数据存储)。
身份验证问题
选择正确的 IAM 角色
为测试连接选择的 AWS Identity and Access Management (IAM) 角色必须与 AWS Glue 建立信任关系。选择已附加 AWSGlueServiceRole 策略的服务关联角色来创建信任关系。
检查连接的 IAM 角色
如果连接密码使用 AWS KMS 进行加密,请检查连接的 IAM 角色是否允许对密钥执行 kms:Decrypt 操作。有关详细信息,请参阅在 AWS Glue 中设置加密。
检查连接日志
检查日志中是否有错误消息。您可以在 Amazon CloudWatch Logs 中的 /aws-glue/testconnection/output 下找到测试连接的日志。
检查 SSL 设置
如果数据存储需要指定用户的 SSL 连接,请确保在控制台上创建连接时选择 Require SSL connection(需要 SSL 连接)。仅当数据存储支持 SSL 时才选择此选项。
检查 JDBC 用户名和密码
用户必须有足够的权限才能访问 Java 数据库连接 (JDBC) 数据存储。例如,AWS Glue 爬网程序需要 SELECT 权限。写入数据存储的作业需要 INSERT、UPDATE 和 DELETE 权限。
检查 JDBC URL 语法
语法要求因数据库引擎而异。有关详细信息,请参阅 AWS Glue JDBC 连接属性并查看 JDBC URL 下的示例。
更多提示
检查连接类型
请务必选择正确的连接类型。当为 Connection type(连接类型)选择 Amazon RDS 或 Amazon Redshift 时,AWS Glue 会自动填充 VPC、子网和安全组。
测试连接功能仅适用于 MySQL 5.x 版本。内置的 AWS Glue JDBC 驱动程序不支持 MySQL 版本 8。如果使用比 MySQL 5.x 版本更新的版本测试连接,可能会出现连接超时错误。使用您的 AWS Glue 连接来连接到 MySQL 版本 8。为 MySQL 版本 8 及更高版本输入兼容的驱动程序 Java Archive (JAR),以便在提取、加载和转换 (ETL) 作业上使用该连接。然后,将 JAR 文件加载到您的作业中。有关详细信息,请参阅 AWS Glue for Apache Spark 中适用于 ETL 的连接类型和选项。
确认 DNS 不是导致问题的原因
要确认 DNS 不是导致问题的原因,请将数据存储的公有或私有 IP 地址用作 AWS Glue 连接的 JDBC URL。清除 Require SSL connection(需要 SSL 连接)字段,因为不再使用域名。
检查驱动程序是否不兼容
在作业属性中提供正确的驱动程序作为额外的 JAR 文件,以及失败的连接名称。将连接名称指定为作业属性后,AWS Glue 会使用该连接的网络设置,如 VPC 和子网。使用作业属性中的 JAR 文件创建 Spark DataFrame,以覆盖默认的 AWS Glue 数据存储驱动程序。
您也可以将 DataFrame 转换为 AWS Glue DynamicFrame。有关详细信息,请参阅 fromDF。
检查 JDBC 数据存储是否可公开访问
使用 MySQL Workbench 和 JDBC URL 连接至数据存储。或者,启动具有 SSH 访问权限的 Amazon EC2 实例,该实例可以访问用于该连接的相同子网和安全组。然后,使用 SSH 连接到实例,并运行以下命令来测试连接:
dig hostname$ nc -zv hostname port
相关信息
对 Spark 错误进行故障排除