Amazon QuickSightでAthenaのDatasetを作成する際にエラーとなる場合の対処

2022.08.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部 IoT事業部の若槻です。

Amazon QuickSightは、各種AWS Serviceと直接接続してデータを取得し、ダッシュボード上で可視化できるサービスです。

今回、QuickSightを久し振り触ってみたところ、AthenaのDatasetを作成する際にエラーとなりすごくハマってしまったので、その際の対処の経緯について書き残しておきます。

事象、対処の経緯

次のようなAthenaでクエリ可能な環境があります。

  • WorkGroup:AthenaWorkGroup
  • Database:data_catalog
  • Table:data_glue_table

このAthenaクエリをデータソースとするDatasetをQuickSightで作成しようとしました。

QuickSightの管理コンソールで、[Datasets]タブで[New dataset]をクリック。

データソースの種類として[Athena]を選択。

すると次のようなエラーとなりました。

Unable to retrieve Athena workgroups. Wait a few moments and click here to try again.

一応、日本語コンソールならこんな感じになります。

Athena ワークグループを取得できません。しばらく待ってから、 こちらをクリックしてから再度お試しください

[click here to try again]リンクをクリックしてもエラーは出続けます。そこで、QuickSightに適切なアクセス権限があるか確認してみます。

右上のメニューで[Manage QuickSight]をクリック。

[Security & permissions > Access granted to 4 services]を見ると、Athenaに対する権限が無いようです。

Athenaへの権限を付与してみます。[Manage]をクリック。

Amazon Athenaにチェックを入れます。

するとQuickSight needs permissions to access Amazon S3 buckets or AWS lambda functions used by Athenaと表示されるので[Skip]をクリック。(S3 Bucketへのアクセス権限が必要という内容ですが、後ほど対処します)

[Save]をクリック。

ここで次のようにIAM Roleが更新できない旨のエラーが表示されますが、[Cancel]をクリック。(これも後ほど確認します)

We cannot update the IAM Role. The reason could be one or more from the following:

- The role does not explicitly trust QuickSight service principal.
- Following policies are either not attached to the QuickSight role or attached to more than one:
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightRDSPolicy
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightS3Policy
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightIAMPolicy
- arn:aws:iam::300561038900:policy/service-role/AWSQuickSightRedshiftPolicy
- Make sure the credentials you're using have following permissions:
- iam:CreateRole, iam:CreatePolicy, iam:AttachRolePolicy, iam:CreatePolicyVersion,iam:DeletePolicyVersion, iam:ListAttachedRolePolicies, iam:GetRole, iam:GetPolicy,iam:DetachRolePolicy, iam:GetPolicyVersion and iam:ListPolicyVersions

すると、アクセス権限のあるサービス一覧にAthenaが追加されました。

再度DataSetの作成でAthenaを選択すると、今度はそれぞれのWorkgroupがエラーなく読み込めました! image

athenaWorkGroupを指定して[Create data source]をクリック。

すると、次は下記のエラーが発生しました。

Your database generated a SQL exception. This can be caused by query timeouts, resource constraints, unexpected DDL alterations before or during a query, and other database errors. Check your database settings and your query, and try again. Show details

[Show details]を開くと次のようにあります。

[Simba]AthenaJDBC An error has been thrown from the AWS Athena client. Unable to verify/create output bucket awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj [Execution ID not available]

image

どうやらAthenaのクエリ結果格納Bucketへのアクセス権限も必要なようです。

クエリ結果格納Bucketの権限を追加します。

[Save]をクリック。

するとまたIAM Roleが更新できない旨のエラーが表示されました。[Save]をクリックしても繰り返し同じエラーが表示されるので、[Cancel]をクリックしてみます。

その後にBucketへのアクセス権限一覧を再度確認してみると、先程追加したはずのBucketのチェックが付いていません。追加出来ていないようです。

そこで調査をしてみたところ、次のドキュメントがヒットしました。

ドキュメントによると、QuickSightがAssumeのために使用するIAM Roleであるaws-quicksight-service-role-v0およびaws-quicksight-s3-consumers-role-v0と、それらにアタッチされているManaged Policyを削除し、最後にQuickSightへのアクセスを復旧する手順が紹介されています。

