AWS CLIを使ってQuickSightのSPICE使用量を計算してみた

2022.02.27

いわさです。

QuickSightでは以前に作成されたアカウントではSPICEやユーザーの無料枠がありました。

また、それ以外で利用する場合でもユーザー毎に利用出来るSPICEが付与されます。

そういうこともありSPICEの監視を行いたいケースが多いと思います。
しかし、現時点でCloudWatchでQuickSightのメトリクスを取得することは出来ません。

そもそも、管理画面以外でSPICE使用量を取得する方法があるのか?
本日はいくつかのコマンドを使って、AWS CLIでSPICE使用量を計算してみました。

SPICE使用量

SPICE使用量はQuickSightの管理画面から確認することが出来ます。
以下であれば、364.66MB使用中ということです。

AWS CLIで計算してみる

上記の数値をそのままCLIでも取得出来れば良いのですが、現時点では取得できない(はず)です。
SPICEの使用量はSPICEへロードされたデータセットの合計サイズであるはずなので、データセットの一覧を取得してサイズを合計しようと思います。

データセット一覧を取得する

データセットの一覧は、list-data-setsサブコマンドで取得することが出来ます。

list-data-sets — AWS CLI 2.4.21 Command Reference

ここでは、ImportModeSPICEのデータセットのみを取得します。

$ aws quicksight list-data-sets --aws-account-id 123456789012 --query 'DataSetSummaries[?ImportMode==`SPICE`].DataSetId'
[
    "0848746a-b66a-4635-86a9-76e6f2838d52",
    "09153e12-38ab-407e-ab96-2e9f90cedf3c",

    ...

    "f27d0f76-d2c9-4a84-920f-fe355c13a418",
    "fe0ed179-4fb3-4c7b-8317-d65272edcd01"
]

データセットのサイズを取得する

list-data-setsコマンドではそれぞれのデータセットの使用量を確認することは出来ません。
よって、describe-data-setコマンドを使ってデータセットの詳細情報を取得する必要があります。

describe-data-set — AWS CLI 2.4.21 Command Reference

$ aws quicksight describe-data-set --aws-account-id 123456789012 --data-set-id 0848746a-b66a-4635-86a9-76e6f2838d52
{
    "Status": 200,
    "DataSet": {
        "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dataset/0848746a-b66a-4635-86a9-76e6f2838d52",
        "DataSetId": "0848746a-b66a-4635-86a9-76e6f2838d52",
        "Name": "iwasa-kanri",
        "CreatedTime": "2021-09-19T18:55:11.820000+09:00",
        "LastUpdatedTime": "2021-09-19T18:55:12.082000+09:00",
        "PhysicalTableMap": {
          ...
        },
        "LogicalTableMap": {
          ...
        },
        "OutputColumns": [
          ...
        ],
        "ImportMode": "SPICE",
        "ConsumedSpiceCapacityInBytes": 126,
        "DataSetUsageConfiguration": {
            "DisableUseAsDirectQuerySource": false,
            "DisableUseAsImportedSource": false
        }
    },
    "RequestId": "b06b5175-1369-4862-aa13-463717006d2a"
}

上記ハイライト部分が使用量です。
あとは対象のデータセットに対して全て取得し、合計すれば良さそうですね。

しかし、実はこのコマンドはファイルアップロードで作成されたデータセットはサポートされていません。(どうして・・・)
ファイルアップロードによるデータセットは以下のようになります。

$ aws quicksight describe-data-set --aws-account-id 123456789012 --data-set-id 0c71cc87-9b26-45c1-98d4-d96815d9d540

An error occurred (InvalidParameterValueException) when calling the DescribeDataSet operation: The data set type is not supported through API yet

ファイルアップロードはSPICE取り込み結果を集計する

通常、ファイルアップロードの場合でもSPICEへ取り込むという処理を行います。
そしてその取り込み操作・データについては「ingestion」というオブジェクトとしてQuickSightに残ります。

データセット毎のingestionをlist-ingestionsコマンドで取得することが出来ます。
このingestionには取り込みサイズが含まれています。
この値を集計することでもサイズ計算を行うことが出来そうです。

$ aws quicksight list-ingestions --aws-account-id 123456789012 --data-set-id 0c71cc87-9b26-45c1-98d4-d96815d9d540
{
    "Ingestions": [
        {
            "Arn": "arn:aws:quicksight:ap-northeast-1:123456789012:dataset/0c71cc87-9b26-45c1-98d4-d96815d9d540/ingestion/bb9e0679-1f07-468b-b441-db7be4cfd896",
            "IngestionId": "bb9e0679-1f07-468b-b441-db7be4cfd896",
            "IngestionStatus": "COMPLETED",
            "ErrorInfo": {},
            "RowInfo": {
                "RowsIngested": 10,
                "RowsDropped": 0,
                "TotalRowsInDataset": 10
            },
            "CreatedTime": "2021-03-23T14:30:03.126000+09:00",
            "IngestionTimeInSeconds": 17,
            "IngestionSizeInBytes": 771,
            "RequestSource": "MANUAL",
            "RequestType": "INITIAL_INGESTION"
        }
    ],
    "Status": 200,
    "RequestId": "af3f3cef-39dd-4fb8-897b-1a5a50b52375"
}

注意点として、すべてのデータセットではなくファイルアップロードのデータセットのみingestionから取得してください。
ファイルアップロード以外のingestionの場合は増分更新機能が関連し、マイナス更新などもされるためです。ただし、この記事では試していませんがその辺りを考慮してもlist-ingestionsで集計自体はすることが出来るかもしれません。

集計する

本当はスクリプトなどでスマートに行いたかったのですがそこまで出来なかったので手計算しました。
私の環境では、SPICEインポートモードのデータセットの数が全部で44件ありました。

また、そのうち23件のデータセットはファイルアップロード以外で作成されたデータセットで、データセットサイズの合計(describe-data-setで取得)は32,418,505バイトでした。

残り21件のデータセットはファイルアップロードで作成されたデータセットとなり、取り込み操作の合計(list-ingestionsで取得)は349,952,472バイトでした。

合計が382,370,977バイトとなり、約364.66MiBとなります。
QuickSightの管理画面で確認出来ていた364.66MBに近い値となりました。悪くないのでは...

さいごに

本日はAWS CLIを使って、QuickSightでのSPICE使用量を計算してみました。
私が利用しているシンプルな範囲であれば期待どおりの取得結果となりました。
今度、この方法を使ってCloudWatchのカスタムメトリクスを作成し、アラート設定してみたいと思います。SPICE使用量の監視に使えるかもしれない。

注意点として、イレギュラーパターンで計算が狂う場合がどこまで考慮出来ているかもうちょっと色々なデータセットパターンで試してみたいところです。

AWS CLIから直接取得出来たり、describe-data-setでファイルアップロードタイプのものも取得出来ればもう少し楽になりそうですね。期待したいところです。