本記事は 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でできること、できないこと
できること | できないこと |
|
|
つまり、AaCは今までGUI操作メインだったQuickSightがコード管理できるようになり、
アカウントの再現・再利用がしやすくなったということです!
Assets as Bundle (AaB)について
AaCとは別にAaBという機能もあります。できること・できないことはAaCと基本的に同じですが、
AaCとの違いは、”AaBは、別環境への移行をよりシームレスにできる“ということです。
テンプレート vs AaC vs AaB
項目 | Template | AaC | AaB |
対応アセット |
|
|
|
バージョン管理機能 | あり | Amazon QuickSight以外で可 | Amazon QuickSight以外で可 |
可視化定義出力 | 不可 | 可 | 可 |
移行時に必要なその他のアセット |
|
|
なし |
シート対応(ダッシュボード) | 不可(常に全シート) | 可 | 可 |
CloudFormation/CDK対応 | 可 | 可 | 未対応 ※対応予定あり! |
CLIバージョン | 自動対応 | 手動管理 | 自動対応 |
用途 |
|
|
|
コードで新しいダッシュボードを作成してみる
まずは、コードでダッシュボードを作成してみます!アーキテクチャは下記の通りです。
作業は、Cloud9上でコマンド操作していきます。
今回実施することは、既存で作成されたダッシュボードの定義ファイルをエクスポートし、
同一アカウント内で、定義ファイルをインポートし新規のダッシュボードとして作成していきたいと思います!
① ダッシュボード定義ファイルの取得
まずは、エクスポートする既存ダッシュボードの定義ファイルを取得します。
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
③ 新しいダッシュボードの定義ファイルの作成
既存のダッシュボード定義ファイルとスケルトンファイルからそれぞれ実行時に必要なパラメータを抽出し、ダッシュボード定義ファイルの値を参考に、新しい定義ファイルを作成します。最低限必要なパラメータは下記の通りです。
定義ファイル | スケルトンファイル |
|
|
一部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のアップデートが著しいので今後は新しい機能をどんどんトライしていきたいと思います★