Lake Formation クラスターのトラブルシューティング
このセクションでは、AWS Lake Formation で Amazon EMR を使用するときの一般的な問題をトラブルシューティングするプロセスについて説明します。
データレイクアクセスが許可されない
データレイク内のデータを分析して処理するには、Amazon EMR クラスターのデータフィルタリングを明示的にオプトインする必要があります。データアクセスに失敗すると、ノートブックエントリの出力に汎用的な Access is not allowed
メッセージが表示されます。
Amazon EMR でオプトインしてデータフィルタリングを許可するには、「AWS Lake Formation デベロッパーガイド」の「Amazon EMR でのデータフィルタリングを許可する」の手順を参照してください。
セッションの期限切れ
EMR Notebooks と Zeppelin のセッションタイムアウトは、Lake Formation の Maximum CLI/API session duration
設定の IAM ロールによって制御されます。この設定のデフォルト値は 1 時間です。セッションタイムアウトが発生すると、Spark SQL コマンドを実行しようとしたときに、ノートブックエントリの出力に次のメッセージが表示されます。
Error 401 HTTP ERROR: 401 Problem accessing /sessions/2/statements. Reason: JWT token included in request failed validation. Powered by Jetty:// 9.3.24.v20180605 org.springframework.web.client.HttpClientErrorException: 401 JWT token included in request failed validation…
セッションを検証するには、ページを更新します。IdP を使用して再認証するよう求められ、ノートブックにリダイレクトされます。再認証後、クエリを実行することができます。
リクエストされたテーブルに対するユーザーのアクセス許可がない
アクセス許可のないテーブルにアクセスしようとすると、Spark SQL コマンドを実行しようとしたときに、ノートブックエントリの出力に次の例外が表示されます。
org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to fetch table table. Resource does not exist or requester is not authorized to access requested permissions. (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: …
テーブルにアクセスするには、Lake Formation で、このテーブルに関連付けられているアクセス許可を更新して、ユーザーにアクセス許可を付与する必要があります。
アカウント間で共有する Lake Formation データをクエリする
Amazon EMR を使用して他のアカウントから共有されているデータにアクセスすると、一部の Spark ライブラリは Glue:GetUserDefinedFunctions
API オペレーションの呼び出しを試みます。AWS RAM マネージドアクセス許可のバージョン 1 と 2 はこのアクションをサポートしていないため、次のエラーメッセージが表示されます。
"ERROR: User: arn:aws:sts::012345678901:assumed-role/my-spark-role/i-06ab8c2b59299508a is not authorized to perform: glue:GetUserDefinedFunctions on resource: arn:exampleCatalogResource because no resource-based policy allows the glue:GetUserDefinedFunctions action"
このエラーを解決するには、リソース共有を作成したデータレイク管理者が、リソース共有にアタッチされている AWS RAM マネージドアクセス許可を更新する必要があります。AWS RAM マネージドアクセス許可のバージョン 3 では、プリンシパルが glue:GetUserDefinedFunctions
アクションを実行できます。
新しいリソース共有を作成すると、Lake Formation はデフォルトで AWS RAM マネージドアクセス許可の最新バージョンを適用するため、ユーザーによる操作は必要ありません。既存のリソース共有へのクロスアカウントデータアクセスを有効にするには、AWS RAM マネージドアクセス許可をバージョン 3 に更新する必要があります。
AWS RAM でユーザーと共有されているリソースに割り当てられている AWS RAM アクセス許可を確認できます。バージョン 3 には次のアクセス許可が含まれています。
Databases AWSRAMPermissionGlueDatabaseReadWriteForCatalog AWSRAMPermissionGlueDatabaseReadWrite Tables AWSRAMPermissionGlueTableReadWriteForCatalog AWSRAMPermissionGlueTableReadWriteForDatabase AllTables AWSRAMPermissionGlueAllTablesReadWriteForCatalog AWSRAMPermissionGlueAllTablesReadWriteForDatabase
既存のリソース共有の AWS RAM マネージドアクセス許可のバージョンを更新するには
ユーザー (データレイク管理者) は、AWS RAM ユーザーガイドの手順に従ってAWS RAM マネージドアクセス許可を新しいバージョンに更新するか、リソースタイプの既存のアクセス許可をすべて取り消して再付与することができます。アクセス許可を取り消すと、AWS RAM はそのリソースタイプに関連付けられている AWS RAM リソース共有を削除します。アクセス許可を再付与すると、AWS RAM は最新バージョンの AWS RAM マネージドアクセス許可をアタッチした新しいリソース共有を作成します。
テーブルで挿入、作成、変更の操作を行う
Lake Formation ポリシーによって保護されているデータベースのテーブルについて挿入、作成、または変更はサポートされていません。これらのオペレーションを実行すると、Spark SQL コマンドを実行しようとしたときに、ノートブックエントリの出力に次の例外が表示されます。
java.io.IOException: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: …
詳細については、「Amazon EMR の AWS Lake Formation との統合の制限」を参照してください。