📊

AWS CLIを活用してQuickSightの運用を効率化するスクリプトを作った話

2022/09/05に公開

はじめに

AWS CLIでAmazon QuickSightをAPI操作する中で、名前空間を使用するユースケースの運用を効率化したいと思い、スクリプトを個人開発したので紹介します。

運用上の課題とニーズ

スクリプトを作った背景としては、以下の課題とニーズがありました。

1.アセット同士の関係性の把握

課題

  • QuickSightの分析環境は、ダッシュボード・分析・データセットと呼ばれるアセットで構成されています。(参考:Amazon QuickSightの仕組み)
  • ダッシュボードは分析をダッシュボードとして公開することで作成され、分析はデータセットを分析として視覚化することで作成されます。また、複数のデータセットを組み合わせることで結合したデータセットを作ることができます。
  • これらの関係性をQuickSightのコンソール(以下、コンソール)で確認するには、1つずつアセットを画面上で参照しなければなりません。また、CLIの場合、コンソールで確認するよりも容易に情報を得ることができますが、アセットの数だけコマンドを実行する必要があり、全てのアセットを網羅的に把握しようとすると時間が掛かります。

ニーズ

  • 各アセットの下記関係性を網羅的に確認したい
    • どの分析がどのダッシュボードに公開されているのか
    • どのデータセットがどの分析に使用されているのか
    • どのデータセットが結合されているのか
  • アセットの関係性をツリー構造で見やすく表示したい。

2.データセットの名前空間別の分類とSPICE使用量の把握

課題

名前空間別の分類
  • QuickSightでは 名前空間を用いることでマルチテナント環境を構築できます。
  • 名前空間を利用している環境で、どのデータセットがどの名前空間のユーザーに公開されているか確認したい場合は、各名前空間のユーザーでコンソールにログインした後、コンソール上で確認するもしくはCLIで確認することができます。コンソール上で確認する場合は、各データセットの詳細画面を確認する必要があります。また、CLIで確認する場合は、1つのデータセットに対してDESCRIBE DATASETDESCRIBE DATASET PERMISSIONSの2つのAPIを実行する必要があり、全てのデータセットを名前空間別に分類しようとするとこれらの処理をデータセットの数だけ実行する必要があります。
SPICE使用量の把握
  • QuickSightではSPICEと呼ばれるインメモリエンジンを使用することができます。編集者権限を持つアカウントの利用数に応じた容量の割当がありますが、割り当て以上の容量を利用したい場合は、容量を追加購入する必要があります。割り当てられる容量内で運用したい場合、SPICEの容量管理が必須となります。
  • SPICEの使用量は、コンソールでQuickSight環境全体の総使用量を確認できます。また、データセット各々の使用量は、コンソールで各データセットを調べるもしくはCLIで確認することができます。
  • QuickSightの環境全体でSPICEの残容量が無くなった場合、新たなデータセットのデータをSPICEにインポートできなくなります。この場合、どのデータセットが、SPICE使用量が多く使用し容量を圧迫しているかを把握するには、時間が掛かります。

ニーズ

  • 各データセットがどの名前空間に属しているかを一覧で把握したい
  • 各データセットのSPICEの使用量を一覧で把握したい

作ったもの

前述の課題を解決しようと思い、下記のスクリプト集を作成しました。

https://github.com/shogo452/aws-quicksight-tool

1.アセット同士の関係性をツリー形式で出力するスクリプト

起点とするアセットとしてダッシュボードもしくは分析のいずれかを選択でき、それらを起点にしたアセットの関係性をツリー形式で表現できます。また、紐付けはあるがデータセット自体が削除されている場合の識別も可能です。

入力例

a.ダッシュボードを起点にツリー表示する場合
cmd/get_dashboard_tree -h
Usage: To get dashboard tree with analysis and datasets on AWS QuickSight
    -p, --profile PROFILE_NAME       AWS profile name (Required)
    -d, --dashboard-id DASHBOARD_ID  Dashboard ID (Optional)
    -h, --help                       Show help.
cmd/get_dashboard_tree --profile=<profile>
b.分析を起点にツリー表示する場合
cmd/get_analysis_tree -h
Usage: To get analysis tree with datasets on AWS QuickSight
    -p, --profile PROFILE_NAME       AWS profile name (Required)
    -a, --analysis-id ANALYSIS_ID    Analysis ID (Optional)
    -h, --help                       Show help.
cmd/get_analysis_tree --profile=<profile>

出力例

