【AWS】Amazon QuicksightでQiita の情報をアウトプット

タイトルは検証内容です。
2021年6月から開始したQiitaへの投稿ですが、年末にレポートを頂きました。
非常に嬉しかった記憶があります。

せっかくなので、Qiitaに関する情報を元にAmazon Quicksightでダッシュボードを作成してみました。

***最終的なダッシュボードを以下のように作成しました。***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/f01e07c8-b5c0-af34-f6d2-47dce86ae552.png)


***今回は、検証プロセスをQuicksightの仕様と交えて説明していきます。***

Amazon Quicksight について
=========
```Amazon QuickSight``` とは AWSの```フルマネージドサービス```であり、クラウド上のBIサービスです。多様なデータソースへ接続し、結合します。
```ビジュアル```と呼ばれるUIをアレンジし、```ダッシュボード```を公開する事で、閲覧者から用途に合った情報を取得する事が出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/12b12e88-19b7-954f-5fca-d81d08f102f1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/d56dda27-a774-e8c6-eec2-0a7250055d38.png)

全体イメージ
===========
QuickSight の全体イメージとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/27cb9777-7941-1be4-daf2-3cbb4ad1a8a2.png)

- QuickSightは、```Standard Edition``` と ```EnterPrise Edition``` が存在します。制約は後程記載します。

https://aws.amazon.com/jp/quicksight/pricing/

- 開発者・分析者は、```データセット```、```分析```、```ダッシュボード```という段階的なプロセスを経て、閲覧者に適切なUIを提供します。

データセット
=======
```データセット``` はQuicksightからUIを表示する際に初めに作成します。

- データセットを作成する際、```データソース```を選択します。新規のデータソースから選択する事も、既存のデータソースを選択する事も可能です。以下のように多様なデータソースをサポートします。今回は S3 の CSV を使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/4792f415-0f38-1566-96a6-7a6d12dabdc9.png)

- データソースの選択が完了すると、データセット上から```クエリエディタ```を使用して、表示したい```フィールド```の加工、抽出、```SPICE```の使用などの選択を行います。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/adding-a-SQL-query.html

***```フィールド```とは、QuickSightがデータソースから認識する、あるいは加工された計算フィールドより認識される一意のデータの集合体となります。フィールドは、後述するいずれのビジュアルタイプにおいても重要な項目となります。***

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/selecting-fields.html

***```計算フィールド```とは、データソースから取り込んだ既存のフィールドに対して、演算子や関数を使用して独自のフィールドを作成するものです。QuickSight 上でフィールドとは別に新しく認識され、計算フィールドを後述のビジュアルタイプから選択する事が出来ます。なお、Quicksight では多数の関数をサポートしております。***

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/working-with-calculated-fields.html

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/functions.html

***```SPICE``` とは、インメモリであり、データソースのデータをインポートをします。これにより、データソースへ直接クエリを発行する必要がなくなり、パフォーマンスが向上します。但し、SPICE上へ保存できるデータ容量には制限がありますので注意が必要です。***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/b7b0de80-08ed-2c24-32ac-1dcd9f7f6864.png)

***Quick sightにおける ```カスタムSQLクエリ```とは、Quicksightからデータソースに実行するSQLを事前に定義する事です。通常は SELECT ステートメントを直接実行しますがカスタムSQLクエリにより、抽出するデータの変更が可能です。***

***Quicksight は```クロスデータソース結合```と呼ばれる複数のデータソースに対する、JOIN がサポートされます。データセットを作成する際に複数のデータソースを使用する場合、こちらを使用します。Inner / Left / Right / Full Outer JOIN をサポートします。***

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/joining-data.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/ca79fad1-cc58-8bcf-f473-1cade0999e39.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/9f0b03e8-28a6-f801-c571-aef647cab669.png)

表示させるデータ、SPICEの選択を経てデータセットを作成します。

分析
====
データセットが作成すると、分析の画面へ遷移します。
分析のイメージは以下です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/addb73fa-918a-082b-9d5c-ac7c4a7657e4.png)

- ***レイアウト***

レイアウトは、後述の```ビジュアル```を表現する際のフォーマットを指定します。
2021年に新しく```フリーフォーマット```が使用可能となり、正確な座標を使用してダッシュボードのどこにでも配置できます。また、ビジュアルのオーバーラップが可能となり、重複する座標上で対象のビジュアルの前面、背面に指定する事で、UIの構成に幅が広がりました。

