Node.js のインストール後、リポジトリのルートディレクトリで npm ci
を実行して AWS CDK をインストールしてください。
QuickSight の Enterprise Edition
を開始し、データソースの接続に必要なアクセス権限を付与します。
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" } ] } }'
このコマンドでは下記変数を元にテンプレートを作成しています。適宜内容を変更してください。AnalysisId
や DatasetId
は上述の手順で作成した 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 |
利用するデータソース、およびデータセットの作成方法に応じて、 docker/controller/namespace.ts
の createDataSet
部分のコードを修正します。このサンプルでは、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
}
}
},
...
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
QuickSight から埋め込みの許可設定を行います。AWS Console から QuickSight に接続して、
Manage QuickSight
から Domains and Embedding
を選びます。表示されるフォームに AppRunnerStack
をデプロイした後表示される URL を入力し、追加してください。
Outputs:
AppRunnerStack.AppRunnerStackapprunneruri = https://example.region.awsapprunner.com
完了後、ブラウザから追加した URL アクセスします。
UI では認証を省き、テナントの追加・削除、およびテナントに所属するユーザーの追加・削除の操作が自由に行えます。プロダクション環境では任意の認証機能を組み込み、接続しているテナントに応じて自動的にダッシュボードを出し分けてください。
See CONTRIBUTING for more information.
This library is licensed under the MIT-0 License. See the LICENSE file.