Amazon QuickSight Assets As Code (AAC) でダッシュボード作成やってみた!

本記事は TechHarmony Advent Calendar 12/21付の記事です。

こんにちは、「TechHarmony Advent Calendar 2023」21日目担当、SCSK三上です。
もうすぐクリスマス★日が落ちるのが早いことが寂しい冬ですが、この時期は日が落ちると街がイルミネーションでライトアップされていくのでわくわくします♦◊♦◊

今回は、2022年re:Inventにて発表されたAmazon QuickSightをコード管理する『Assets as Code』(以下AaC)機能について、
概要と実際に触ってみたので画面イメージなど共有していきます!

Amazon QuickSightについてはこちらのブログ冒頭に記載しております!

Amazon QuickSightについて

今までのAmazon QuickSightに関する課題
  • 一部のビジュアルや設定を変更してダッシュボードや分析の再利用
  •  マルチテナントの各テナントに応じたテーマ設定など
  •  マルチテナントの各テナントに応じたパラメータ変更など
  •  ダッシュボードや分析のバージョン管理やバックアップおよびリストア
  • 別AWSアカウントからのダッシュボードや分析のインポート
  •  別AWSアカウントへのダッシュボードや分析のエクスポート
    • アカウント間の移行など、コスト含める開発効率が悪い…

Assets as Code (AaC)について

AaCでできること、できないこと
できること できないこと
  • Amazon QuickSightの外部にダッシュボード/分析の定義をエクスポート
    • AWS CodeCommitやGitHubによるバージョン管理が可能!
  • アセットを移行する前にビジュアルやテキストなどのレイアウト修正
  • BCPBusiness Continuity Plan – 事業継続計画)またはDisaster Recoveryの定義
    • 災害があった場合に事前に定義ファイルを読み込むことで別リージョンで同じ環境を再現できる!
  • プログラムによるダッシュボード/分析の作成
  • 他のツールから移行するための自動化作成
  • 分析やダッシュボードのレイアウトのスナップショットを作成してAmazon QuickSightに保存
  • Amazon QuickSightアカウント内でのバージョン管理
  • データセットとデータソースの管理(別途管理が必要)
    • あくまでもダッシュボードや分析の管理になる!

つまり、AaCは今までGUI操作メインだったQuickSightがコード管理できるようになり、
アカウントの再現・再利用がしやすくなったということです!

Assets as Bundle (AaB)について

AaCとは別にAaBという機能もあります。できること・できないことはAaCと基本的に同じですが、
AaCとの違いは、”AaBは、別環境への移行をよりシームレスにできる“ということです。

テンプレート vs AaC vs AaB
項目 Template AaC AaB
対応アセット
  • 分析
  • ダッシュボード
  • 分析
  • ダッシュボード
  • 分析
  • ダッシュボード
  • テーマ
  • データセット
  • データソース
  • Ingestionスケジュール
  • VPC接続
バージョン管理機能 あり Amazon QuickSight以外で可 Amazon QuickSight以外で可
可視化定義出力 不可
移行時に必要なその他のアセット
  • データセット
  • データソース
  • テーマ
  • データセット
  • データソース
  • テーマ
なし
シート対応(ダッシュボード) 不可(常に全シート)
CloudFormation/CDK対応 未対応 ※対応予定あり!
CLIバージョン 自動対応 手動管理 自動対応
用途
  • 環境間のアセット移行やバージョン管理
  • コードレベルでのアセット管理
  • ダッシュボードや分析のSaaSや複数環境における展開
  • データセットやデータソースは共通化して、環境間のアセット移行として使用
  • 環境間でのアセット移行やバックアップ
  • コードレベルのアセット管理

コードで新しいダッシュボードを作成してみる

まずは、コードでダッシュボードを作成してみます!アーキテクチャは下記の通りです。
作業は、Cloud9上でコマンド操作していきます。

今回実施することは、既存で作成されたダッシュボードの定義ファイルをエクスポートし、
同一アカウント内で、定義ファイルをインポートし新規のダッシュボードとして作成していきたいと思います!

前提として、QuickSight操作可能なCloud9の環境はセットアップ済みとします。
また、コマンドに記載の変数はCloud9上で事前に定義設定しているものとします。
例:    

export QUICKSIGHT_REGION =es-east-1

① ダッシュボード定義ファイルの取得

まずは、エクスポートする既存ダッシュボードの定義ファイルを取得します。

aws --region ${QUICKSIGHT_REGION} quicksight describe-analysis-definition --aws-account-id ${AWS_ACCOUNT_ID} --analysis-id ${QUICKSIGHT_ANALYSIS_ID} > ${QUICKSIGHT_ANALYSIS_DEFINITION_FILE_PATH}

QUICKSIGHT_ANALYSIS_IDは、既存ダッシュボードの分析IDです。分析IDの取得コマンドは、以下の通りです。

