Amazon Web Services ブログ

Amazon QuickSight の新しい API とテーマ機能で、分析をさらに進化させる

Amazon QuickSight チームからのお知らせです。テーマとさらなる API が利用可能になりました。 ダッシュボードのテーマを使用して、Amazon QuickSight ダッシュボードのルックアンドフィールをアプリケーションのブランドや企業のテーマに合わせることができるようになりました。追加された新しい API では、ダッシュボード、データセット、データソース、SPICE 取り込み、さらに AWS リソースに対するきめ細かいアクセスコントロールをサポートしており、Amazon QuickSight のデプロイをプログラムで管理できます。これらを組み合わせることで、Amazon QuickSight を視聴者に合わせて創造的に調整し使用することで、ユーザーはビルトインの分析を体験したり、企業のビジネスインテリジェンス (BI) のニーズに対応したりできます。この投稿では、これらの新しい機能の概要と、使用開始に関する詳細をご紹介します。

ダッシュボードのテーマを決める

Amazon QuickSight テーマで、ダッシュボードのルックアンドフィールをコントロールできます。具体的には、テーマを通じて次の項目に影響するため、アカウント内の他の作成者と共有できます。

  • マージン
  • ビジュアル周りの境界線
  • とじしろ (ビジュアル間の間隔)
  • データの色 (ビジュアル内で使用)
  • 背景色 (ダッシュボード内のビジュアルおよびダッシュボード自体用)
  • 前景色 (ビジュアル内およびダッシュボード上のテキスト用)
  • ビジュアルの色を強調する

次のダッシュボードのスクリーンショットは、現在利用可能なテーマオプションを使用して変更できるダッシュボードの特徴を説明しています。

使用可能なオプションで、QuickSight の新しいテーマ「Seaside」を使用すると下記のように示され、QuickSight ダッシュボードをより狭く (余白や余白をなしにするなど) できます。

以下に示すように、QuickSight の新しいテーマ「Midnight」を使用した暗めのダッシュボードオプションもあります。

テーマには、ダッシュボード作成インターフェイスの左側のパネルからアクセスできます。

1 つのビルトインテーマから始めてそれをカスタマイズし、独自のテーマを作成できます。インタラクティブにテーマ編集できるため、必要なだけ編集したり、ダッシュボードに最適なテーマを取得したりが簡単になります。

ダッシュボード、データセット、データソース、SPICE 取り込み、アクセス許可に API を使用する

新しい API には、ダッシュボード、データセット、データソース、SPICE 取り込み、および S3/Athena へのきめ細かいアクセスコントロールが含まれています。今回のリリースでは、QuickSight にテンプレートを導入しました。テンプレートを使用すると、ダッシュボードに関連付けられたビジュアル設定とデータスキーマを保存し、アカウント内またはアカウント間で異なるユーザーセットや異なるデータ用にダッシュボードを簡単にレプリケートできます。

新しいテンプレート API を使って、QuickSight 分析からテンプレートを作成できます。他にも、ダッシュボード API を使用して、同じまたは異なるアカウントのテンプレートからダッシュボードを作成し、バージョン管理ダッシュボードを作成し、必要に応じて異なるデータセットに接続できます。データセット API を使用すると、データセットレベルでフィルターを適用したカスタムデータセット (特定の顧客のデータのみ、など) を作成できます。データセット API を使用して、SPICE と直接クエリのデータセットの両方を作成できます。SPICE API を使ってプログラムでデータセットを更新し、SPICE 取り込みステータスと履歴を表示できます。データソース API は、プログラムでデータソース接続を定義します。最後に、きめ細かいアクセス許可 API により、Amazon S3Amazon Athena、その他の AWS リソースのデータへのアクセスを保護できます。

Amazon QuickSight のビルトイン機能を使用する開発者、または Amazon QuickSight を使ってさまざまなサブジェクトエリアにダッシュボードを発行する作成者が新しい API を使用すると、ワークフローを自動化し、ダッシュボードの同一バージョンをさまざまなチームや顧客にロールアウトするなどの反復的なアクティビティを実行できます。QuickSight アセットは、開発者から QA、API を介して本番に移行できるようになり、各環境に手動でアクセスする必要がなくなりました。バージョン管理を使用すると、以前のダッシュボードもバックアップされるため、必要に応じてダッシュボードのデプロイをロールバックできます。

