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 - 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 ID アクセス許可の追加 (コンソール)」、および「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.」

前述のエラーメッセージの例は、Amazon Elastic Container Registry (Amazon ECR) リポジトリへのジョブのコンポーネントを含む仮想プライベートクラウド (VPC) からのネットワーク経路がないことを示しています。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. アタッチされていない Elastic IP アドレスをアカウントに割り当てます。この IP アドレスが NAT ゲートウェイに関連付けられていることを確認してください。
  2. NAT ゲートウェイを作成し、パブリックサブネットと Elastic IP アドレスを選択して、パブリックサブネットに NAT ゲートウェイを作成します。
  3. インターネットゲートウェイルートを持たないプライベートサブネットおよび関連するルートテーブルを作成します。ルートテーブルに、NAT ゲートウェイを指す 0.0.0.0/0 のルールを追加します。または、既存のサブネットの 1 つを編集して、NAT ゲートウェイのルートでルートテーブルを使用することもできます。NAT ゲートウェイのルートでインターネットゲートウェイのルートが使用されないようにしてください。
  4. プライベートサブネットを使用するように AWS Glue 接続のサブネットを修正します。
  5. AWS Glue ジョブを再度実行し、エラーが発生しないことを確認します。

接続に VPC の情報を使用しない

接続に VPC の情報を含めないようにしてください。代わりにインターネット NAT ゲートウェイを使用します。

  1. AWS Glue Studio でコネクタ用の新しい接続を作成します。
  2. Secrets Manager キーのみを指定します。AWS Glue がサブネットの代わりに内部 NAT を使用するように VPC オプションを追加しないでください。
  3. 新しい接続を使用するように AWS Glue ジョブを編集し、ジョブを再度実行します。

プライベートネットワークの設定で VPC エンドポイントを作成する

プライベートネットワークの設定では、NAT ゲートウェイの代わりに VPC エンドポイントを使用してください。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 というサービス名のもう 1 つの VPC エンドポイントを作成します。

次の手順を実行して Amazon S3 エンドポイントを作成します。

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインで [エンドポイント] を選択します。
  3. **[エンドポイントを作成] **を選択し、エンドポイント名を追加します。
  4. [サービスカテゴリ][AWS サービス] を選択します。
  5. [サービス] で、[Type:Gateway] フィルターを追加し、[com.amazonaws.<region>.s3] を選択します。
  6. [VPC] で、エンドポイントを作成する VPC を選択します。
  7. **[ルートテーブル] ** でルートテーブルを選択します。
  8. [ポリシー][フルアクセス] を選択します。これによりすべてのリソースに対して、VPC エンドポイント経由でのすべてのプリンシパルによるすべての操作が許可されます。
  9. (オプション) タグを追加します。
  10. [エンドポイントを作成] を選択します。

コネクタのサブスクライブして設定する

既に 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 では、ジョブまたは開発エンドポイントごとに 1 つの接続がサポートされます。ジョブで複数の接続を指定した場合、AWS Glue では最初の接続のみが使用されます。複数の VPC にアクセスする必要がある場合は、「Connect to and run ETL jobs across multiple VPCs using a dedicated AWS Glue VPC」を参照してください。

AWS公式
AWS公式更新しました 2ヶ月前