Remove the aws-quicksight-service-role-v0 and aws-quicksight-s3-consumers-role-v0 service roles that QuickSight assumes when interacting with other AWS services. Then, remove the managed policies that QuickSight attaches to aws-quicksight-service-role-v0 and aws-quicksight-s3-consumers-role-v0 service roles. Finally, restore QuickSight access to your AWS services.

上記手順を実施していみます。

まず現在QuickSightへのアクセスで使用しているユーザーがADMINRoleであることを確認します。

次にIAMのコンソールの[Roles]で、次のRoleがあれば削除します。

  • aws-quicksight-service-role-v0
  • aws-quicksight-s3-consumers-role-v0

私の環境では前者が作成されていたので削除しました。

次に[Policies]で、次のManaged Policyがあれば削除します。

  • AWSQuickSightRedshiftPolicy
  • AWSQuickSightRDSPolicy
  • AWSQuickSightIAMPolicy
  • AWSQuickSightS3Policy
  • AWSQuickSightS3ConsumersPolicy

私の環境でははじめの4つがあったのでそれぞれ削除しました。

QuickSightの管理コンソールに戻り、[Security & permissions]で[Managed]をクリック。

すべてのAWS Serviceに対するアクセス権限が消えていますね。(前述の画面では付いたままに見えましたが...)[Amazon Athena]にチェック。

今度は[Next]をクリック。

Athenaクエリ結果格納Bucketを追加して、[Finish]をクリック。(データソース格納Bucketも追加が必要ですが、後ほど対応します)

[Save]をクリック。

すると次はエラーなく追加が完了できたようです。

少し経つと、再作成されたRoleaws-quicksight-service-role-v0に次の2つのPolicyが追加されました。

Customer managed PolicyのAWSQuickSightS3PolicyのPolicy内容は以下です。先程追加したAthenaクエリ結果格納Bucketに対するアクセス権限が記述されていますね。

AWSQuickSightS3Policy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj"
            ]
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj/*"
            ]
        }
    ]
}

上記Policyが追加されるまでタイムラグ(5分ほど)が若干あります。

再度DatasetとしてAthenaを追加してみます。athenaWorkGroupを指定して[Create data source]をクリック。

すると次は下記のエラーとなりました。

次はAthenaクエリ結果格納Bucketへの書き込み権限が足りなかったようです。

[Simba]AthenaJDBC An error has been thrown from the AWS Athena client. Access denied when writing to location: s3://awsappstack-athenaqueryresultbucket2a96bf28-y8xhzpa8rofj/result-data/013d2564-ee5e-4dec-8dee-76263b947033.csv

Bucketのアクセス権限で[Write permission for Athena Workgroup]にチェックを入れます。

再度DatasetとしてAthenaを追加すると、今度はエラーなく進めました。

DatabaseとTableを選択して[Select]。

[Visualize]をクリック。

しかしデータのインポートがFailしました。

AthenaのデータソースとなるBucketへのアクセス権限が無いようです。

This is a general SQL error. This can be caused by query timeouts, resource constraints, unexpected DDL alterations before or during a query, and other database errors. Check your database settings and your query, and try again.

Permission denied on S3 path: s3://awsappstack-databucketd8691f4e-hq3iylagrf5h/data [Execution ID: 86ef9e7e-2d71-4ba1-b98a-9c563e395241]

データソースとなるBucketをアクセス可能な一覧に追加します。

5分ほど待つと、IAM PolicyAWSQuickSightS3Policyに先ほど追加したデータソースとなるBucketに対するアクセス権限が追加されました。

Datasetを使用したAnalyticsでデータをインポートし、可視化することができました!

おわりに

Amazon QuickSightでAthenaのDatasetを作成する際にエラーとなる場合の対処についてでした。

QuickSight×Athenaにおける、ありとあらゆるトラップをを踏んづけた気がします。デフォルトではなくカスタムのAthena Workgroupを使ったこともそのことに拍車を掛けていたでしょう。

しかし注意するべきポイントさえ抑えてしまえば、AWSの機能だけで本格的な可視化やダッシュボード作成ができるのがQuickSightの魅力なので、活用していきたいです。

以上