Amazon QuickSightで異なる名前空間にテンプレートを配布する
データアナリティクス事業本部インテグレーション部コンサルティングチーム・新納(にいの)です。
AWSアカウントに一つにつき、Amazon QuickSightのアカウントは一つしか作れませんが、名前空間という機能を使うことで環境を論理的に分離できます。マルチテナント環境の実現に便利なのですが、別の名前空間のアセット(データセット・分析・ダッシュボード)へアクセスすることはできません。
そこで役立つのがテンプレート機能です。本エントリでは、テンプレート機能を使って別の名前空間へ分析を作ります。
前提
名前空間とは
AWSアカウントにつき1環境しか作成できないQuickSightの環境を、名前空間を使うことで論理的に分離できるという機能です。詳細は以下のエントリをご参照ください。
テンプレートとは
QuickSightではデータセットに分析を接続し、可視化を実施します。このデータセットと分析を合わせた定義がテンプレートと呼ばれるものです。とあるQuickSightアカウントで作成した分析を他の環境でも利用したいようなユースケースで便利に使えます。
参考:
実行環境
名前空間の作成、テンプレートの作成は両方ともAWS CLIの利用が必要です。AWSマネジメントコンソール上からAWS CloudShellを使えば、AWS CLIのインストールといったセットアップなしにコマンドが実行可能です。
事前準備
まずは名前空間、IAMユーザー、テンプレートをそれぞれ作成します。
名前空間の作成
create-namespace
コマンドを実行し、dev
という名前空間を作成します。
$ aws quicksight create-namespace --aws-account-id <AWSアカウントID> --namespace dev --identity-store QUICKSIG HT
以下のようなレスポンスが返ってきました。
{ "Status": 202, "Name": "dev", "CapacityRegion": "ap-northeast-1", "CreationStatus": "CREATING", "IdentityStore": "QUICKSIGHT", "RequestId": "d69c4a36-2237-4a77-855f-a5cc36dcfda0" }
IAMユーザー作成
AWSマネジメントコンソール上から権限のないIAMユーザーを作成し、新たに作成した名前空間へ権限を割り当てます。今回はAUTHORの権限を割り当てました。
$ aws quicksight register-user --identity-type IAM --email <メールアドレス> --user-role AUTHOR --iam-arn arn:aws:iam::<AWSアカウントID>:user/quicksight-dev-user --aws-account-id <AWSアカウントID> --namespace dev
以下のようなレスポンスが返ってきました。
{ "Status": 201, "User": { "Arn": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:user/dev/quicksight-dev-user", "UserName": "quicksight-dev-user", "Email": <メールアドレス>, "Role": "AUTHOR", "IdentityType": "IAM", "Active": false, "PrincipalId": "federated/iam/AIDASUAISF6AWIYDI5FEJ" }, "RequestId": "e002531d-fdcc-4e81-a264-1070fdef04d6" }
テンプレートを名前空間に配布する
テンプレート作成
テンプレートはcreate-template
コマンドで作成します。
ここでポイントとなるのは--permissions
のPrincipal
です。ここで名前空間のARNを以下のような形で指定することで該当の名前空間にテンプレートにアクセスする権限を与えます。。
arn:aws:quicksight:ap-northeast-1::namespace/dev
--source-entity
では、テンプレート作成のもととなる分析とデータセットのARNをそれぞれ指定します。GUI上からでは確認できないため、それぞれlist-analyses
とlist-data-sets
コマンドで一覧を表示し、ARNを取得してください。
$ aws quicksight create-template --aws-account-id <AWSアカウントID> --template-id <任意のテンプレートID> --name <任意のテンプレート名> \ --permissions '[ { "Principal": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:namespace/dev", "Actions": ["quicksight:DescribeTemplate"] } ]' \ --source-entity \ '{ "SourceAnalysis": { "Arn": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:analysis/893da04f-bdcd-4500-ba89-e95e43d86420", "DataSetReferences": [ { "DataSetPlaceholder": "<任意のプレースホルダー名>", "DataSetArn": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:dataset/37183dd7-47f2-4c89-9050-07ad17ee4d5d" } ] } }'
名前空間上でデータセット作成
今回は新たに作った名前空間(dev)上で新たにデータセットを作成しました。テンプレートを元にして分析を作る際に必要となりますので再度list-data-sets
コマンドでデータセットの一覧を表示し、ARNを取得します。
テンプレートを元に分析を作成
テンプレート、データセット、名前空間のARNをそれぞれ指定してcreate-analysis
コマンドを実行します。--permission
で名前空間(dev)のユーザーに対して必要な権限を追加します。
$ aws quicksight create-analysis --aws-account-id <AWSアカウントID> --analysis-id <任意の分析ID> --name <任意の分析名> \ --source-entity '{ "SourceTemplate": { "Arn": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:template/<テンプレートID>", "DataSetReferences": [ { "DataSetPlaceholder": "<プレースホルダ名>", "DataSetArn": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:dataset/d14e7ecc-432c-414e-93c9-8e594deab544" } ] } }' \ --permissions '[ { "Principal": "arn:aws:quicksight:ap-northeast-1:<AWSアカウントID>:user/dev/quicksight-dev-user", "Actions": [ "quicksight:RestoreAnalysis", "quicksight:UpdateAnalysisPermissions", "quicksight:DeleteAnalysis", "quicksight:DescribeAnalysisPermissions", "quicksight:QueryAnalysis", "quicksight:DescribeAnalysis", "quicksight:UpdateAnalysis" ] } ]'
名前空間にログインして確認
きちんとテンプレートが適用されているか、名前空間にログインして確認してみましょう。AWSマネジメントコンソールにAWSアカウントID・作成したIAMユーザー名・パスワードを入力してログインします。
分析を確認してみると、きちんとテンプレートを適用された状態で作成されていました。ただし、テンプレートに適用したデータセットが元のデータセットと異なる部分が多いと、以下のように一部表示されないビジュアルもありました。
もし分析が表示されていない場合、分析に権限が正しく適用されていない可能性があります。その場合は、以下のエントリを参考に権限をアップデートしてみてください。
最後に
名前空間でマルチテナントを実現している際、多く使われるだろうテンプレートの配布についてご紹介しました。テンプレートを使用する際は、もとのデータセットと違いが無いように気を付けて利用する必要があります。