a.ダッシュボードを起点にツリー表示する場合
[dashboard] dashboard_id_1 : dashboard_name_id_1
└ [analysis] analysis_id_1 : analysis_name_1
    ├── [dataset] data_set_id_1 : data_set_name_1
    │       ├── [dataset] data_set_id_7 : data_set_name_7
    │       └── [dataset] data_set_id_8 : data_set_name_8
    ├✕─ [dataset] data_set_id_2 (🚨 Not Found)
    └── [dataset] data_set_id_3 : data_set_name_3
[dashboard] dashboard_id_2 : dashboard_name_id_2
└ [analysis] analysis_id_2 : analysis_id_2
    ├── [dataset] data_set_id_4 : data_set_name_4
    ├── [dataset] data_set_id_5 : data_set_name_5
    └── [dataset] data_set_id_6 : data_set_name_6
b.分析を起点にツリー表示する場合
[analysis] analysis_id_1 : analysis_name_1
 ├── [dataset] data_set_id_2 : data_set_name_2
 │      ├── [dataset] data_set_id_4 : data_set_name_4
 │      └── [dataset] data_set_id_5 : data_set_name_5
 ├── [dataset] data_set_id_3 : data_set_name_3
 │      ├── [dataset] data_set_id_6 : data_set_name_6
 │      └── [dataset] data_set_id_7 : data_set_name_7
 └✕─ [dataset] data_set_id_8 (🚨 Not Found)
[analysis] analysis_id_2 : analysis_name_2
 └── [dataset] data_set_id_9 : data_set_name_9

2.名前空間別のデータセットとそのSPICE使用量の一覧化できるスクリプト

データセット全件もしくは指定した名前空間の属しているデータセットをSPICE容量と共に一覧化できます。

入力例

cmd/get_data_set_list -h
Usage: To get data set lists on AWS QuickSight
    -p, --profile PROFILE_NAME       AWS profile name (Required)
    -o, --only-named                 only named datasets (Optional, default: false)
    -n, --namespace NAMESPACE        Namespace (Optional)
    -h, --help                       Show help.
cmd/get_data_set_list --profile=<profile>

出力例

  • 下記のように名前空間別のデータセットとそのSPICE使用量の一覧をCSV出力できます。
namespace data_set_id data_set_name spice_capacity permissions_to_default created_at last_updated_at
default data_set_id_1 data_set_name_1 0.047563[GB] 2022-06-20 18:44:10 2022-07-24 05:17:34
tenant-1 data_set_id_2 data_set_name_2 0.016687[GB] - 2022-07-20 11:01:46 2022-07-24 05:18:10
tenant-2 data_set_id_3 data_set_name_3 0.056743[GB] - 2022-07-20 11:01:46 2022-07-24 05:18:10
  • 後述する一括処理用のシェルスクリプト用にデータセットIDをテキストで一緒に出力します。
'data_set_id_1',
'data_set_id_2',
'data_set_id_3',

3.一括処理用のシェルスクリプト

名前空間もしくはアセットを一括削除したり、閲覧・編集権限を一括付与する際に、まとめて処理したいと思い、一括処理用のスクリプトも作ってみました。

作ったスクリプト一覧とスクリプトの例

主に用途としては、アセットの一括削除、編集もしくは閲覧権限の付与・破棄を想定しています。

maintenance
├── analysis
│   ├── delete_analyses.sh
│   ├── grant_author_permission.sh
│   └── revoke_author_permission.sh
├── dashboard
│   ├── grant_reader_permission.sh
│   └── revoke_reader_permission.sh
├── dataset
│   ├── delete_data_sets.sh
│   ├── grant_author_permissions.sh
│   └── revoke_author_permissions.sh
├── datasource
│   └── delete_data_souces.sh
└── namespace
    └── delete_namespaces.sh

https://github.com/shogo452/aws-quicksight-tool/blob/main/maintenance/dataset/grant_author_permissions.sh

設定ファイルと実行例

https://github.com/shogo452/aws-quicksight-tool/blob/main/maintenance/dataset/.env(sample)

$ maintenance/analysis/grant_author_permission.sh
========================================== Users ==============================================
user_arn_1
user_arn_2
========================================== Analyses ===========================================
analysis_id_1
analysis_id_2
===============================================================================================
Do you wish to grant author permissions to the users for the analyses? (y/n): y
Please input your profile.
PROFILE: <profile>

まとめ

以上が個人開発したQuickSightの運用を効率化するスクリプトの紹介になります。QuickSightを利用されている方の一助となれば幸いです。特にQuickSightで名前空間を利用していて同じ課題に直面しているユーザーの方に届くと嬉しいです😊

Discussion