Amazon QuickSight 管理者は新しい API を使って、アカウント全体のダッシュボード、データソース、データセットへのアクセスを監査および管理できます。ダッシュボードとデータセットを個々の作成者アカウントに事前に入力し、簡単かつ迅速にオンボーディングすることも可能です。個々の認証情報をデータソースに配布する必要がなくなり、すべてのユーザーと共有する集中管理されたデータソースをプロビジョニングできます。加えて、きめ細かなアクセスコントロール API を介した IAM ポリシーを使用して、S3、Athena、その他の AWS リソースへの個々の作成者アクセスをすぐに管理できます。Amazon QuickSight で API の可能性が数多く開きます。このブログ投稿ではいくつかのシナリオを取り上げ、追加の投稿でさらに多くを網羅しフォローアップします。

Amazon QuickSight API は、AWS Software Development Kit (SDK) または AWS Command Line Interface (CLI) から呼び出すことができます。AWS CLI を使用して、説明しましょう。各 API に必要なすべての詳細をキャプチャするため、この投稿では、AWS CLI で使用可能な generate-cli-skeleton オプションを使って、Redshift データソースの作成、データセットの作成、それに関連付けられたダッシュボードの例を順を追って説明します。このオプションを呼び出すと、必要な API の詳細をすべて含むスケルトンファイルができます。これを正しい入力に編集すると、API 呼び出しに使用できます。以下のコードは generate-cli-skeleton オプションを呼び出して、詳細を create-data-source-cli-input.json ファイルに書き込みます。次に、このファイルを変更し、それを呼び出すときに create-data-source API への入力として使用します。

aws quicksight create-data-source --generate-cli-skeleton > create-data-source-cli-input.json

会社の新入社員である Alice が、Redshif tの顧客収益データから Amazon QuickSight ダッシュボードを作成するとしましょう。Alice 用に設定するには、新しい API で Redshift に接続し、QuickSight ユーザーアカウント内に QuickSight データセットを作成します。

データソースの作成

Redshift データベースに接続するには、QuickSight でデータソースを作成する必要があります。まず、データソース接続の詳細、認証情報、データソースを表示できるユーザーに関するアクセス許可が含まれた次の設定を使って説明します。

cat create-data-source-cli-input.json

{
    "AwsAccountId": "xxxxxxxxxxxx",
    "DataSourceId": "SampleRedshiftDatasouce",
    "Name": "Sample Redshift Datasouce",
    "Type": "REDSHIFT",
    "DataSourceParameters": {
        "RedshiftParameters": {
            "Host": "redshift-cluster-1.xxxxxxxxxx.us-east-1.redshift.amazonaws.com",
            "Port": 5439,
            "Database": "dev",
            "ClusterId": "redshift-cluster-1"
        }
    },
    "Credentials": {
        "CredentialPair": {
            "Username": "xxxxxxxxx",
            "Password": "xxxxxxxxxxx"
        }
    },
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:user/default/alice",
            "Actions": [
                "quicksight:UpdateDataSourcePermissions",
                "quicksight:DescribeDataSource",
                "quicksight:DescribeDataSourcePermissions",
                "quicksight:PassDataSource",
                "quicksight:UpdateDataSource",
                "quicksight:DeleteDataSource"
                
            ]
        }
    ],
    "VpcConnectionProperties": {
        "VpcConnectionArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:vpcConnection/VPC to Redshift"
    },
    "Tags": [
        {
            "Key": "Name",
            "Value": "API-RedShiftDemoDataSource"
        }
    ]
}

次に、この入力で create-data-source API を呼び出すと、以下に示すようにデータソースの作成を開始できます。

aws quicksight create-data-source --cli-input-json file://./create-data-source-cli-input.json

{
    "Status": 202,
    "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:datasource/SampleRedshiftDatasouce",
    "DataSourceId": "SampleRedshiftDatasouce",
    "CreationStatus": "CREATION_IN_PROGRESS",
    "RequestId": "ac9fb8fe-71d8-4005-a7c9-d66d814e224e"
}

以下に示すように describe-data-source API を呼び出し、応答のステータスを確認することで、データソースが正常に作成されたことを検証できます。

aws quicksight describe-data-source --aws-account-id $AAI --data-source-id SampleRedshiftDatasouce

