如何对 AWS Glue ETL 作业中的 AWS Marketplace 连接错误进行故障排除?

4 分钟阅读
0

我在 AWS Glue 中使用 AWS Marketplace 连接器时,在日志中收到错误。

解决方法

连接器未显示

您在 AWS Marketplace 中订阅了一个连接器,但在 AWS Glue Studio 的连接器页面中找不到该连接器。

要解决此问题,请完成以下步骤:

  1. 打开 AWS Marketplace
  2. 选择发现产品,然后找到要使用的连接器。
  3. 选择继续订阅,然后,在系统提示时登录您的 AWS 账户。
  4. 选择继续配置。如果此选项显示为灰色且您无法选择,请务必阅读条款和条件。选择接受条款,然后等待直至继续配置按钮可用。
  5. 从下拉列表中选择交付方式软件版本。如果您不确定要选择哪个版本,请选择最新版本。
  6. 选择继续启动,然后选择使用说明
  7. 在弹出窗口中,选择从 AWS Glue Studio 激活 Glue 连接器
  8. (可选)要仅安装连接器,请选择仅激活连接器。有关更多信息,请参阅 Using connectors and connections with AWS Glue Studio。如果您改用自定义连接器,请参阅 Developing custom connectors

**注意:**即使您之前订阅了连接器,也可以重复执行这些步骤。

您的 IAM 角色的问题

当您尝试在 AWS Marketplace 中订阅连接器时,您会收到一条类似于以下内容的 AWS Identity and Access Management(IAM)权限错误消息:

“You do not have the right permissions to make this request.Some controls have been disabled because you are missing the correct permission(s).The missing permission(s) are: aws-marketplace:Subscribe.”

要解决此问题,请向收到该错误的 IAM 用户添加 IAM 策略。对于 AWS Marketplace,请向您的 IAM 用户添加以下 IAM 策略:

  • 若要授予查看订阅而无法更改订阅的权限,请选择 AWSMarketplaceRead-only
  • 若要授予订阅和取消订阅的权限,请选择 AWSMarketplaceManageSubscriptions
  • 若要授予对订阅的完全控制权,请选择 AWSMarketplaceFullAccess

有关更多信息,请参阅 Controlling access to AWS Marketplace subscriptions

AccessDeniedException 错误

在 AWS Glue 作业的日志中,您会收到类似于以下内容的 AccessDeniedException 错误消息:

“An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:sts::xxxxxxxxxxxx:assumed-role/<IamRole>/GlueJobRunnerSession is not authorized to perform: ecr:GetAuthorizationToken on resource: * because no identity-based policy allows the ecr:GetAuthorizationToken action
Glue ETL Marketplace - 下载连接器失败,激活脚本已退出,显示代码 1
LAUNCH ERROR | Glue ETL Marketplace - failed to download connector.Please refer logs for details.”

如果与您的 AWS Glue 作业关联的 IAM 角色在执行 GetAuthorizationToken 操作时权限不足,会出现此错误。

若要解决此问题,请向您的 AWS Glue 作业授予 ecr:GetAuthorizationToken 权限:

  1. 打开 IAM 控制台
  2. 选择您在 AWS Glue 作业中使用的 IAM 角色。
  3. 选择附加策略
  4. 筛选策略下输入 AmazonEC2ContainerRegistryReadOnly,然后选择此策略。
  5. 选择附加策略

将所需策略附加到 IAM 角色后,再次运行 AWS Glue 作业。

有关更多信息,请参阅 AmazonEC2ContainerRegistryReadOnly添加 IAM 身份权限(控制台)以及 Setting up IAM permissions for AWS Glue

网络问题 - 没有来自 VPC 的网络路径

您的网络设置可能不足以让 AWS Glue 连接器在 AWS Glue 作业中正常工作。您可能会收到类似于以下内容的错误消息:

“botocore.exceptions.ConnectTimeoutError: Connect timeout on endpoint URL: "https://api.ecr.us-east-1.amazonaws.com/"Glue ETL Marketplace - failed to download connector, activation script exited with code 1
LAUNCH ERROR | Glue ETL Marketplace - failed to download connector.Please refer logs for details.
Exception in thread "main"
java.lang.Exception: Glue ETL Marketplace - failed to download connector.”

前面的错误消息示例表明,没有从包含作业组件的虚拟私有云(VPC)到 Amazon Elastic Container Registry(Amazon ECR)存储库的网络路径。Amazon ECR 存储库包含连接器的映像。AWS Glue 将所有连接器存储在 us-east-1 AWS 区域的 Amazon ECR 存储库中。如果 AWS Glue 作业想要使用连接器,则必须从此区域下载连接器。

向 AWS Glue 作业添加连接时,必须建立允许流量流入或流出服务的网络路由。AWS Glue 使用私有 IP 地址与作业和服务(如 Amazon ECR)的组件进行通信。如果您的连接使用路由表中有互联网网关的公有子网,则可能会出现此错误。有关更多信息,请参阅 Configuration for internet access

创建连接时,VPC、子网和安全组等网络信息是可选项。如果您仅使用连接器和 AWS Secrets Manager 密钥创建连接,那么 AWS Glue 作业将使用内部 NAT 网关。该作业不依赖于您账户中的 NAT 网关。