aws --region ${QUICKSIGHT_REGION} quicksight list-analyses --aws-account-id ${AWS_ACCOUNT_ID}

QUICKSIGHT_ANALYSIS_DEFINITION_FILE_PATHは、ダッシュボード定義ファイルのパスです。ご自身のCloud9環境のパスをご指定下さい。
例:

export QUICKSIGHT_ANALYSIS_DEFINITION_FILE_PATH=~/xxxxxx/xx/analysis_definition.json

② ダッシュボード作成ファイル(スケルトンファイル)の取得

ダッシュボード定義ファイルは既存ダッシュボードの情報になります。コードで新規にダッシュボードを作成するスケルトンファイルを取得していきます。

AaCでは、「ダッシュボード定義ファイル」と「スケルトンファイル」が必要です!
スケルトンファイルは設定項目のみ記載しているテンプレートファイルです。

それでは、ダッシュボード用のスケルトンファイルを取得します。

aws --region ${QUICKSIGHT_REGION} quicksight create-dashboard --generate-cli-skeleton > ${QUICKSIGHT_DASHBOARD_SKELETON_FILE_PATH}

QUICKSIGHT_DASHBOARD_SKELETON_FILE_PATHは、スケルトンファイルのパスです。ご自身のCloud9環境のパスをご指定ください。

例:

export QUICKSIGHT_DASHBOARD_SKELETON_FILE_PATH=~/xxxxxx/xx/dashboard_skeleton.json

③ 新しいダッシュボードの定義ファイルの作成

既存のダッシュボード定義ファイルとスケルトンファイルからそれぞれ実行時に必要なパラメータを抽出し、ダッシュボード定義ファイルの値を参考に、新しい定義ファイルを作成します。最低限必要なパラメータは下記の通りです。

定義ファイル スケルトンファイル
  • AwsAccountId
  • Name
  • ThemeArn
  • DashboardPublishOptions
  • Name
  • ThemeArn
  • DashboardId

一部JSON抜粋したものが下記の通りです。手動で抽出するのは結構面倒くさいので、ダッシュボード定義ファイルとスケルトンファイルを突き合わせて新しい定義ファイルを作成するスクリプトなど活用すると良いです!

④ 新しいダッシュボードの作成

新しいダッシュボード定義ファイルを読み込ませ、新しいダッシュボードを作成していきます。

aws --region ${QUICKSIGHT_REGION} quicksight create-dashboard --cli-input-json file://${QUICKSIGHT_NEW_DASHBOARD_DEFINITION_FROM_DASHBOARD_FILE_PATH}

QUICKSIGHT_NEW_DASHBOARD_DEFINITION_FROM_DASHBOARD_FILE_PATHは、新しいダッシュボードの定義ファイルのパスです。ご自身のCloud9環境のパスをご指定ください。

例:

export QUICKSIGHT_NEW_DASHBOARD_DEFINITION_FROM_DASHBOARD_FILE_PATH=~/xxxxxx/xx/new_dashboard_definition.json

Cloud9のCreateStatusに『CREATION_IN_PROGRESS』と表示されれば成功です。
ステータスの確認方法は以下の通りです。

aws --region ${QUICKSIGHT_REGION} quicksight describe-dashboard --aws-account-id ${AWS_ACCOUNT_ID} --dashboard-id <ダッシュボードID> 

値が『CREATION_SUCCESSFULL』になれば作成完了です。

⑤ 権限付与&確認

この状態でダッシュボードのコンソールを確認しても、ダッシュボードは表示されません。
QuickSightのユーザに対してアクセス権限を付与する必要があります。

aws --region ${QUICKSIGHT_REGION} quicksight update-dashboard-permissions --aws-account-id ${AWS_ACCOUNT_ID} --dashboard-id <ダッシュボードのID> --grant-permissions Principal=${QUICKSIGHT_USER_ARN},Actions=quicksight:DescribeDashboard,quicksight:ListDashboardVersions,quicksight:UpdateDashboardPermissions,quicksight:QueryDashboard,quicksight:UpdateDashboard,quicksight:DeleteDashboard,quicksight:UpdateDashboardPublishedVersion,quicksight:DescribeDashboardPermissions

これでコンソールを確認すると、新しいダッシュボードが表示されます!

感想

今回は、同一アカウントでダッシュボードを作成しましたが、他アカウントへ分析・ダッシュボードの移行する際に役立つかと思います!
実際にAaCを触ってみて、ポイントは新しいダッシュボードの定義ファイルを作成する点かと思います。

今回はスケルトンファイルと既存のダッシュボード定義ファイルから必要な設定項目を抽出し、新しいダッシュボードの定義ファイルを作成するPythonを用意していたので、問題なかったですがこれを一から手動で作成するのは厳しいな…と感じました。
それ以外は、比較的分かりやすく進めることができました!

最近、QuickSightのアップデートが著しいので今後は新しい機能をどんどんトライしていきたいと思います★

タイトルとURLをコピーしました