{
    "Status": 200,
    "DataSource": {
        "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:datasource/SampleRedshiftDatasouce",
        "DataSourceId": "SampleRedshiftDatasouce",
        "Name": "Sample Redshift Datasouce",
        "Type": "REDSHIFT",
        "Status": "CREATION_SUCCESSFUL",
        "CreatedTime": 1574053515.41,
        "LastUpdatedTime": 1574053516.368,
        "DataSourceParameters": {
            "RedshiftParameters": {
                "Host": "redshift-cluster-1.c6qmmwnqxxxx.us-east-1.redshift.amazonaws.com",
                "Port": 5439,
                "Database": "dev",
                "ClusterId": "redshift-cluster-1"
            }
        },
        "VpcConnectionProperties": {
            "VpcConnectionArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:vpcConnection/VPC to Redshift"
        },
        "SslProperties": {
            "DisableSsl": false
        }
    },
    "RequestId": "57d2d6d6-ebbf-4e8c-82ab-c38935cae8aa"
}

create-data-source の呼び出しの一部として Alice にアクセス許可を付与したため、Alice が QuickSight にログインすると、このデータソースが表示されます。ユーザーのアクセス許可を付与しなかった場合、このデータソースは適切なアクセス許可を持つプログラムユーザーのみに表示されます。

データセットの作成

Alice がダッシュボードを構築する前に、使用するデータソース内の特定のデータを識別するデータセットを作成する必要があります。このデータソースからデータセットを作成するには、create-data-set API を呼び出します。create-data-set API で 2 つのテーブルを結合して、Alice 用データの目的の表示を作成できます。以下では、PhysicalTableMap が結合する Redshift データソース内のテーブルをポイントし、LogicalTableMap がこれらの間の結合を定義します。

結合が含まれるサンプルデータセット定義を、以下に示します。

{
    "AwsAccountId": "xxxxxxxxxxxx",
    "DataSetId": "DemoDataSet1",
    "Name": "Demo Data Set 1",
    "PhysicalTableMap": {
        "DemoDataSet1-LineOrder": {
            "RelationalTable": {
                "DataSourceArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:datasource/SampleRedshiftDatasouce",
                "Schema": "public",
                "Name": "lineorder",
                "InputColumns": [
                        {
                            "Name": "lo_custkey",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "lo_revenue",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "lo_quantity",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "lo_orderkey",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "lo_shipmode",
                            "Type": "STRING"
                        },
                        {
                            "Name": "lo_orderdate",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "lo_ordertotalprice",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "lo_tax",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "lo_discount",
                            "Type": "INTEGER"
                        }
                ]
	    }
            },
        "DemoDataSet1-Customer": {
            "RelationalTable": {
                "DataSourceArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:datasource/SampleRedshiftDatasouce",
                "Schema": "public",
                "Name": "customer",
                "InputColumns": [
                        {
                            "Name": "c_custkey",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "c_phone",
                            "Type": "STRING"
                        },
                        {
                            "Name": "c_address",
                            "Type": "STRING"
                        },
                        {
                            "Name": "c_name",
                            "Type": "STRING"
                        },
                        {
                            "Name": "c_city",
                            "Type": "STRING"
                        }
                ]
            }
        }
    },
    "LogicalTableMap": {
        "DemoDataSet1-LineOrder-Logical": {
            "Alias": "LineOrder",
            "Source": {
                "PhysicalTableId": "DemoDataSet1-LineOrder"
            }
        },
        "DemoDataSet1-Customer-Logical": { 
            "Alias": "Customer",
            "Source": {
                "PhysicalTableId": "DemoDataSet1-Customer"
            }
        },
        "DemoDataSet1-Intermediate": { 
            "Alias": "Intermediate",
            "DataTransforms": [
                {   
                    "ProjectOperation": {
                        "ProjectedColumns": [
                                "lo_revenue",
                                "c_name",
                                "c_city"
                        ]
                    }
                }
            ],
            "Source": {
                "JoinInstruction": {
                    "LeftOperand": "DemoDataSet1-LineOrder-Logical",
                    "RightOperand": "DemoDataSet1-Customer-Logical",
                    "Type": "INNER",
                    "OnClause": "{lo_custkey} = {c_custkey}"
                }
            }
        }

    },
    "ImportMode": "DIRECT_QUERY",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:user/default/alice",
            "Actions": [
                "quicksight:UpdateDataSetPermissions",
                "quicksight:DescribeDataSet",
                "quicksight:DescribeDataSetPermissions",
                "quicksight:PassDataSet",
                "quicksight:DescribeIngestion",
                "quicksight:ListIngestions",
                "quicksight:UpdateDataSet",
                "quicksight:DeleteDataSet",
                "quicksight:CreateIngestion",
                "quicksight:CancelIngestion"
            ]
        }
    ],
    "Tags": [
        {
            "Key": "Name",
            "Value": "API-DemoDataSet1"
        }
    ]
}

