为什么我的 AWS Glue 测试连接失败?
2 分钟阅读
0
我希望排查 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 RDS 或 Amazon 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
相关信息
没有评论
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 9 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 9 个月前