Giter Site home page Giter Site logo

multi-tenant-quicksight-with-aws-app-runner-cdk-sample's Introduction

Multi-tenant QuickSight with AWS App Runner CDK Sample

capture

Requirements

Node.js のインストール後、リポジトリのルートディレクトリで npm ci を実行して AWS CDK をインストールしてください。

埋め込みダッシュボードのフロー図

Flow

権限範囲

Architecture

1. QuickSight の利用開始

QuickSight の Enterprise Edition を開始し、データソースの接続に必要なアクセス権限を付与します。

2. 分析テンプレートの作成

QuickSight の Datasets から New dataset を選び、必要な情報を入力して Analysis の作成まで進みます。Analysis の作成完了後、以下のコマンドを実行して Analysis Template を作成します。

aws quicksight create-template \
  --aws-account-id "000000000000" \
  --template-id "sample-template" \
  --source-entity '{ "SourceAnalysis": { "Arn": "arn:aws:quicksight:us-west-1:000000000000:analysis/52fa5c2b-278b-46e0-911a-3ac65312e565", "DataSetReferences": [ { "DataSetPlaceholder": "sample-dataset", "DataSetArn": "arn:aws:quicksight:us-west-1:000000000000:dataset/c16e1126-95a0-4c38-9c76-2d3fb439d6d8" } ] } }'

このコマンドでは下記変数を元にテンプレートを作成しています。適宜内容を変更してください。AnalysisIdDatasetId は上述の手順で作成した Dataset 及び Analysis の ID を指定します。

項目
AwsAccountId 000000000000
Region us-west-1
TemplateId sample-template
AnalysisId 52fa5c2b-278b-46e0-911a-3ac65312e565
DataSetPlaceholder sample-dataset
DatasetId c16e1126-95a0-4c38-9c76-2d3fb439d6d8

3. 各テナント向けデータセット作成コードの修正

利用するデータソース、およびデータセットの作成方法に応じて、 docker/controller/namespace.tscreateDataSet 部分のコードを修正します。このサンプルでは、CustomSql を用いて Amazon Athena に接続し、WHERE 句でテナントを区別してデータを制限しています。必要に応じて適宜コードを変更してください。

  const createDataSet = await quicksight
    .createDataSet({
      AwsAccountId: AWS_ACCOUNT_ID,
      DataSetId: namespaceId,
      ImportMode: 'DIRECT_QUERY',
      Name: namespaceId,
      PhysicalTableMap: {
        [physicalTableMapId]: {
          CustomSql: {
            DataSourceArn: `arn:aws:quicksight:${AWS_REGION}:${AWS_ACCOUNT_ID}:datasource/${DATASOURCE_ID}`,
            Name: 'CustomQuery',
            SqlQuery: `select * from ${DATABASE_NAME}.${TABLE_NAME} where ${FILTER_COLUMN_NAME} = '${namespaceFilterId}'`
          }
        }
      },
      LogicalTableMap: {
        [logicalTableMap]: {
          Alias: 'CustomQuery',
          Source: {
            PhysicalTableId: physicalTableMapId
          }
        }
      },
      ...

4. スタックのデプロイ

cdk.json を編集し、以下の情報を埋めます。

項目
allowIpRange マルチテナントダッシュボードのデモサイトを閲覧できる IP の許可レンジ 0.0.0.0/0
dummyEmail このサンプルでは QuickSight の閲覧者に QuickSight からメールが送信されることを防ぐためにダミーのアドレスを入力します
quicksightAdminUserName すべてのテナントのダッシュボードを操作可能な QuickSight の管理アカウント admin
templateId 上記手順で作成した Analysis Template の ID sample-template
templateDatasetPlaceholder 上記手順で作成したの Dataset Placeholder sample-dataset
datasourceId 各テナントのダッシュボードが参照するデータソースの ID fec40e29-c9c7-470f-ad91-322113068792
databaseName 各テナントのデータセット作成に必要な要素(このサンプルでは Athena のカタログ名) database
tableName 各テナントのデータセット作成に必要な要素(このサンプルでは Athena のテーブル名) table
filterColumnName 各テナントのデータセット作成時にテナントを区別するために用いるカラム名 tenant

指定したデータソースの設定に必要な要素である databaseName tableName filterColumnName は、3. のコードに合わせて適宜変更してください。完了後、以下のコマンドでスタックをデプロイします。

npx cdk deploy AppRunnerStack

5. UI に接続

QuickSight から埋め込みの許可設定を行います。AWS Console から QuickSight に接続して、 Manage QuickSight から Domains and Embedding を選びます。表示されるフォームに AppRunnerStack をデプロイした後表示される URL を入力し、追加してください。

Outputs:
AppRunnerStack.AppRunnerStackapprunneruri = https://example.region.awsapprunner.com

完了後、ブラウザから追加した URL アクセスします。

UI では認証を省き、テナントの追加・削除、およびテナントに所属するユーザーの追加・削除の操作が自由に行えます。プロダクション環境では任意の認証機能を組み込み、接続しているテナントに応じて自動的にダッシュボードを出し分けてください。

Security

See CONTRIBUTING for more information.

License

This library is licensed under the MIT-0 License. See the LICENSE file.

multi-tenant-quicksight-with-aws-app-runner-cdk-sample's People

Contributors

ajido avatar amazon-auto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.