すべての列を指定するのではなく、SQL ステートメントを使用して同様のデータセットを作成する場合は、create-data-set APIを呼び出します。これには以下に示すように、PhysicalTableMap で SQL ステートメントを指定します。

aws quicksight create-data-set --generate-cli-skeleton >create-data-set-cli-input-sql.json

{
    "AwsAccountId": "xxxxxxxxxxxx",
    "DataSetId": "DemoDataSet2",
    "Name": "Demo Data Set 2",
    "PhysicalTableMap": {
        "DemoDataSet2-CustomerSales": {
            "CustomSql": {
                "DataSourceArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:datasource/SampleRedshiftDatasouce",
                "Name": "Customer Sales",
                "SqlQuery":"SELECT lineorder.lo_revenue, customer.c_name, customer.c_city FROM public.lineorder INNER JOIN public.customer ON lineorder.lo_custkey = customer.c_custkey",
                    "Columns": [
                        {
                            "Name": "lo_revenue",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "c_name",
                            "Type": "STRING"
                        },
                        {
                            "Name": "c_city",
                            "Type": "STRING"
                        }
                    ]
 
	    }
        }
    },
    "LogicalTableMap": {
        "DemoDataSet2-CustomerSales-Logical": {
            "Alias": "Customer Sales",
            "Source": {
                "PhysicalTableId": "DemoDataSet2-CustomerSales"
            }
        }

    },
    "ImportMode": "DIRECT_QUERY",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:user/default/alice",
            "Actions": [
                "quicksight:UpdateDataSetPermissions",
                "quicksight:DescribeDataSet",
                "quicksight:DescribeDataSetPermissions",
                "quicksight:PassDataSet",
                "quicksight:DescribeIngestion",
                "quicksight:ListIngestions",
                "quicksight:UpdateDataSet",
                "quicksight:DeleteDataSet",
                "quicksight:CreateIngestion",
                "quicksight:CancelIngestion"
            ]
        }
    ],
    "Tags": [
        {
            "Key": "Name",
            "Value": "API-DemoDataSet2"
        }
    ]
}

Alice にアクセス許可を付与したため、これらのデータセットは、彼女が QuickSight にログインしたとき、[Your Data Sets] の下に表示されます。

このデータセットは、Amazon QuickSight の他のデータセットと同じように使用できます。Alice は、以下に示すように、QuickSight UI にログインして、このデータセットを利用する分析を作成できます。

テンプレートの作成

Alice が作成したダッシュボードがチーム内で評判が良ければ、次は、同じ表示を会社内の他の 100 チームに提供し、チームごとに異なるデータセットを使用します。API がなければ、これを行うのは簡単ではありません。しかし API を使用することで、Alice の分析からテンプレートを定義し、必要に応じてダッシュボードを作成できるようになりました。使用されているすべてのデータセットの参照を作成する QuickSight のソース分析をポイントして、テンプレートを作成します。このため、テンプレートの使用時に新しいデータセットを参照できます。

次の設定では、Alice の分析から作成したテンプレートについて説明しています。

{
    "AwsAccountId": "xxxxxxxxxxxx",
    "TemplateId": "DemoDashboardTemplate",
    "Name": "Demo Dashboard Template",
    "SourceEntity": {
        "SourceAnalysis": {
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:analysis/7975f7aa-261c-4e7c-b430-305d71e07a8e",
            "DataSetReferences": [
                {
                    "DataSetPlaceholder": "DS1",
                    "DataSetArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet1"
                }
            ]
        }
    },
    "VersionDescription": "1"
}

テンプレートは QuickSight UI 内には表示されず、開発者/管理者が管理するアセットであり、現時点では API を介してのみアクセス可能です。テンプレート設定を保存するには、create-template API を呼び出してテンプレートの作成を開始します。

aws quicksight create-template --cli-input-json file://./create-template-cli-input.json