https://aws.amazon.com/jp/blogs/news/create-stunning-pixel-perfect-dashboards-with-the-new-free-form-layout-mode-in-amazon-quicksight/

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/types-of-layout.html

- ***テーマ***

テーマとは、対象の分析やダッシュボードに適用させるレイアウトの中の設定項目です。具体的には、シートの文字の色や背景色、分析内のグリッド線、枠線、フォントなどを全て指定出来ます。また、独自のテーマを作成する事が可能で、テーマや好みに合ったUIをデザインする事が出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/08bff7fd-b6ce-ec77-c051-cbba2f56a54c.png)

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/themes-in-quicksight.html

- ***ビジュアルタイプ***

上記の設定が完了すると、ビジュアルを挿入していきます。
***```ビジュアル```とは表やグラフ、画像動画など、一意のオブジェクトを示します。***
用途に合ったビジュアルタイプを追加する事で、分析内のシート内にビジュアルを挿入する事が出来ます。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/working-with-visual-types.html

ビジュアルタイプとして様々な形式のグラフを使用する事が出来ます。

- ***主要業務指標(KPI)***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/11806bc2-9a5c-3ee1-9961-8d774db410c9.png)

- ***ゲージグラフ***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/29f9b2e6-d1f5-7b01-ef5d-e9e98b8ab346.png)

- ***ドーナツグラフ***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/fbdb5bf3-08db-4517-e5b5-7761cbadbc7d.png)

- ***円グラフ***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/c6c4c652-72b5-89bd-83fb-91351a8407b1.png)

- ***棒グラフ(各種)***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/b5128ba5-ba2d-9ce9-0a54-ab3b52270ab9.png)

- ***折れ線グラフ***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/482edf2b-2233-f1e1-6d9f-4fda03da7214.png)

- ***ピポットテーブル***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/b02eda8c-b1c4-71f3-fbd2-4cf870c88a56.png)

- ***テーブル***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/87aa340e-87c0-89cb-0db9-f20c0d622f71.png)

- ***ヒートマップ***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/741e4017-03f8-4001-ff73-8b3ff6de7f12.png)

- ***散布図***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/32da2a14-c45b-f066-da84-4ca598678e3d.png)

- ***カスタムビジュアルコンテンツ (URL形式であればWebコンテンツのオンラインビデオ等も挿入可能です)***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/3a2e9c85-b41f-eef9-a533-aa388a65c1f4.png)

:::note info
ビジュアル毎に表示出来るデータに制限事項があります。
開発を行う際は、表示したいビジュアルタイプの制限事項はクリアにしといた方がよいかと思います。
:::

- ***ビジュアルでのフィールドの使用***

ビジュアルの挿入が完了したら、分析内で認識されているフィールドを各ビジュアルの形式に沿った```フィールドウェル```へ挿入していきます。

以下の例では、テーブル形式のビジュアルを選択しています。
フィールドリストには ```LGTM``` / ```Posted Date``` / ```Stock``` / ```Tag``` / ```Title``` のフィールドが存在し、これらをフィールドウェルへ挿入していき、テーブルを作成していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/3992ffd4-cf62-5e8e-a459-18195f852f46.png)

なお、フィールド毎のアイコンの違いは、データタイプの違いとなります。
これはデータセットを作成する際にQuicksightが認識するデータタイプであり、変更も可能です。
例えば、Posted Dateは日付形式のデータタイプへ変更していますが、文字列などの異なるデータタイプへ変更が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/e479d6b2-4414-33e1-f6a3-27d225f87673.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/3b26e12e-2939-9ae7-096b-a6a5acb8be57.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/8ff65cb1-e7ad-725c-a5e4-3aef1b155c91.png)

***分析のUIが完了したら、共有から、ダッシュボードの公開を押下して、ダッシュボードが公開されます。***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/25574493-b0d3-c626-66b4-bf91d36d4f47.png)


ダッシュボード
============
ダッシュボードは、閲覧者が共有できる、分析の読み取り専用のスナップショットであり、公開時の分析設定が保存されます。

ここで権限について記載します。

ユーザー設計・アクセス設計
===========

ユーザー管理
-----------
***Quicksight を使用するユーザーは、IAM ユーザーを保持する事が必須条件ではありません。*** 
後述する管理者が、有効な```Eメールアドレス```へ招待メールを送信できます。招待されたユーザーがサインアップすると、新しいQuickSight専用のユーザーアカウントとして作成されます。

