AQ Tech Blog

Amazon QuickSight Assets As Code (AAC)をやってみた~同一アカウント編~

作成者: tsuyoshi.watanabe|2024年04月23日

はじめに

クラウドインテグレーション部の渡邊です。
Amazon QuickSightの分析・テンプレート・ダッシュボードを対象に、アセット定義の作成・移行・編集が可能になる Assets As Codeがサポートされています。
本記事では同一アカウントおよびリージョンで、Assets As Codeを利用した分析の作成を行います。
本手順実施のために、事前に分析を作成しておきましょう。

流れ

  • 分析IDの取得
  • 既存の分析の定義ファイルの取得
  • スケルトンファイルを利用して、新しい分析の定義ファイルの作成
  • 新しい分析の定義ファイルを、新しい分析用に編集する
  • 新しい定義ファイルから、新しい分析を作成
  • 分析を閲覧するための権限を付与

※本手順はダッシュボードの場合も同様です

定義ファイルの取得(分析)

まず、以下の環境変数を設定します。

export AWS_ACCOUNT_ID=123456789012
export QUICKSIGHT_REGION=ap-northeast-1
export QUICKSIGHT_USER_NAME=WSParticipantRole/Participant
export QUICKSIGHT_USER_ARN=arn:aws:quicksight:ap-northeast-1:123456789012:user/default/WSParticipantRole/Participant

対象の分析IDAnalysisIdを取得するために、分析の情報を確認します。

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

{
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:analysis/2a7a0f42-7bd2-43c4-b332-2b4fd21d5b95",
"AnalysisId": "2a7a0f42-7bd2-43c4-b332-2b4fd21d5b95",
"Name": "Web and Social Media Analytics analysis",
"Status": "CREATION_SUCCESSFUL",
"CreatedTime": "2023-12-22T04:10:14.157000+00:00",
"LastUpdatedTime": "2023-12-22T04:10:14.157000+00:00"
}

QUICKSIGHT_ANALYSIS_DEFINITION_FILE_PATHは任意のパスで問題ありません

export QUICKSIGHT_ANALYSIS_ID=2a7a0f42-7bd2-43c4-b332-2b4fd21d5b95
export QUICKSIGHT_ANALYSIS_DEFINITION_FILE_PATH=~/environment/aac/aac_lab_analysis_definition.json

対象の分析の定義ファイルを取得します。

cd ~/environment
mkdir -p aac
cd ./aac
aws --region ${QUICKSIGHT_REGION} quicksight describe-analysis-definition --aws-account-id ${AWS_ACCOUNT_ID} --analysis-id ${QUICKSIGHT_ANALYSIS_ID} > ${QUICKSIGHT_ANALYSIS_DEFINITION_FILE_PATH}

定義ファイルは大変長いため、ここでは記載を割愛します。

スケルトンファイルを利用した新しい分析の定義ファイルの作成

分析用スケルトンファイルパスと、新しい分析の定義のファイルパスを環境変数として定義します。

export QUICKSIGHT_ANALYSIS_SKELETON_FILE_PATH=~/environment/aac/aac_lab_analysis_skeleton.json
export QUICKSIGHT_NEW_ANALYSIS_DEFINITION_FILE_PATH=~/environment/aac/aac_lab_analysis_new_definition.json

既存の分析からスケルトンファイルを作成します。

aws --region ${QUICKSIGHT_REGION} quicksight create-analysis --generate-cli-skeleton > ${QUICKSIGHT_ANALYSIS_SKELETON_FILE_PATH}

既存の分析の定義ファイルとスケルトンファイルから新しい定義ファイルを作成します。
最低限以下のパラメータが必要です。
これらの情報を突き合わせて、新しい定義ファイルを作成します。

  • 定義ファイル
    • AwsAccountId
    • Name
    • ThemeArn
    • DashboardPublishOptions(ダッシュボードの場合)
  • スケルトンファイル
    • Name
    • ThemeArn
    • AnalysisId(分析の場合)
    • DashboardId(ダッシュボードの場合)

新しい定義ファイルから、新しい分析を作成

作成のためのコマンドの実行に成功すると、"Status": 202を含む出力結果となります。

aws --region ${QUICKSIGHT_REGION} quicksight create-analysis --cli-input-json file://${QUICKSIGHT_NEW_ANALYSIS_DEFINITION_FILE_PATH}

{
"Status": 202,
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:analysis/4e604dd8-8914-4f70-b5a7-802187bf2498",
"AnalysisId": "4e604dd8-8914-4f70-b5a7-802187bf2498",
"CreationStatus": "CREATION_IN_PROGRESS",
"RequestId": "64c69fd1-c79d-40d7-b292-95c782874302"
}