若要解决此问题,请选择以下一种解决方案,并将其纳入您的网络设计中。

创建 NAT 网关并将其附加到连接子网

不要使用互联网网关。而是创建 NAT 网关并将其附加到连接子网:

  1. 为您的账户分配未附加的弹性 IP 地址。确保将此 IP 地址与 NAT 网关关联。
  2. 创建 NAT 网关,然后选择公有子网和弹性 IP 地址以在公有子网中创建 NAT 网关。
  3. 创建私有子网(没有互联网网关路由)和相关的路由表。在路由表中,添加一条指向 NAT 网关的 0.0.0.0/0 规则。或者,编辑其中一个现有子网,以使用带有 NAT 网关路由的路由表。确保没有与 NAT 网关路由一起使用的互联网网关路由。
  4. 修改 AWS Glue 连接的子网以使用私有子网。
  5. 再次运行 AWS Glue 作业以确认错误不会再次发生。

不要在连接中使用 VPC 信息

不要在连接中包含 VPC 信息。改为使用互联网 NAT 网关:

  1. 在 AWS Glue Studio 中为您的连接器创建新连接。
  2. 仅指定 Secrets Manager 密钥。不要添加任何 VPC 选项,让 AWS Glue 使用内部 NAT 而不是子网。
  3. 编辑 AWS Glue 作业以使用新连接,然后重新运行该作业。

对于私有网络设置,请创建一个 VPC 端点

在私有网络设置中使用 VPC 端点,而不是 NAT 网关。要使用 VPC 端点,请完成以下步骤。

创建 VPC 端点

首先,创建 Amazon ECR API 端点。接下来,为 com.amazonaws.<region>.ecr.dkr 服务创建 VPC 端点,然后创建 Amazon Simple Storage Service(Amazon S3)端点

创建 Amazon ECR API 端点:

  1. 打开 Amazon VPC 控制台
  2. 从导航窗格中选择端点
  3. 选择创建端点,然后为您的 Amazon ECR API 端点添加端点名称。
  4. 服务类别选择 AWS 服务
  5. 服务添加 ECR 筛选条件,然后选择 com.amazonaws.<region>ecr.api
  6. VPC 选择要在其中创建端点的 VPC。在其他设置下,选择启用 DNS 名称
  7. 子网选择在其中创建新子网的可用区。
  8. 子网 ID 选择子网名称
  9. VPC 安全组选择您的安全组。
  10. 策略选择完全访问权限,以允许所有主体在 VPC 端点上对所有资源执行所有操作。
  11. (可选)添加标签。
  12. 选择创建端点

完成相同的步骤,为名为 com.amazonaws.<region>.ecr.dkr 的服务创建另一个 VPC 端点。

完成以下步骤,以创建 Amazon S3 端点:

  1. 打开 Amazon VPC 控制台
  2. 从导航窗格中选择端点
  3. 选择创建端点,然后添加端点名称。
  4. 服务类别选择 AWS 服务
  5. 服务添加类型:网关筛选条件,然后选择 com.amazonaws.<region>.s3
  6. VPC 选择要在其中创建端点的 VPC。
  7. 路由表选择您的路由表。
  8. 策略选择完全访问权限,以允许所有主体在 VPC 端点上对所有资源执行所有操作。
  9. (可选)添加标签。
  10. 选择创建端点

订阅和配置连接器

如果您已经在 AWS Glue 中订阅并配置了连接器,请继续前往创建 AWS Glue 连接部分。

如果您尚未在 AWS Glue 中订阅和配置连接器,请按照订阅 AWS Marketplace 连接器中的步骤进行操作。在使用说明弹出窗口中,选择从 AWS Glue Studio 激活 Glue 连接器以转到创建 Glue 连接页面。

创建 AWS Glue 连接

如果您已经在 AWS Glue 控制台中添加了连接器,请导航到连接并选择您的连接器。然后,选择创建连接

如果您按照前面的步骤订阅和配置连接器,请完成以下步骤来创建连接:

  1. 打开 AWS Glue 控制台
  2. 创建 Glue 连接页面上,添加连接名称
  3. 网络选项选择您的 VPC 和子网与安全组。
  4. 选择创建连接并激活连接器

网络问题 - AWS Glue 作业中的连接太多

如果您由于 AWS Glue 作业的连接过多而遇到网络问题,则您会在作业的日志中收到以下错误消息:

“INFO - Glue ETL Marketplace - Start downloading connector jars for connection: <connection name>test connection feature: "Caused by: com.amazonaws.services.glue.exceptions.InvalidInputException: Connection: does not exist"
LAUNCH ERROR | Glue ETL Marketplace - failed to download connector.Please refer logs for details.”

AWS Glue 支持每个作业或开发端点使用一个连接。如果您在作业中指定多个连接,AWS Glue 使用第一个连接。如果您必须访问多个 VPC,请参阅 Connect to and run ETL jobs across multiple VPCs using a dedicated AWS Glue VPC

AWS 官方
AWS 官方已更新 2 个月前