Amazon QuickSightで異なる名前空間にテンプレートを配布する

2022.09.30

データアナリティクス事業本部インテグレーション部コンサルティングチーム・新納(にいの)です。

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コマンドで作成します。

ここでポイントとなるのは--permissionsPrincipalです。ここで名前空間のARNを以下のような形で指定することで該当の名前空間にテンプレートにアクセスする権限を与えます。。

  • arn:aws:quicksight:ap-northeast-1::namespace/dev

--source-entityでは、テンプレート作成のもととなる分析とデータセットのARNをそれぞれ指定します。GUI上からでは確認できないため、それぞれlist-analyseslist-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ユーザー名・パスワードを入力してログインします。

分析を確認してみると、きちんとテンプレートを適用された状態で作成されていました。ただし、テンプレートに適用したデータセットが元のデータセットと異なる部分が多いと、以下のように一部表示されないビジュアルもありました。

もし分析が表示されていない場合、分析に権限が正しく適用されていない可能性があります。その場合は、以下のエントリを参考に権限をアップデートしてみてください。

最後に

名前空間でマルチテナントを実現している際、多く使われるだろうテンプレートの配布についてご紹介しました。テンプレートを使用する際は、もとのデータセットと違いが無いように気を付けて利用する必要があります。