QuickSightのデータソースでAthenaを使った際のエラーを解決してみた

Athenaデータソースででた「データベースでSQL例外が生成されました」の例外について、試してみた対応例についてまとめました。
2023.08.01

データアナリティクス事業本部 機械学習チームの鈴木です。

以下のドキュメントを参考に、新規Athenaデータセットを作成したところエラーが発生したので、解消方法について調べてみました。

発生したエラー

この記事では、以下の2種のエラーが出た際の解決例を記載しました。

  1. An error has been thrown from the AWS Athena client. No output location provided.
  2. Permission denied on S3 path: Glueテーブルで参照しているS3バケット名

1点目は、新規Athenaデータソースを作成する際に接続を検証すると、データベースでSQL例外が生成されました。と表示され、詳細を表示するとAn error has been thrown from the AWS Athena client. No output location provided.と記載されている場合です。

SQL例外の生成

例外の詳細

2点目は、Athenaデータソースを使って可視化をする際に、データベースでSQL例外が生成されましたと表示され、Athenaの実行結果を見るとPermission denied on S3 path: Glueテーブルで参照しているS3バケット名のようなエラーが記載されている場合です。

可視化した際のエラー

SQL実行時のエラー

前提

今回は以下の条件を前提とします。

  • QuickSightはエンタープライズ版です。
  • IAMロールはQuickSightで管理されるロールを使っているとします。
  • QuickSightのAWSのサービスへのアクセスでは、Redshift・RDS・IAM・Athenaが許可されているものとします。

セキュリティとアクセス権限画面で見ると以下のようになっています。

前提となる設定

各エラーに対する対応

No output location providedのエラー

データセットで使用するAthenaのワークグループにクエリの結果の場所が設定されていないためでした。

以下のドキュメントに、Athenaワークグループにクエリ結果の場所の設定が必要なことが記載されています。

まず、Athenaデータソースで指定したワークグループの設定をAthenaのコンソールから確認すると、以下のようにクエリの結果の場所が未設定でした。

クエリの結果の場所未設定のワークグループ

データセットに設定するAthena workgroupをAthenaの画面から編集し、クエリの結果の場所を設定しました。

クエリの結果の場所設定済みのワークグループ

このときのポイントは、後で説明する、QuickSightが使うIAMロールにて許可されるS3バケットを、クエリの結果の場所に選択することです。バケット名がaws-athena-query-results-のプレフィックスで始まるバケットを指定する場合は、IAMロールへのAthenaへのアクセス権付与だけすればアクセスできるようになるので設定が楽でした。これについては後述します。

S3へのアクセス権限のエラー

QuickSightが使うaws-quicksight-service-role-v0ロールに、S3へのアクセス権限が不足していたためでした。

※このロールについては参考資料へのリンクを補足に記載します。

このトラブル解決については、以下のドキュメントにも例が記載されているので併せてご覧ください。

今回は以下の2つのアクセス許可をQuickSightが使うIAMロールに管理画面から設定しました。

  • 検索したGlueテーブルが参照するS3へのアクセス権限
  • Athenaのクエリの結果のS3への書き込み権限

なお、2点目については、今回はaws-athena-query-results-のプレフィックスで始まるバケットに結果を入れるよう、事前にワークグループの設定をしてあります。

検索したGlueテーブルが参照するS3へのアクセス権限の設定

まず画面右上のアイコンから、QuickSightの管理画面に行きます。

管理画面を開く

セキュリティとアクセス権限からQuickSightのAWSのサービスへのアクセスより管理ボタンを押します。

QuickSightのAWSサービスへのアクセス管理

Amazon S3へのアクセスを選択し、読み取りをするバケットにチェックを入れて完了とします。

S3へのアクセス権限付与

Athenaのクエリの結果のS3への書き込み権限

こちらについては、Athenaへのアクセスをもともと許可しており、その中でaws-athena-query-results-のプレフィックスで始まるバケットへの書き込みは許可されているようでした。

試しにaws-quicksight-service-role-v0ロールを確認すると、AWSQuicksightAthenaAccessポリシーで許可されていることが確認できました。クエリ結果の書き込みでエラーが発生する場合は、このロールの状態を確認するとよさそうです。

書き込み権限の確認

補足

aws-quicksight-service-role-v0の参考資料

QuickSightがAWSリソースにアクセスするための専用ロールです。このロールの編集はQuickSight管理画面から行われます。

以下の資料を見ると理解が深まりましたのでご紹介します。

最後に

今回は新規Athenaデータセット作成時に発生したエラー例とその解消した方法についてご紹介しました。参考になりましたら幸いです。