データソースはQuickSightがアクセスする外部データストアの設定です。QuickSightはS3やRedshiftやオンプレミスのRDBなど様々なデータストアに接続し可視化することができます。S3をデータソースにした場合は、マニフェストファイルでデータの場所を指定します。RDBなどのデータベースをデータソースにした場合は、テーブルや認証情報などの接続情報を指定します。それぞれのデータソースにアクセス許可の設定を行うことも可能です。
今回のハンズオンではS3に配置したファイルをデータソースとして扱います。
このセクションでは、ダッシュボードの元になるデータソースを作成します。
- Default Data Source
全てのデータが入ったデータソース > Patient-Info.csv
- NS1 Data Source
NS1向けのデータに絞ったデータソース > Patient-Info-NS1.csv
- NS2 Data Source
NS2向けのデータに絞ったデータソース > Patient-Info-NS2.csv
実際の運用では一つのデータ(RDBMSなど)に対してテナントごとのデータソースを定義することが可能です。
テナントごとに定義したデータソースをもとにダッシュボードを作成することでより確実なテナント間のデータ分離が実現できます。
- DataBase.table1
RDS/Redshift/Athenaなどのデータソーステーブル
- Default Data Source
select * from table
- NS1 Data Source
select * from table1 where company='NS1'
- NS2 Data Source
select * from table1 where company='NS2'
cat <<EOF > create-DS-def-data-source.json
{
"AwsAccountId": "$AWSACCOUNTID",
"DataSourceId": "Default-Data-Source",
"Name": "Default Data Source",
"Type": "S3",
"DataSourceParameters": {
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "qse$AWSACCOUNTID",
"Key": "S3-development-manifest.json"
}
}
},
"Permissions": [
{
"Principal": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:user/default/$IAMUSERNAME",
"Actions": [
"quicksight:UpdateDataSourcePermissions",
"quicksight:DescribeDataSource",
"quicksight:DescribeDataSourcePermissions",
"quicksight:PassDataSource",
"quicksight:UpdateDataSource",
"quicksight:DeleteDataSource"
]
}
]
}
EOF
cat <<EOF > create-DS-NS1-data-source.json
{
"AwsAccountId": "$AWSACCOUNTID",
"DataSourceId": "NS1-Data-Source",
"Name": "NS1 Data Source",
"Type": "S3",
"DataSourceParameters": {
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "qse$AWSACCOUNTID",
"Key": "S3-development-manifest-NS1.json"
}
}
},
"Permissions": [
{
"Principal": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:user/default/$IAMUSERNAME",
"Actions": [
"quicksight:UpdateDataSourcePermissions",
"quicksight:DescribeDataSource",
"quicksight:DescribeDataSourcePermissions",
"quicksight:PassDataSource",
"quicksight:UpdateDataSource",
"quicksight:DeleteDataSource"
]
}
]
}
EOF
cat <<EOF > create-DS-NS2-data-source.json
{
"AwsAccountId": "$AWSACCOUNTID",
"DataSourceId": "NS2-Data-Source",
"Name": "NS2 Data Source",
"Type": "S3",
"DataSourceParameters": {
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "qse$AWSACCOUNTID",
"Key": "S3-development-manifest-NS2.json"
}
}
},
"Permissions": [
{
"Principal": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:user/default/$IAMUSERNAME",
"Actions": [
"quicksight:UpdateDataSourcePermissions",
"quicksight:DescribeDataSource",
"quicksight:DescribeDataSourcePermissions",
"quicksight:PassDataSource",
"quicksight:UpdateDataSource",
"quicksight:DeleteDataSource"
]
}
]
}
EOF
S3上のファイルの場所を示すマニフェストファイルを作成します。
cat <<EOF > S3-development-manifest.json
{
"fileLocations": [
{
"URIs": [
"https://qse$AWSACCOUNTID.s3.amazonaws.com/Patient-Info.csv"
]
}
],
"globalUploadSettings": {
"textqualifier": "\""
}
}
EOF
cat <<EOF > S3-development-manifest-NS1.json
{
"fileLocations": [
{
"URIs": [
"https://qse$AWSACCOUNTID.s3.amazonaws.com/Patient-Info-NS1.csv"
]
}
],
"globalUploadSettings": {
"textqualifier": "\""
}
}
EOF
cat <<EOF > S3-development-manifest-NS2.json
{
"fileLocations": [
{
"URIs": [
"https://qse$AWSACCOUNTID.s3.amazonaws.com/Patient-Info-NS2.csv"
]
}
],
"globalUploadSettings": {
"textqualifier": "\""
}
}
EOF
マニフェストファイルをS3バケットにアップロードします。
aws s3 cp ./S3-development-manifest.json s3://qse$AWSACCOUNTID
aws s3 cp ./S3-development-manifest-NS1.json s3://qse$AWSACCOUNTID
aws s3 cp ./S3-development-manifest-NS2.json s3://qse$AWSACCOUNTID
データソース定義JSONを使用した以下のコマンドを実行し、データソースを作成します。
aws quicksight create-data-source --cli-input-json file://create-DS-def-data-source.json
aws quicksight create-data-source --cli-input-json file://create-DS-NS1-data-source.json
aws quicksight create-data-source --cli-input-json file://create-DS-NS2-data-source.json
以下のような出力があれば成功です。
aws quicksight create-data-source --cli-input-json file://create-DS-def-data-source.json
{
"Status": 202,
"Arn": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:datasource/Default-Data-Source",
"DataSourceId": "Default-Data-Source",
"CreationStatus": "CREATION_IN_PROGRESS",
"RequestId": "153e14d1-7c18-464a-98ae-a019613be71f"
}
aws quicksight create-data-source --cli-input-json file://create-DS-NS1-data-source.json
{
"Status": 202,
"Arn": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:datasource/NS1-Data-Source",
"DataSourceId": "NS1-Data-Source",
"CreationStatus": "CREATION_IN_PROGRESS",
"RequestId": "05c1c239-cbfb-4286-a9dc-7c5a4c236db7"
}
aws quicksight create-data-source --cli-input-json file://create-DS-NS2-data-source.json
{
"Status": 202,
"Arn": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:datasource/NS2-Data-Source",
"DataSourceId": "NS2-Data-Source",
"CreationStatus": "CREATION_IN_PROGRESS",
"RequestId": "5c17e66f-7eec-46d1-a075-07ceda3b3e7e"
}
QuickSightにデータソースが作られていることを確認します。QuickSightの画面から[データセット]->[新しいデータセット]をクリックします。
画面の最下部に作成した3つのデータソースが表示されています。
コマンドラインでもデータソースの詳細を確認できます。
aws quicksight list-data-sources --aws-account-id $AWSACCOUNTID
aws quicksight list-data-sources --aws-account-id $AWSACCOUNTID
{
"Status": 200,
"DataSources": [
{
"Arn": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:datasource/Default-Data-Source",
"DataSourceId": "Default-Data-Source",
"Name": "Default Data Source",
"Type": "S3",
"Status": "CREATION_SUCCESSFUL",
"CreatedTime": 1600099846.436,
"LastUpdatedTime": 1600099846.436,
"DataSourceParameters": {
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "qse$AWSACCOUNTID",
"Key": "S3-development-manifest.json"
}
}
}
},
{
"Arn": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:datasource/NS1-Data-Source",
"DataSourceId": "NS1-Data-Source",
"Name": "NS1 Data Source",
"Type": "S3",
"Status": "CREATION_SUCCESSFUL",
"CreatedTime": 1600099847.672,
"LastUpdatedTime": 1600099847.672,
"DataSourceParameters": {
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "qse$AWSACCOUNTID",
"Key": "S3-development-manifest-NS1.json"
}
}
}
},
{
"Arn": "arn:aws:quicksight:us-east-1:$AWSACCOUNTID:datasource/NS2-Data-Source",
"DataSourceId": "NS2-Data-Source",
"Name": "NS2 Data Source",
"Type": "S3",
"Status": "CREATION_SUCCESSFUL",
"CreatedTime": 1600099848.91,
"LastUpdatedTime": 1600099848.91,
"DataSourceParameters": {
"S3Parameters": {
"ManifestFileLocation": {
"Bucket": "qse$AWSACCOUNTID",
"Key": "S3-development-manifest-NS2.json"
}
}
}
}
],
"RequestId": "4f5227ad-55d2-48ee-a8f9-fce726387488"
}