Quick Sightの分析のクロスアカウントコピー
- toshiki nishio
- 2024年7月23日
- 読了時間: 5分
更新日:5月2日

はじめに
今回のブログではQuick Sightで作成した分析をクロスアカウントコピーするための方法を紹介します。
開発環境で作成した分析を本番環境にコピーしたい時などにこの方法が使えるのではないかと思います。
2024/07/12追記
QuickSightでアセット(データセット・分析・ダッシュボードなど)を管理する機能が追加されました。この機能を使って、アセットを複製する記事はこちらで紹介されています。
前提
コピー先アカウントとコピー元アカウントで同じ形のデータセットが存在する。
コピー元ではそのデータセットから作られた分析が存在する。
実施環境
今回のブログで紹介する手順はcloud9で実施しました。
AWS CLIとLinuxコマンドを実行できる環境であれば、手順をそのまま実行できると思います。
手順
事前準備
変数定義
以下のようにコピー先アカウントとコピー元アカウントの情報を変数定義します。
COPY_FROM_DIR=[コピー元作業用フォルダ名]
COPY_FROM_ACCOUNT_ID=[コピー元アカウントID]
COPY_FROM_PROFILE=[コピー元プロファイル名]
COPY_TO_DIR=[コピー先作業用フォルダ名]
COPY_TO_ACCOUNT_ID=[コピー先アカウントID]
COPY_TO_PROFILE=[コピー先プロファイル]作業用フォルダ作成
また、データセットのArnなどの情報をファイル出力して取得するため、その情報を格納するためのフォルダを作っておきます。
mkdir $COPY_FROM_DIR
mkdir $COPY_TO_DIRコピー元アカウントで実施する作業
コピー先アカウントで分析を作成するために、テンプレートファイルを作る必要があります。まずはテンプレートファイルを作成するために、コピー元のアカウントで各種情報を取得します。必要な情報は以下の3つです。
コピー元のデータセットArn
コピー元の分析Arn
コピー元の分析にアクセスできる権限を持ったユーザのArn
コピー元のデータセットArnを取得する手順
1.データセット一覧をファイル出力
aws --profile $COPY_FROM_PROFILE quicksight list-data-sets --aws-account-id $COPY_FROM_ACCOUNT_ID > ./$COPY_FROM_DIR/dataset_list.jsonこのコマンドを実行して、データセットの一覧をファイル出力します。
2. 上記ファイルからデータセットArnを取得
下記画像のようにデータセットの一覧がファイル出力されているので、データセットの名前(Name)を頼りに対応するデータセットのArnを取得します。
コピー元の分析Arnを取得する手順
1.分析一覧をファイル出力
aws --profile $COPY_FROM_PROFILE quicksight list-analyses --aws-account-id $COPY_FROM_ACCOUNT_ID > ./$COPY_FROM_DIR/analyse_list.json2. 上記ファイルから分析Arnを取得
データセットのArnを取得した時と同様に分析の名前(Name)を頼りに対応する分析のArnを取得します。
コピー元の分析にアクセスできる権限を持ったユーザのArnを取得する手順
1.ユーザー一覧をファイル出力
aws --profile $COPY_FROM_PROFILE quicksight list-users --aws-account-id $COPY_FROM_ACCOUNT_ID --namespace default > ./$COPY_FROM_DIR/user_list_1.jsonユーザー出力は上限が100人なので、上記の出力結果に欲しいものがなければNEXT_TOKENを指定して次のユーザ一覧を出力します。NEXT_TOKENは上記CLIの出力結果に記載されています。
以下のようにNEXT_TOKENを指定して実行します。
NEXT_TOKEN="xxxxxxxxxxxxxxx"
aws --profile $COPY_FROM_PROFILE quicksight list-users --aws-account-id $COPY_FROM_ACCOUNT_ID --namespace default --next-token $NEXT_TOKEN > ./$COPY_FROM_DIR/user_list_2.jsonテンプレートファイル作成
上記手順を実施して、情報が取得できたら次はテンプレートを作成します。
1.テンプレートファイル作成(空ファイル)
以下コマンドを実行し、テンプレートを作成するための情報を記載するためのファイルを作成します。
touch ./$COPY_FROM_DIR/template.json2.テンプレートを作成するための情報記載。
上記手順で作成した空ファイルに以下を記載します。これまでに取得した各種Arnを記入してください。
{
"AwsAccountId": "<コピー元アカウントID>",
"TemplateId": "<任意>",
"Name": "<任意>",
"Permissions": [ {
"Principal": "<ユーザーのArn>",
"Actions": [
"quicksight:UpdateTemplatePermissions",
"quicksight:DescribeTemplate"
]
}, {
"Principal": "arn:aws:iam::<コピー先アカウントID>:root",
"Actions": [
"quicksight:DescribeTemplate"
]
}
],
"SourceEntity": {
"SourceAnalysis": {
"Arn": "<分析の Arn>",
"DataSetReferences": [ {
"DataSetPlaceholder": "<任意(DS1など)>",
"DataSetArn": "<データセットのArn>"
}
]
}
}
}3.テンプレート作成
以下コマンドを実行すルト、手順2で記載した情報を元にテンプレートが作成されます。
aws --profile $COPY_FROM_PROFILE quicksight create-template --cli-input-json file://$COPY_FROM_DIR/template.jsonコピー先アカウントで実施する作業
コピー先のアカウントで分析を作るために以下情報を取得する必要があります。
コピー先アカウントのデータセットArn
コピー先アカウントで分析アクセス権があるユーザーのArn
コピー先アカウントのデータセットArnを取得する手順
以下コマンドを実行してデータセットの一覧をファイル出力し、その中からデータセットArnを取得します。
aws --profile $COPY_TO_PROFILE quicksight list-data-sets --aws-account-id $COPY_TO_ACCOUNT_ID > ./$COPY_TO_DIR/dataset_list.jsonコピー先アカウントで分析アクセス権があるユーザーのArnを取得する手順
以下コマンドを実行して分析アクセス権があるユーザArnを取得します。
aws --profile $COPY_TO_PROFILE quicksight list-users --aws-account-id $COPY_TO_ACCOUNT_ID --namespace default > ./$COPY_TO_DIR/user_list_1.json上記のArnを取得したらテンプレートファイルを作成します。
まず、以下コマンドを実行し、空ファイルを作ります。
touch ./$COPY_TO_DIR/template.jsonそして、このファイルにテンプレート情報を以下のように記載します。
{
"AwsAccountId": "<コピー先アカウントID>",
"AnalysisId": "<任意>",
"Name": "<任意(分析の名前になります)>",
"Permissions": [ {
"Principal": "<開発のユーザーArn>",
"Actions": [
"quicksight:QueryAnalysis",
"quicksight:DescribeAnalysis",
"quicksight:UpdateAnalysis",
"quicksight:DeleteAnalysis",
"quicksight:RestoreAnalysis",
"quicksight:DescribeAnalysisPermissions",
"quicksight:UpdateAnalysisPermissions"
]
}
],
"SourceEntity": {
"SourceTemplate": {
"DataSetReferences": [ {
"DataSetPlaceholder": "<quicksight-template.jsonのものと同じもの>",
"DataSetArn": "開発のデータセット Arn>"
}
],
"Arn": "テンプレート作成時に取得した Arn>"
}
}
}最後に、以下コマンドを実行するとコピー先アカウントで分析を作成することができます。
aws --profile $COPY_TO_PROFILE quicksight create-analysis --cli-input-json file://$COPY_TO_DIR/template.jsonさいごに
長々となりましたが、Quick Sightの分析をクロスアカウントコピーする手順について紹介しました。結構手順が長いのでもっと簡単にできればなと思います。AWSのアップデートでもっと簡単にコピー出来るようになることを期待したいと思います。


