データソースの作成

データソースとは

データソースはQuickSightがアクセスする外部データストアの設定です。QuickSightはS3やRedshiftやオンプレミスのRDBなど様々なデータストアに接続し可視化することができます。S3をデータソースにした場合は、マニフェストファイルでデータの場所を指定します。RDBなどのデータベースをデータソースにした場合は、テーブルや認証情報などの接続情報を指定します。それぞれのデータソースにアクセス許可の設定を行うことも可能です。

今回のハンズオンではS3に配置したファイルをデータソースとして扱います。

QuickSightセットアップイメージ

Alt text

データソース構成

このセクションでは、ダッシュボードの元になるデータソースを作成します。

ワークショップ構成

  • 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'

データソース定義JSON

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の画面から[データセット]->[新しいデータセット]をクリックします。

Alt text

画面の最下部に作成した3つのデータソースが表示されています。

Alt text

コマンドラインでの確認

コマンドラインでもデータソースの詳細を確認できます。

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"
}