AWS の Amazon QuickSight を使ってみよう

「お前は将来どうなりたいんや!?」
自己分析を怠ってきたために、こんな問いかけをされると震え上がってしまうエンジニアの横田です。
読者の皆様は BI ツールをご利用でしょうか?
ご存知の方も多いかと思いますが、BI ツールとは、企業に大量に蓄積しているデータから必要な情報を集約・分析し、経営や業務に活用できるようにするツールのことです。AWS からは Amazon QuickSight が BI ツールとして提供されています。
以前、Amazon QuickSight の名前空間(Namespaces)について ブログ記事 を執筆したのですが、そもそも Amazon QuickSight についてを弊社ブログで取り上げていないことに、今更ながら気がつきました。
本ブログでは Amazon QuickSight の始め方についてご紹介します。
それでは、レッツ分析!!
※ 本ブログ記事の内容は 2024/03/11 時点の情報です。
目次
AWS の Amazon QuickSight とは?
前述しました通り、Amazon QuickSight は、AWS が提供するクラウドベースのビジネスインテリジェンス(BI)サービスです。
BI ツールでは、ビッグデータや各種データソースから洞察を抽出し、分析した結果を視覚的で簡易的な形式で表示することが可能となっています。
Amazon QuickSight は分析用データの提供に使用できるデータソースとして Amazon Athena や Amazon S3 、ファイルデータを直接インポートといった、様々なデータソースを利用できます。
(詳しくはユーザーガイド [*1] をご確認ください)
本ブログ記事では、数あるデータソースの中から Amazon Athena をデータソースとして作成し、ダッシュボードの作成まで行いたいと思います。
本ブログの前提
- 本ブログでは Cost and Usage Report のデータを用いて、特定 AWS アカウント内の Amazon EC2 インスタンス ID 毎の月間稼働時間を取得できるようにダッシュボードを作成します。
- 月間稼働時間はダッシュボード利用者が年月の指定をできるように設定します。
- Cost and Usage Report の説明については割愛いたします。
(詳しくはユーザーガイド [*2] をご確認ください) - データソースとして利用する Amazon Athena は Cost and Usage Report を保存している Amazon S3 に対してテーブルを作成しています。
Amazon S3 のバケットは Amazon Athena のパーティション射影が利用できるよう、s3://hogehoge/fugafuga/year=yyyy/month=mm のようなツリーとなっています。
(例. s3://hogehoge/fugafuga/year=2024/month=03)
▼ テーブル作成サンプル SQL
CREATE EXTERNAL TABLE `demo_taf_quicksight`(
`line_item_usage_account_id` string,
`line_item_line_item_type` string,
`line_item_product_code` string,
`line_item_usage_type` string,
`line_item_usage_amount` double,
`line_item_resource_id` string,
`product_instance_type` string)
PARTITIONED BY (
`year` string,
`month` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
'<s3://hogehoge/fugafuga>'
TBLPROPERTIES (
'classification'='parquet',
'compressionType'='none',
'projection.enabled'='true',
'projection.month.type'='injected',
'projection.year.type'='injected',
)
- Amazon QuickSight のアカウント作成やデータセット作成に必要な IAM 権限については割愛いたします。
(詳しくはユーザーガイド [*3] をご確認ください)
AWS | Amazon QuickSight - アカウントの作成
まずはアカウントを作成します。
AWS マネジメントコンソールの検索ボックスに QuickSight と入力し、検索結果に表示される QuickSight をクリックします。

まだアカウントをお持ちでない場合はアカウントの作成が必要ですので、「 Sign up for QuickSight 」をクリックします。

本ブログではエンタープライズ版で進めますので、エンタープライズ版のラジオボタンを選択し「続行」をクリックします。

【ページ分割されたレポート】のアドオンを取得するか否かの選択画面が表示されます。
今回は不要なので「いいえ、今は結構です」をクリックします。

QuickSight アカウントの作成画面に遷移します。
まずはじめに QuickSight リージョンを選択します。

他の情報を入力したあとにリージョンを変更する場合、以下の画面キャプチャのようなポップアップが表示され、入力した情報がすべてリセットされますのでご注意ください。

今回は Amazon Athena をデータソースとしたいので、“Amazon Athena” と “Amazon S3” のチェックボックスにチェックを入れ、「完了」をクリックします。

サインアップができたら「Amazon QuickSight に移動する」をクリックしアカウントにサインインします。

サインインできました!

AWS | Amazon QuickSight - データセットの作成
画面左側のサイドバー中のデータセットをクリックし、「新しいデータセット」をクリックします。

新規データソースの候補が表示されます。めちゃめちゃありますね。。!
今回は Athena をデータソースとするので、候補中の Athena をクリックします。

データソースにしたい Athena のデータソース名を入力し、「データソースを作成」をクリックします。
データソース “AwsDataCatalog” のデータベース “demo_taf_quicksight” 、テーブル “demo_taf_quicksight” を対象にしたいので、データソース名は “AwsDataCatalog” を入力します。

テーブルの選択画面に移りますが、今回作成するダッシュボードはパラメータをユーザー側で指定できるように作成したいので、「カスタム SQL を使用」をクリックします。

select
line_item_usage_account_id as account_id,
line_item_resource_id as instance_id,
product_instance_type as instance_type,
ceiling(sum(line_item_usage_amount) * 4) / 4 as current_month_running_hrs -- 0.25単位になるよう切り上げ
from
"AwsDataCatalog"."demo_taf_quicksight"."demo_taf_quicksight"
where 1=1
and year = <<$year>>
and month = <<$month>>
and line_item_product_code = 'AmazonEC2'
and regexp_like(line_item_usage_type, '.*BoxUsage.*')
and line_item_resource_id != ''
and line_item_line_item_type = 'Usage'
and line_item_usage_account_id = 'xxxxxxxxxxxxx'
group by
line_item_usage_account_id,
line_item_resource_id,
product_instance_type
order by
instance_id
そのまま「 クエリの確認 」をクリックすると、“ SQL クエリの一部として、不明なパラメータが使用されています。” とエラー表示されてしまいました。。

何が悪いのでしょうか。詳細を表示してみます。

どうやら、ダッシュボードで指定できるようにしたい下記の where 句の指定が原因でエラーとなっているようです。
year = <<$year>>
month = <<$month>>
このままではデータセットを作成できないので、「データの編集/プレビュー」をクリックします。

フィールドやパラメータを指定できる画面が表示されます。

左側のサイドバーのパラメータをクリックし、“+” からパラメータを追加します。


まずはパラメータ “year” を作成します。

パラメータ “year” を作成してもこのアクションを実行できませんと、何やらポップアップが表示されます。
パラメータ “month” がないからですね。

パラメータ “month” も作成します。

ポップアップが表示されなくなりました!
「適用」をクリックします。

無事適用されると、データセットが表示されますので画面右上の「保存して視覚化」をクリックします。

以上がデータセットの作成です。
画面上はそのまま “分析” 画面に移ります。
AWS | Amazon QuickSight - ダッシュボードの作成
ダッシュボードの作成をしていきます。
まずは現在表示されている画面で “分析” の作成をしていきます。“分析” とはデータセットをビジュアル化するもので、この “分析” を公開したものが “ダッシュボード” となります。
それでは新規シートを作成します。

表示されているデータをそれぞれビジュアルに追加してみます!。。。データなしと表示されますね。
実はデータセットのパラメータはそのままでは “分析” に利用できません。

“分析” でパラメータを利用できるようにシートのパラメータとデータセットのパラメータをマッピングします。
キャプチャの赤枠で囲ったボタンをクリックし、パラメータを表示します。

Dataset Parameters にデータセットのパラメータが表示されていますので、 Map parameter > Create new をクリックします。

名前と静的デフォルト値を入力して「作成」をクリックします。
今回はわかりやすく、名前を “month” 、静的デフォルト値は本ブログを執筆した 3 月の “3” としておきます。

同じ要領で “year” を作成します。

シートで利用できるパラメータとして追加されましたので、「コントロールを追加」をクリックします。

コントロール名は “month” にします。
パラメータをドロップダウンから選べるようにしたいので、1 ~ 12 の値を改行区切りで入力します。
入力できたら「追加」をクリックします。

“year” も同じ要領で追加します。

うまく追加できればシートの上部に “month” と “year” が追加されます。

データが存在する年月のパラメータに変更すると。。。インスタンス ID 毎の稼働時間が表示されました!
右上の「公開」でダッシュボードとして公開します。

ダッシュボードの名前を決めて「ダッシュボードの公開」をクリックします。

ダッシュボードの画面が表示されました。

右上の共有ボタンから、作成したダッシュボードを閲覧できるユーザーを管理することができますので適切に管理しましょう。


AWS の Amazon QuickSight を使ってみよう(まとめ)
いかがでしたでしょうか?
もしとっつきにくさを感じていた読者の方がいらっしゃれば、本ブログ記事で Amazon QuiskSight に対する敷居を少しでも低くできていたら幸いです。
また、 QuickSight に限らず、「 AWS でこんなことできないかな?」「自社サーバーを AWS に引っ越したいな」等々ございましたら、右上の[お問い合わせ]からお気軽にご相談ください
ご参考: ユーザーガイド(AWS)
*1 サポートされているデータソース - Amazon QuickSight
*2 AWS コストと使用状況レポートとは - AWS コストと使用状況レポート
*3 Amazon で Athena を使用する場合のアクセス許可の不足 QuickSight - Amazon QuickSight
元記事発行日: 2024年04月12日、最終更新日: 2024年04月08日