{
    "Status": 202,
    "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:template/DemoDashboardTemplate",
    "VersionArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:template/DemoDashboardTemplate/version/1",
    "TemplateId": "DemoDashboardTemplate",
    "CreationStatus": "CREATION_IN_PROGRESS",
    "RequestId": "aa189aee-8ab5-4358-9bba-8f4e32450aef"
}

テンプレートが作成されたことを確認するには、次のように describe-template API を呼び出します。

aws quicksight describe-template --aws-account-id $AAI --template-id DemoDashboardTemplate

{
    "Status": 200,
    "Template": {
        "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:template/DemoDashboardTemplate",
        "Name": "Demo Dashboard Template",
        "Version": {
            "CreatedTime": 1574137165.136,
            "VersionNumber": 1,
            "Status": "CREATION_SUCCESSFUL",
            "DataSetConfigurations": [
                {
                    "Placeholder": "DS1",
                    "DataSetSchema": {
                        "ColumnSchemaList": [
                            {
                                "Name": "c_city",
                                "DataType": "STRING"
                            },
                            {
                                "Name": "lo_revenue",
                                "DataType": "INTEGER"
                            }
                        ]
                    },
                    "ColumnGroupSchemaList": []
                }
            ],
            "Description": "1",
            "SourceEntityArn": "arn:aws:quicksight:us-east-1: xxxxxxxxxxxx:analysis/7975f7aa-261c-4e7c-b430-305d71e07a8e"
        },
        "TemplateId": "DemoDashboardTemplate",
        "LastUpdatedTime": 1574137165.104,
        "CreatedTime": 1574137165.104
    }
}

ダッシュボードの作成

次に、このテンプレートを使用して、以前に作成した 2 つ目の類似のデータセットに接続するダッシュボードを作成します。create-dashboard API を呼び出すとき、create-dashboard-cli-input.json に使用する設定に示されているように、SourceEntity (今回は作成したテンプレート)、アクセス許可、ダッシュボード公開オプションを定義します。

create-dashboard-cli-input.json

{
    "AwsAccountId": "xxxxxxxxxxxx",
    "DashboardId": "DemoDashboard1",
    "Name": "Demo Dashboard 1",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:user/default/alice",
            "Actions": [
                "quicksight:DescribeDashboard",
                "quicksight:ListDashboardVersions",
                "quicksight:UpdateDashboardPermissions",
                "quicksight:QueryDashboard",
                "quicksight:UpdateDashboard",
                "quicksight:DeleteDashboard",
                "quicksight:DescribeDashboardPermissions",
                "quicksight:UpdateDashboardPublishedVersion"
            ]
        }
    ],
    "SourceEntity": {
        "SourceTemplate": {
            "DataSetReferences": [
                {
                    "DataSetPlaceholder": "DS1",
                    "DataSetArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet2"
                }
            ],
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:template/DemoDashboardTemplate"
        }
    },
    "Tags": [
        {
            "Key": "Name",
            "Value": "API-DemoDashboard"
        }
    ],
    "VersionDescription": "1",
    "DashboardPublishOptions": {
        "AdHocFilteringOption": {
            "AvailabilityStatus": "ENABLED"
        },
        "ExportToCSVOption": {
            "AvailabilityStatus": "ENABLED"
        },
        "SheetControlsOption": {
            "VisibilityState": "EXPANDED"
        }
    }
}

describe-dashboard APIを使って、ダッシュボードが正しく作成されたことを確認できます。次のコードをご覧ください。

aws quicksight describe-dashboard --aws-account-id $AAI --dashboard-id DemoDashboard1

{
    "Status": 200,
    "Dashboard": {
        "DashboardId": "DemoDashboard1",
        "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dashboard/DemoDashboard1",
        "Name": "Demo Dashboard 1",
        "Version": {
            "CreatedTime": 1574138252.449,
            "Errors": [],
            "VersionNumber": 1,
            "Status": "CREATION_SUCCESSFUL",
            "SourceEntityArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:template/DemoDashboardTemplate/version/1",
            "Description": "1"
        },
        "CreatedTime": 1574138252.395,
        "LastPublishedTime": 1574138252.395,
        "LastUpdatedTime": 1574138252.449
    },
    "RequestId": "62945539-bb63-4faf-b897-8e84ea5644ae"
}