必須フィールドの未定義や不適切な情報が記述されているとエラーが発生します。

An error occurred (ValidationException) when calling the CreateAnalysis operation: 1 validation error detected: Value '{Input Theme}' at 'themeArn' failed to satisfy constraint: Specified resource is not reachable in this region ('ap-northeast-1'). Please check the arn format and region information
An error occurred (ValidationException) when calling the CreateAnalysis operation: 1 validation error detected: Value 'arn:aws:quicksight:us-east-1:123456789012:theme/custom_theme_v1' at 'themeArn' failed to satisfy constraint: Specified resource is not reachable in this region ('ap-northeast-1'). Please check the arn format and region information

暫く待つと作成できるため、新しい分析IDを含めて分析の情報を確認します。
Nameに記述されているNew Web and Social Media Analytics analysisは、QuickSightの分析のコンソール画面で確認できます。

$ aws --region ${QUICKSIGHT_REGION} quicksight describe-analysis --aws-account-id ${AWS_ACCOUNT_ID} --analysis-id ${QUICKSIGHT_NEW_ANALYSIS_ID}
{
"Status": 200,
"Analysis": {
"AnalysisId": "4e604dd8-8914-4f70-b5a7-802187bf2498",
"Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:analysis/4e604dd8-8914-4f70-b5a7-802187bf2498",
"Name": "New Web and Social Media Analytics analysis",
"Status": "CREATION_SUCCESSFUL",
"DataSetArns": [
"arn:aws:quicksight:ap-northeast-1:123456789012:dataset/15feae28-a002-4e87-9abc-54e2d31f1ba3"
],
"ThemeArn": "arn:aws:quicksight:ap-northeast-1:123456789012:theme/custom_theme_v1",
"CreatedTime": "2023-12-22T05:25:05.654000+00:00",
"LastUpdatedTime": "2023-12-22T05:25:06.087000+00:00",
"Sheets": [
{
"SheetId": "c16618c8-6c67-49fd-a7a9-e060902a45cc",
"Name": "Sheet 1"
}
]
},
"RequestId": "82973e77-409f-4dd5-ba23-f216f7399e1e"
}

また、意図しない設定で分析ファイルから作成した場合は、修正後にアップデートできるのでご安心ください。

aws --region ${QUICKSIGHT_REGION} quicksight update-analysis --cli-input-json file://${QUICKSIGHT_NEW_ANALYSIS_DEFINITION_FILE_PATH}

分析への権限を付与

分析を自動生成するアプリケーション実行ユーザーとQuickSightユーザーが異なる場合、分析のコンソール画面から該当の分析を確認できません。
その場合、QuickSightのユーザーに新しい分析へのアクセス権を付与します。

aws --region ${QUICKSIGHT_REGION} quicksight update-analysis-permissions --aws-account-id ${AWS_ACCOUNT_ID} --analysis-id ${QUICKSIGHT_NEW_ANALYSIS_ID} --grant-permissions Principal=${QUICKSIGHT_USER_ARN},Actions=quicksight:RestoreAnalysis,quicksight:UpdateAnalysisPermissions,quicksight:DeleteAnalysis,quicksight:QueryAnalysis,quicksight:DescribeAnalysisPermissions,quicksight:DescribeAnalysis,quicksight:UpdateAnalysis

{
"Status": 200,
"AnalysisArn": "arn:aws:quicksight:ap-northeast-1:123456789012:analysis/4e604dd8-8914-4f70-b5a7-802187bf2498",
"AnalysisId": "4e604dd8-8914-4f70-b5a7-802187bf2498",
"Permissions": [
{
"Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/WSParticipantRole/Participant",
"Actions": [
"quicksight:RestoreAnalysis",
"quicksight:UpdateAnalysisPermissions",
"quicksight:DeleteAnalysis",
"quicksight:DescribeAnalysisPermissions",
"quicksight:QueryAnalysis",
"quicksight:DescribeAnalysis",
"quicksight:UpdateAnalysis"
]
}
],
"RequestId": "fff51de2-b9b5-4079-94c7-0c8575c94b8d"
}

分析のコンソール画面を確認すると、意図した名前の分析が作成されていました。

今回は、同じアカウント同じリージョンに対して実行しました。
しかし、それぞれ別の場合であっても作成が可能です。

【参考】

quicksight
Amazon QuickSight Assets As Code (AAC) でダッシュボード作成やってみた!
Amazon QuickSight のテンプレートを使用して、クロスアカウントアクセスを設定する方法を教えてください。