また、```IAMユーザー```を招待することもできます。
この場合は、```IAM認証情報```を使用してQuickSightにサインインします。
招待されたIAMユーザーは、上記と同様に有効なEメールアドレスも持っている必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/4570b769-5e3e-efa6-4a14-c834fb9769e0.png)


***なお、```SSO```や、```Microsoft Active Directory```を使用したユーザー管理、```Idp``` などもユーザー管理として使用出来ますが、私から EnterPrise Edition の検証は実施できない為、割愛します。***

管理・操作・閲覧ユーザーの権限分離
----------
EnterPrise Editionでは、```マルチテナント```をサポートしています。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/namespaces.html

マルチテナントとは同じアカウント上に、```ネームスペース(名前空間)```を作成する事が出来ます。
***複数のネームスペースでは、Quicksightのリソース、ユーザーがネームスペース単位で作成されます。***
例えば、一つのアカウント上でQuicksightを使用したいが、操作出来るリソースは部署単位で分けたい。といったオーダーに適しているかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/01a76f25-df50-c7a8-2b29-535ce210188a.png)

また、Quicksight では、後述するユーザーを一括りにした```グループ```の生成が可能です。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/managing-users.html#creating-quicksight-groups

```
aws quicksight create-group --aws-account-id=111122223333 --namespace=default --group-name="Sales-Management" --description="Sales Management - Forecasting" 
```

これにより、特定のダッシュボードをユーザーではなくグループ単位でセキュリティを管理する事ができます。

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/sharing-a-dashboard.html

いずれもはAWSコンソールからではなく、```AWS CLI```から操作するという点も特徴の一つです。

ユーザー権限
--------------------
QuickSight は Edition により、```登場人物(Role)```が異なります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/cda7cc9b-e5f4-aca4-9b91-7e5d6dc55558.png)

- ***管理者(Admin)***
ユーザー管理やSPICE 容量の購入などの管理タスク等の実行権限を持ちます。
また、ロールとしての管理者と、IAM 管理者ユーザーが存在し、これもまた、権限が異なります。
IAM 管理者ユーザーは、管理者権限および、アクセス許可の管理や、Editionのアップグレード、サブスクリプション解除も行うことができます。

- ***作成者(Author)***
データセットの作成、分析とダッシュボードの作成などを行う権限を持ちます。
作成者の権限範囲は広いため、Authorの権限を制限する事も可能です。

- ***閲覧者(Reader)***
Enterprise Edition のみ、共有されたダッシュボードを操作できる Reader が存在します。



AWS サービスへのアクセス権限
----------------
Quicksight では、データソースへアクセスするサービスに対してIAMポリシーによる許可する必要があります。

* IAM で Amazon QuickSight を使用する

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/security_iam_service-with-iam.html#security_iam_service-with-iam-resource-based-policies

>***追加のポリシーのアタッチ***
Amazon Athena や Amazon S3 などの別の AWS のサービスを使用している場合は、特定のアクションを実行するための QuickSight アクセス権限を付与するアクセス権限ポリシーを作成できます。その後、後で QuickSight に渡す IAM ロールにポリシーをアタッチできます。

> **Amazon QuickSight で既存の IAM ロールを使用する**
QuickSight 管理者で、QuickSight リソースを更新して IAM ロールを渡す権限を持っている場合は、QuickSight で既存の IAM ロールを使用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/5f02fee8-8288-b85a-0295-3170d6c61d89.png)


補足情報
=========
今回、検証で使用しなかった```埋め込み分析```、```Amazon QuickSight Q```や ```ML insight```などがあります。いずれも EnterPrise Edition から利用可能な機能ですが、Quicksightの分析への拡張性があるものかと思います。

* ***埋め込み分析の操作(EnterPrise Edition)***

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/embedded-analytics.html

* ***Machine Learning (ML) Insights の使用(EnterPrise Edition)***

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/making-data-driven-decisions-with-ml-in-quicksight.html

* ***Amazon QuickSight Q の使用 (EnterPrise Edition)***

https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/working-with-quicksight-q.html

ファイルのエクスポート
====================
***ダッシュボードや分析から CSV/EXCEL/PDF といったファイル形式へのエクスポートも可能です。***
静的な情報になりますが、今回作成したPDF ファイルを画面キャプチャします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1597898/e04c0cd6-83d6-8d59-b23b-a39b606c249e.png)

参考文献
========
* ***Amazon Quicksight User Guide***

https://docs.aws.amazon.com/quicksight/latest/user/welcome.html