ダッシュボード作成中に Alice にアクセス許可を付与したため、このダッシュボードは、以下に示すように、QuickSight にログインしたとき、[All dashboards] の下で表示されます。

SPICE データセットの設定        

Alice のデータセットは直接クエリデータセットで、ピーク時には Redshift クラスターの負荷が高くなる可能性があります。このため、Alice とユーザーはダッシュボードが読み込まれるのを長時間待つことがあります。Amazon QuickSight のインメモリデータストアである SPICE を使用すると、データベースからユーザートラフィックをオフロードできるだけでなく、エンドユーザーの高い同時実行制限と高速で応答性の高いパフォーマンスも実現が可能です。次の設定は、2 つ目のデータセットを再定義し、以下でハイライトされているように ImportMode を SPICE に設定します。

{
    "AwsAccountId": "xxxxxxxxxxxx",
    "DataSetId": "DemoDataSet3",
    "Name": "Demo Data Set 3",
    "PhysicalTableMap": {
        "DemoDataSet2-CustomerSales": {
            "CustomSql": {
                "DataSourceArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:datasource/SampleRedshiftDatasouce",
                "Name": "Customer Sales",
                "SqlQuery":"SELECT lineorder.lo_revenue, customer.c_name, customer.c_city FROM public.lineorder INNER JOIN public.customer ON lineorder.lo_custkey = customer.c_custkey",
                    "Columns": [
                        {
                            "Name": "lo_revenue",
                            "Type": "INTEGER"
                        },
                        {
                            "Name": "c_name",
                            "Type": "STRING"
                        },
                        {
                            "Name": "c_city",
                            "Type": "STRING"
                        }
                    ]
 
	    }
        }
    },
    "LogicalTableMap": {
        "DemoDataSet2-CustomerSales-Logical": {
            "Alias": "Customer Sales",
            "Source": {
                "PhysicalTableId": "DemoDataSet2-CustomerSales"
            }
        }

    },
    "ImportMode": "SPICE",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:user/default/alice",
            "Actions": [
                "quicksight:UpdateDataSetPermissions",
                "quicksight:DescribeDataSet",
                "quicksight:DescribeDataSetPermissions",
                "quicksight:PassDataSet",
                "quicksight:DescribeIngestion",
                "quicksight:ListIngestions",
                "quicksight:UpdateDataSet",
                "quicksight:DeleteDataSet",
                "quicksight:CreateIngestion",
                "quicksight:CancelIngestion"
            ]
        }
    ],
    "Tags": [
        {
            "Key": "Name",
            "Value": "API-DemoDataSet2"
        }
    ]
}

その設定で create-data-set APIを呼び出し、SPICE モードでデータセットを作成できます。

aws quicksight create-data-set --aws-account-id $AAI --cli-input-json file://./create-data-set-cli-input-sql-spice.json

{
    "Status": 201,
    "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet3",
    "DataSetId": "DemoDataSet3",
    "IngestionArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet3/ingestion/589eaf9d-0e21-4572-9ebe-f61b129886d9",
    "IngestionId": "589eaf9d-0e21-4572-9ebe-f61b129886d9",
    "RequestId": "7a442521-ab8f-448f-8668-1f0d6823f987"
}

SPICE モードでデータセットを作成すると、SPICE 容量を消費します。describe-data-set API は、消費される SPICE 容量の詳細を示します。以下のコードスニペットでハイライトのある describe-data-set 応答の関連ビットをご参照ください。

aws quicksight describe-data-set --aws-account-id $AAI --data-set-id DemoDataSet3|tail -5

        "ImportMode": "SPICE",
        "ConsumedSpiceCapacityInBytes": 107027200
    },
    "RequestId": "b0175568-94ed-40e4-85cc-b382979ca377"
}

SPICE データセットの場合、API では、取り込みを設定するオプション、または過去の取り込みを一覧表示するオプションもあります。過去の取り込みを一覧表示することで、取り込みステータスと、データセット内のデータが最後に更新された日時を特定できます。過去の取り込みを一覧表示するには、データセットのリスト取り込み API を呼び出します。

aws quicksight list-ingestions --aws-account-id $AAI --data-set-id DemoDataSet3

