Amazon QuickSight でダッシュボード、分析、テンプレートをコード管理出来るようになりました #reInvent

2022.11.29

いわさです。

QuickSight でかなり大きなアップデートが来ました。

簡単に言うと、今回のアップデートで Create/Update 系の API でオブジェクト(ダッシュボード、分析、テンプレート)の定義情報を指定出来るようになりました。
つまり QuickSight でも IaC が出来るようになりました。

QuickSight の主要なオブジェクトとしてダッシュボード、分析、データセットがあります。
これまでは QuickSight のコンソール画面から作成を行うしかありませんでした。
作成したオブジェクトをテンプレート化して展開する方法はあったのですが、最初の作成だけは必須でした。

やってみる

今回は作成済みのダッシュボードから「ダッシュボード定義」を抽出し、それを使ってダッシュボードを新規作成してみます。
今までのテンプレートと違って抽出したコードに修正を行ったダッシュボードの編集が出来ます。

既存オブジェクトから定義を取得する

まず、今回のアップデートでいくつかの Describe 系 API が追加されており、オブジェクトの定義が取得出来るようになりました。
例によって本日時点では AWS CLI の V1 でのみ利用可能で、v1.27.18 以上である必要があります。

  • describe-analysis-definition
  • describe-dashboard-definition
  • describe-template-definition
% aws-v1 quicksight describe-dashboard-definition --aws-account-id 123456789012 --dashboard-id 80be6bdb-2392-4a55-9971-40af2f2b0baf
{
    "Status": 200,
    "DashboardId": "80be6bdb-2392-4a55-9971-40af2f2b0baf",
    "Name": "hoge1119textbox",
    "Definition": {
        "DataSetIdentifierDeclarations": [
:
        ],
        "Sheets": [
:
        ],
        "CalculatedFields": [
:
        ],
        "ParameterDeclarations": [
:
        ],
        "FilterGroups": [],
        "AnalysisDefaults": {
:
        }
    },
    "RequestId": "0bfd8a31-dcca-48cf-a31e-0aa8b18d7c0b"
}

中身は省略していますが、上記ハイライト部分が定義です。
かなり細かい設定が必要なのでアウトラインだけわかるように一度省略しました。

aws quicksight describe-dashboard-definition help で詳細な仕様が確認出来るので試してみてください。
こちらについては別途細かい仕様を記事化して案内したいと思います。

定義を使ってオブジェクトを作成する

次に Create/Update 系の API で definition パラメータが追加されており、定義情報を指定したオブジェクトの作成・更新が出来るようになっています。
ここでは先程の定義部分をローカルの JSON ファイルに保存し、そちらを使って新規ダッシュボードを作成してみます。

% aws-v1 quicksight create-dashboard --aws-account-id 123456789012 --dashboard-id hoge1028dashboard --name hoge1028dash
board --definition file://hoge.json --profile hoge

An error occurred (InvalidParameterValueException) when calling the CreateDashboard operation: Error in TextBox 80be6bdb-2392-4a55-9971-40af2f2b0baf_9a416ea9-bc03-406a-a082-9d3c72deb43d of Sheet 80be6bdb-2392-4a55-9971-40af2f2b0baf_f7e81c69-9a95-4ca8-838f-3ba9b7643c3e : Element "img" is unsupported for Text Box

ここで私はエラーが発生しました。
エラーメッセージから、TextBox でサポートされていない要素があるとのことです。
TextBox といえば最近実装されたビジュアルだったかと思いますが、全てが定義でサポートされていない可能性があるということがわかりました。ご利用にあたっては事前にご評価ください。

定義から TextBox 関連のコードを削除し再度実行する成功しました。

% aws-v1 quicksight create-dashboard --aws-account-id 123456789012 --dashboard-id hoge1028dashboard --name hoge1028dashboard --definition file://hoge.json --profile hoge
{
    "Status": 202,
    "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/hoge1028dashboard",
    "VersionArn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/hoge1028dashboard/version/1",
    "DashboardId": "hoge1028dashboard",
    "CreationStatus": "CREATION_IN_PROGRESS",
    "RequestId": "822e5232-3065-43cf-a30e-844fa8e6f7db"
}

しかし、この時点ではまだ作成しただけでオブジェクトへの権限がないのでダッシュボード一覧に表示されません。
QuickSight でオブジェクトをコードで作成した後は権限周りに注意しましょう。
ここでアクセスしている QuickSight ユーザーに権限を付与します。

permissions.json

[
    {
        "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/cm-iwasa.takahito/cm-iwasa.takahito",
        "Actions": [
            "quicksight:DescribeDashboard",
            "quicksight:ListDashboardVersions",
            "quicksight:UpdateDashboardPermissions",
            "quicksight:QueryDashboard",
            "quicksight:UpdateDashboard",
            "quicksight:DeleteDashboard",
            "quicksight:DescribeDashboardPermissions",
            "quicksight:UpdateDashboardPublishedVersion"
        ]
    }
]
% aws-v1 quicksight update-dashboard-permissions --aws-account-id 123456789012 --dashboard-id hoge1028dashboard --grant-permissions file://permissions.json --profile hoge
{
    "Status": 200,
    "DashboardArn": "arn:aws:quicksight:ap-northeast-1:123456789012:dashboard/hoge1028dashboard",
    "DashboardId": "hoge1028dashboard",
    "Permissions": [
        {
            "Principal": "arn:aws:quicksight:ap-northeast-1:123456789012:user/default/cm-iwasa.takahito/cm-iwasa.takahito",
            "Actions": [
                "quicksight:DescribeDashboard",
                "quicksight:ListDashboardVersions",
                "quicksight:UpdateDashboardPermissions",
                "quicksight:QueryDashboard",
                "quicksight:UpdateDashboard",
                "quicksight:DeleteDashboard",
                "quicksight:DescribeDashboardPermissions",
                "quicksight:UpdateDashboardPublishedVersion"
            ]
        }
    ],
    "RequestId": "693f1071-9bb7-4a46-ac29-5718fb519b1d",
    "LinkSharingConfiguration": {
        "Permissions": []
    }
}

権限の付与に成功し、ダッシュボードが一覧に表示されました。

作成したダッシュボードを開いてみると以下のようにきちんと表示されていますね。

ちなみに、基にしたダッシュボードはこちらです。
TextBox 部分を削除したので、コードから作成したダッシュボードでは下部の TextBox + 画像のビジュアルが削除されていますね。
このようにコードの修正内容が反映されていることも確認出来ました。

さいごに

本日は Amazon QuickSight でダッシュボード、分析、テンプレートをコード管理出来るようになったので確認してみました。

これは地味に激アツだと思います。
数ヶ月前に誰かに「IaC みたいなこと出来ないのか?」と聞かれて「残念ながら出来ません。」みたいな回答をした記憶がありますが出来るようになりました。QuickSight の進化すごい。

CloudFormation もそのうち実装されそうですね!楽しみです。
今日はとりあえずダッシュボードだけ試してみましたが、今後分析やテンプレートの作り方、定義の詳細情報などの記事も増えてくると思います。