AQ Tech Blog

Amazon QuickSight Assets As Code (AAC)~クロスアカウント編~

作成者: tsuyoshi.watanabe|2024年05月01日

はじめに

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

  • 既存データのあるアカウント(アカウントAと呼ぶ)で分析を作成する
  • 分析の新規作成先のアカウント(アカウントBと呼ぶ)でデータソースを作成する

実行の流れ

分析IDと既存の分析の定義ファイルの取得は、記事「Amazon QuickSight Assets As Code (AAC)をやってみた~同一アカウント編~」で執筆したため、割愛します。

  • アカウントA側
    • 分析IDの取得
    • テンプレートの作成
  • アカウントB側
    • アカウントAのテンプレート情報を参照して分析を作成

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

実際にやってみた

既存データのあるアカウント(アカウントA)での実行内容

分析の新規作成先のアカウント(アカウントBと呼ぶ)に分析を作成するために、既存データのあるアカウント(アカウントAと呼ぶ)でテンプレートを作成します。


aws quicksight create-template --region ap-northeast-1 --aws-account-id <アカウントAのID> --template-id randomtemplateid --name NewWebandSocialMediaAnalyticsanalysis-template \
> --permissions '[
> {
> "Principal": "arn:aws:iam::<アカウントBのID>:root",
> "Actions": ["quicksight:DescribeTemplate"]
> }
> ]' \
> --source-entity \
> '{
> "SourceAnalysis": {
> "Arn": "arn:aws:quicksight:ap-northeast-1:<アカウントAのID>:analysis/4e604dd8-8914-4f70-b5a7-802187bf2498",
> "DataSetReferences": [
> {
> "DataSetPlaceholder": "hogedatasetplaceholder",
> "DataSetArn": "arn:aws:quicksight:ap-northeast-1:<アカウントAのID>:dataset/15feae28-a002-4e87-9abc-54e2d31f1ba3"
> }
> ]
> }
> }'
{
"Status": 202,
"Arn": "arn:aws:quicksight:ap-northeast-1:<アカウントAのID>:template/randomtemplateid",
"VersionArn": "arn:aws:quicksight:ap-northeast-1:<アカウントAのID>:template/randomtemplateid/version/1",
"TemplateId": "randomtemplateid",
"CreationStatus": "CREATION_IN_PROGRESS",
"RequestId": "7ba4b9ea-ab6e-40fd-9217-35d535faf35f"
}

分析の新規作成先のアカウント(アカウントB)での実行内容

アカウントAのテンプレート情報と、アカウントBのデータセットから分析を作成します。

aws quicksight create-analysis --aws-account-id <アカウントBのID> --analysis-id randomtemplateid --name NewWebandSocialMediaAnalyticsanalysis-template \
--source-entity '{
"SourceTemplate": {
"Arn": "arn:aws:quicksight:ap-northeast-1:<アカウントAのID>:template/randomtemplateid",
"DataSetReferences": [
{
"DataSetPlaceholder": "hogedatasetplaceholder",
"DataSetArn": "arn:aws:quicksight:us-east-1:<アカウントBのID>:dataset/3b878441-b131-46e4-b6c3-21a2542ef4ab"
}
]
}
}' \
--permissions '[
{
"Principal": "arn:aws:quicksight:us-east-1:<アカウントBのID>:user/default/AWSReservedSSO_AQAdministratorAccess_ff474d18596a1d80",
"Actions": [
"quicksight:RestoreAnalysis",
"quicksight:UpdateAnalysisPermissions",
"quicksight:DeleteAnalysis",
"quicksight:DescribeAnalysisPermissions",
"quicksight:QueryAnalysis",
"quicksight:DescribeAnalysis",
"quicksight:UpdateAnalysis"
]
}
]'

コンソール画面を確認すると表示されていました。

分析を作成する際には、参照元のテンプレートの値と一致させることに注意する

分析を作成する際に、DataSetPlaceholderの値が参照元のテンプレートのものと一致しないと、エラーが発生するので注意してください。

aws quicksight create-analysis --aws-account-id <アカウントBのID> --analysis-id randomtemplateid --name NewWebandSocialMediaAnalyticsanalysis-template \
--source-entity '{
"SourceTemplate": {
"Arn": "arn:aws:quicksight:ap-northeast-1:<アカウントAのID>:template/randomtemplateid",
"DataSetReferences": [
{
"DataSetPlaceholder": "randomtemplateid",
"DataSetArn": "arn:aws:quicksight:us-east-1:<アカウントBのID>:dataset/3b878441-b131-46e4-b6c3-21a2542ef4ab"
}
]
}
}' \
--permissions '[
{
"Principal": "arn:aws:quicksight:us-east-1:<アカウントBのID>:user/default/AWSReservedSSO_AQAdministratorAccess_ff474d18596a1d80",
"Actions": [
"quicksight:RestoreAnalysis",
"quicksight:UpdateAnalysisPermissions",
"quicksight:DeleteAnalysis",
"quicksight:DescribeAnalysisPermissions",
"quicksight:QueryAnalysis",
"quicksight:DescribeAnalysis",
"quicksight:UpdateAnalysis"
]
}
]'


{
"Status": 202,
"Arn": "arn:aws:quicksight:us-east-1:<アカウントBのID>:analysis/randomtemplateid",
"AnalysisId": "randomtemplateid",
"CreationStatus": "CREATION_IN_PROGRESS",
"RequestId": "d25d3b50-38d2-4997-9406-5547f9e6c55d"
}

分析の作成状況を発生すると、正しいDataSetPlaceholderの値を指定していないことが原因で、バリデーションエラーが発生しています。

$ aws quicksight describe-analysis --analysis-id randomtemplateid   --aws-account-id <アカウントBのID>
{
"Status": 200,
"Analysis": {
"AnalysisId": "randomtemplateid",
"Arn": "arn:aws:quicksight:us-east-1:<アカウントBのID>:analysis/randomtemplateid",
"Name": "NewWebandSocialMediaAnalyticsanalysis-template",
"Status": "CREATION_FAILED",
"Errors": [
{
"Type": "VALIDATION_ERROR",
"Message": "Given placeholders [randomtemplateid] are not part of template"
}
],
"DataSetArns": [],
"CreatedTime": "2023-12-22T08:58:12.620000+00:00",
"LastUpdatedTime": "2023-12-22T08:58:15.025000+00:00",
"Sheets": []
},
"RequestId": "44420e6d-7bbf-44db-b99c-5c19d6cb1b00"
}

同じ分析IDで作成できないため、一度作成に失敗した分析を削除しましょう。

An error occurred (ResourceExistsException) when calling the CreateAnalysis operation: Analysis arn:aws:quicksight:us-east-1:<アカウントBのID>:analysis/randomtemplateid already exists

作成に失敗した分析はダッシュボード画面からは確認できなかったので、注意してください。

 aws quicksight delete-analysis --analysis-id randomtemplateid --aws-account-id  <アカウントBのID> --region us-east-1

{
"Status": 200,
"Arn": "arn:aws:quicksight:us-east-1:<アカウントBのID>:analysis/randomtemplateid",
"AnalysisId": "randomtemplateid",
"DeletionTime": "2024-01-21T09:23:06+00:00",
"RequestId": "f9085f63-2c7b-4cfb-9ffb-8e4a7bb98f84"
}

 

【参考】
QuickSightで作成した分析を、テンプレート機能を使って別アカウントへ配布してみる