{
    "Status": 200,
    "Ingestions": [
        {
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet3/ingestion/589eaf9d-0e21-4572-9ebe-f61b129886d9",
            "IngestionId": "589eaf9d-0e21-4572-9ebe-f61b129886d9",
            "IngestionStatus": "COMPLETED",
            "ErrorInfo": {},
            "RowInfo": {
                "RowsIngested": 1126608,
                "RowsDropped": 0
            },
            "CreatedTime": 1574138852.564,
            "IngestionTimeInSeconds": 24,
            "IngestionSizeInBytes": 107027200,
            "RequestSource": "MANUAL",
            "RequestType": "INITIAL_INGESTION"
        }
    ],
    "RequestId": "ee1d9a6f-a290-418a-a526-8906f4689776"
}

取り込みを設定して、データソースのデータセットのデータを更新します。Redshift クラスターに新しいデータがある可能性があるため、データセットに create-ingestion APIを使用して SPICE 更新をトリガーします。

aws quicksight create-ingestion --aws-account-id $AAI --data-set-id DemoDataSet3 --ingestion-id DemoDataSet3-Ingestion2

{
    "Status": 201,
    "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet3/ingestion/DemoDataSet3-Ingestion2",
    "IngestionId": "DemoDataSet3-Ingestion2",
    "IngestionStatus": "INITIALIZED",
    "RequestId": "fc1f7eea-1327-41d6-9af7-c12f097ed343"
}

取り込み履歴を一覧表示すると、ステート RUNNING の新しい取り込みが再び表示されます。次のコードをご覧ください。

aws quicksight list-ingestions --aws-account-id $AAI --data-set-id DemoDataSet3

{
    "Status": 200,
    "Ingestions": [
        {
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet3/ingestion/DemoDataSet3-Ingestion2",
            "IngestionId": "DemoDataSet3-Ingestion2",
            "IngestionStatus": "RUNNING",
            "RowInfo": {
                "RowsIngested": 0
            },
            "CreatedTime": 1574139332.876,
            "RequestSource": "MANUAL",
            "RequestType": "FULL_REFRESH"
        },
        {
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet3/ingestion/589eaf9d-0e21-4572-9ebe-f61b129886d9",
            "IngestionId": "589eaf9d-0e21-4572-9ebe-f61b129886d9",
            "IngestionStatus": "COMPLETED",
            "ErrorInfo": {},
            "RowInfo": {
                "RowsIngested": 1126608,
                "RowsDropped": 0
            },
            "CreatedTime": 1574138852.564,
            "IngestionTimeInSeconds": 24,
            "IngestionSizeInBytes": 107027200,
            "RequestSource": "MANUAL",
            "RequestType": "INITIAL_INGESTION"
        }
    ],
    "RequestId": "322c165e-fb90-45bf-8fa5-246d3034a08e"
}

バージョン管理とエイリアシング

お気づきかもしれませんが、テンプレートとダッシュボード API はバージョン管理をサポートしています。テンプレートまたはダッシュボードを作成すると、そのエンティティのバージョン 1 が作成され、テンプレートまたはダッシュボードを更新するたびに、そのエンティティの新しいバージョンにバージョン番号が追加されます。バージョン管理は、古いバージョンのダッシュボードをもう一度公開する場合、あるいは既知のバージョンのテンプレートを使用してビルドしていることを確認する場合に役立ちます。たとえば、ダッシュボードを複数回公開したが、最初のバージョンをもう一度公開したい場合、次のように update-dashboard-published-version API を呼び出すことができます。

aws quicksight update-dashboard-published-version --aws-account-id $AAI --dashboard-id DemoDashboard1 --dashboard-version-number 1

{
   "DashboardArn": "arn:aws:quicksight:us-east-
1:xxxxxxxxxxxx:dashboard/DemoDashboard1",
   "DashboardId": "DemoDashboard1",
   "RequestId": "c97cdbff-d954-4f5b-a887-28659ad9cc9a"
}

エイリアス使用すると、バージョン管理がさらに強力となります。テンプレートまたはダッシュボードのエイリアスは、特定のテンプレートやダッシュボードのバージョンへのポインタです。エイリアスは、手動で更新する必要がある明示的なバージョン番号ではなく、リソースの論理バージョンをポイントする場合に役立ちます。この機能は、テンプレートに変更を加え、承認されたテンプレートバージョンのみを運用コードで使用する開発ワークフローに役立ちます。たとえば以下に示すように、承認済みの本番テンプレートの「PROD」テンプレートエイリアスを作成し、バージョン 1 をポイントするようにできます。

