如何對 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. (選用) 若要僅安裝連接器,請選擇僅啟用連接器。如需詳細資訊,請參閱將連接器和連線與 AWS Glue Studio 搭配使用。如果改為使用自訂連接器,請參閱開發自訂連接器

**注意:**即使您之前訂閱了連接器,也可以重複這些步驟。

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

如需詳細資訊,請參閱控制 AWS Marketplace 訂閱的存取權

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 - failed to download connector, activation script exited with code 1
LAUNCH ERROR | Glue ETL Marketplace - failed to download connector.Please refer logs for details."

執行 GetAuthorizationToken 操作時,若與 AWS Glue 任務關聯的 IAM 角色沒有足夠的許可,就會發生此錯誤。

若要解決此問題,請授予 AWS Glue 任務 ecr:GetAuthorizationToken 許可:

  1. 開啟 IAM 主控台
  2. 選擇您在 AWS Glue 任務中使用的 IAM 角色。
  3. 選擇連接政策
  4. 篩選政策下,輸入 AmazonEC2ContainerRegistryReadOnly,然後選擇此政策。
  5. 選擇連接政策

將所需的政策連接至 IAM 角色後,再次執行 AWS Glue 任務。

如需詳細資訊,請參閱 AmazonEC2ContainerRegistryReadOnly新增 IAM 身分許可 (主控台)設定 AWS Glue 的 IAM 許可

網路問題 – 沒有來自 VPC 的網路路徑

在 AWS Glue 任務中使用 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。如果您的連線使用路由表中具有網際網路閘道的公有子網路,則可能會發生此錯誤。如需詳細資訊,請參閱網際網路存取的組態

建立連線時,網路資訊 (例如 VPC、子網路和安全群組) 是選用的。如果只使用連接器和 AWS Secrets Manager 金鑰建立連線,則 AWS Glue 任務會使用內部 NAT 閘道。此任務不依賴於您帳戶中的 NAT 閘道。

若要解決此問題,請選擇下列其中一個解決方案,並將其納入您的網路設計中。

建立 NAT 閘道並連接至連線子網路

不要使用網際網路閘道。而是建立 NAT 閘道並連接至連線子網路:

  1. 將未連接的 Elastic IP 位址配置給您的帳戶。確保將 IP 位址與 NAT 閘道關聯。
  2. 建立 NAT 閘道,然後選擇公有子網路和 Elastic 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. 對於安全群組,選擇您的安全群組。
  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,請參閱使用專用的 AWS Glue VPC 連線並在多個 VPC 上執行 ETL 任務

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