如何排查创建或连接到 AWS Glue 开发终端节点时出现问题?

上次更新时间:2019 年 9 月 24 日

我在创建或连接到 AWS Glue 开发终端节点时遇到问题。

简短描述

大多数 AWS Glue 开发终端节点的问题属于以下类别之一。按以下顺序进行故障排除:

  1. AWS Identity and Access Management (IAM) 角色和权限
  2. 联网
  3. SSH 密钥

解决方法

IAM 角色和权限

  1. 请确保 AWSGlueServiceRole 已附加到 IAM 策略,且该策略允许 AWS Glue 代入此角色(“svc:glue.amazonaws.com”)。
  2. 如果您无法在 VPC 中创建开发终端节点,请确保 IAM 策略允许以下操作:
    ec2:DescribeVpcAttribute
    ec2:DescribeSubnets
    ec2:DescribeSecurityGroups
    ec2:DescribeNetworkInterfaces
    ec2:DeleteNetworkInterface
    ec2:CreateNetworkInterface
    ec2:DescribeRouteTables
    ec2:DescribeVpcEndpoints
  3. 如果开发终端节点将 Amazon Simple Storage Service (Amazon S3) 用于源和目标,请确认 IAM 策略允许以下操作:
    s3:ListBucket
    s3:GetObject
    s3:ListBucket
    s3:PutObject
    s3:DeleteObject
  4. 如果您已为 Python 库和从属 jar 指定 Amazon S3 路径,请确认 IAM 策略允许访问这两个路径。
  5. 如果您使用 AWS Glue 数据目录作为 Apache Hive 元数据仓,请确保 IAM 策略允许“glue:CreateDatabase”操作且未包含显式拒绝。有关更多信息,请参阅确定在账户内是否允许或拒绝请求

如果您仍然无法连接到开发终端节点,请对网络设置进行故障排除。

联网

如果已在 VPC 中创建开发终端节点:

  1. 如果使用的是自定义 DNS,请确保子网中的每个可用 IP 地址具有 A 记录PTR 记录
  2. 确保 enableDnsHostnamesenableDnsSupport 属性已设置为 true。有关更多信息,请参阅在 VPC 中设置 DNS

检查与终端节点的子网关联的路由表和安全组:

  1. 确认路由表具有指向 Amazon S3 终端节点的路由。
  2. 确认路由表具有指向互联网网关的路由。这是从本地计算机访问开发终端节点所必需的。
  3. 确认安全组具有所有 TCP 端口的自引用的入站规则。
  4. 确认安全组具有允许所有流量的出站规则,或具有连接到自引用安全组的出站规则。有关更多信息,请参阅 针对开发终端节点设置您的网络

如果您使用 SSH 连接到开发终端节点时遇到问题:

  1. 确保该安全组具有入站规则,该规则允许连接所使用机器的端口 22。
  2. 当您在 VPC 中启动开发终端节点时,AWS Glue 会使用私有地址。如果您尝试使用 SSH 从 VPC 外部连接到终端节点,则即使子网具有互联网网关和路由,连接也会失败。要解决此问题,请将弹性 IP 地址关联到开发终端节点
    注意:要与弹性 IP 地址连接,子网必须具有指向互联网网关的路由。要在私有子网中连接到开发终端节点,请先使用 SSH 连接到堡垒主机。然后,使用 SSH 连接到开发终端节点。

如果您使用 SSH 仍然无法连接到开发终端节点,请检查您的 SSH 密钥。

SSH 密钥

以下步骤用于排查 SSH 密钥的问题。如果您使用 SSH 连接到开发终端节点时遇到问题,请参阅本文中“联网”部分。

  1. 确认私有密钥具有 .pem 扩展名。例如,如果密钥文件是 id_rsa,请将其重命名为 id_rsa.pem。如果私有密钥没有 .pem 扩展名,则您会收到错误:“已阻止连接,因为服务器仅允许公有密钥身份验证。请联系网络管理员。”
  2. 如果您在将 .ppk 文件转换为 .pem 时遇到问题,请执行如何在 Windows 和 Linux 上将 .pem 文件与 .ppk 互相转换?中的步骤。
  3. 如果您在创建开发终端节点时遇到问题,请确保公有密钥没有空格或换行符。使用 PuTTYgen 生成的公有密钥通常包含这些字符。要解决此问题,请将公有密钥复制到文本编辑器。然后,删除空格和换行符。当您执行此操作时,整个 SSH 密钥在一行上。使用修改后的密钥创建开发终端节点。