aws quicksight create-template-alias --aws-account-id $AAI --template-id DemoDashboardTemplate --template-version-number 1 --alias-name PROD

{
   "RequestId": "c112a48c-14da-439e-b4d8-538b60c1f188",
   "TemplateAlias": { 
      "AliasName": "PROD",
      "Arn": "arn:aws:quicksight:us-east-
1:xxxxxxxxxxxx:template/DemoDashboardTemplate/alias/PROD",
      "TemplateVersionNumber": 1
   }
}

このテンプレートからダッシュボードを作成するときに、SourceEntity を「PROD」テンプレートエイリアスとして指定して、承認済みの本番テンプレートバージョンからダッシュボードを常に公開できます。以下の create-dashboard API の呼び出しで、テンプレート ARN にテンプレートエイリアス名が含まれていることに注意してください。

aws quicksight create-dashboard --generate-cli-skeleton > create-dashboard-cli-input.json

{
    "AwsAccountId": "xxxxxxxxxxxx",
    "DashboardId": "DemoDashboard2",
    "Name": "Demo Dashboard 2",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:user/default/user/Alice",
            "Actions": [
                "quicksight:DescribeDashboard",
                "quicksight:ListDashboardVersions",
                "quicksight:UpdateDashboardPermissions",
                "quicksight:QueryDashboard",
                "quicksight:UpdateDashboard",
                "quicksight:DeleteDashboard",
                "quicksight:DescribeDashboardPermissions",
                "quicksight:UpdateDashboardPublishedVersion"
            ]
        }
    ],
    "SourceEntity": {
        "SourceTemplate": {
            "DataSetReferences": [
                {
                    "DataSetPlaceholder": "DS1",
                    "DataSetArn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:dataset/DemoDataSet2"
                }
            ],
            "Arn": "arn:aws:quicksight:us-east-1:xxxxxxxxxxxx:template/DemoDashboardTemplate/alias/PROD"
        }
    },
    "Tags": [
        {
            "Key": "Name",
            "Value": "API-DemoDashboard"
        }
    ],
    "VersionDescription": "1",
    "DashboardPublishOptions": {
        "AdHocFilteringOption": {
            "AvailabilityStatus": "ENABLED"
        },
        "ExportToCSVOption": {
            "AvailabilityStatus": "ENABLED"
        },
        "SheetControlsOption": {
            "VisibilityState": "EXPANDED"
        }
    }
}

テンプレートの新しいバージョンを作成する場合、上からダッシュボード作成コードを変更せずに、新しいテンプレートバージョンをポイントするように「PROD」テンプレートエイリアスを更新できます。たとえば、テンプレートバージョン 3 を承認済みの本番バージョンに設定する場合、以下のように update-template-alias API を呼び出すことが可能です。

aws quicksight update-template-alias --aws-account-id $AAI --template-id DemoDashboardTemplate --template-version-number 3 --alias-name PROD

{
   "RequestId": "5ac9ff9e-28c1-4b61-aeab-5949986f5b2b",
   "TemplateAlias": { 
      "AliasName": "PROD",
      "Arn": "arn:aws:quicksight:us-east-
1:xxxxxxxxxxxx:template/DemoDashboardTemplate/alias/PROD",
      "TemplateVersionNumber": 3
   }
}

大規模なデプロイでバージョン管理とエイリアスを使用する例について詳しく説明する予定ですので、今後のブログ投稿に注目しておいてください。

Amazon QuickSight のデータソース、データセット、ダッシュボード、および SPICE API は、標準エディションとエンタープライズエディションの両方で利用でき、エディション固有の機能サポートがあります。Amazon QuickSight エンタープライズエディションでは、きめ細かいアクセスコントロール API とダッシュボード API のテンプレートでサポートがご利用いただけます。Amazon QuickSight の API は AWS SDK の一部であり、さまざまなプログラミング言語で利用できます。詳細については、「APIリファレンス」と「AWS での構築ツール」をご参照ください。

まとめ

QuickSight の新しいテーマ、API、さらに追加のカスタマイズオプションの作成が目下進行中です。ですから、分析に関して次のステップにつながる創造的な方法は数多くあります。将来の API プレビューに参加して弊社とつながるには、埋め込んである早期アクセスプログラムにサインアップしてください。

 


本稿の執筆者について

Jose Kunnackal は Amazon QuickSight のプリンシパルプロダクトマネージャーです。