QuickSightのテンプレートがバックアップとして使えるか試してみた

テンプレートを作成した時点の分析が復元できました
2023.05.30

はじめに

データアナリティクス事業本部 BIチームのkariyaです。
QuickSightでは、分析(可視化したもの)からテンプレートを作成し、テンプレートから分析のコピーを作成することができます。
このテンプレートを、分析のバックアップとして使用できないか試してみました。

やりたいこと

  • 分析を作成する→テンプレートを作成する(バージョン1)
  • 分析を修正する→テンプレートを作成する(バージョン2)
  • 分析を削除する
  • テンプレート(バージョン1)から分析作成
  • テンプレート(バージョン2)から分析作成

やってみる

分析を作成する

簡単な分析を作成します。

分析とデータセットのARNを調べる

テンプレートの作成には、分析とデータセットのARNが必要です。 まずは分析のリストを出力します。

aws quicksight list-analyses --aws-account-id 999999999999 --output json | jq '.AnalysisSummaryList | sort_by(.LastUpdatedTime) | reverse | .[] | {ARN: .Arn, Name: .Name, Id: .AnalysisId, LastUpdated: .LastUpdatedTime} | select(.Name | contains("default"))'
{
  "ARN": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/c268c29c-6380-46ac-8f6a-1057dc01f3a0",
  "Name": "分析_default_修正前",
  "Id": "c268c29c-6380-46ac-8f6a-1057dc01f3a0",
  "LastUpdated": "2023-05-30T09:40:19.530000+00:00"
}

同様に、データセットのリストを出力します。

aws quicksight list-data-sets --aws-account-id 999999999999 --output json | jq '.DataSetSummaries | sort_by(.LastUpdatedTime) | reverse | .[] | select(.Name | contains("default"))'
{
  "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/0b48da43-df90-45e4-a477-ad6c0bdd19d4",
  "DataSetId": "0b48da43-df90-45e4-a477-ad6c0bdd19d4",
  "Name": "default空間_売上",
  "CreatedTime": "2023-05-16T09:25:02.235000+00:00",
  "LastUpdatedTime": "2023-05-23T08:29:53.689000+00:00",
  "ImportMode": "SPICE",
  "RowLevelPermissionDataSet": {
    "Namespace": "default",
    "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/62ed0e44-617b-44ae-9af0-27e7ba8198b6",
    "PermissionPolicy": "GRANT_ACCESS",
    "FormatVersion": "VERSION_1",
    "Status": "ENABLED"
  },
  "RowLevelPermissionTagConfigurationApplied": false,
  "ColumnLevelPermissionRulesApplied": false
}
{
  "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/907ceb25-f4cc-45c1-8d6f-c57dcb8ff5fc",
  "DataSetId": "907ceb25-f4cc-45c1-8d6f-c57dcb8ff5fc",
  "Name": "default空間_在庫",
  "CreatedTime": "2023-05-16T09:25:35.229000+00:00",
  "LastUpdatedTime": "2023-05-17T04:28:51.879000+00:00",
  "ImportMode": "SPICE",
  "RowLevelPermissionTagConfigurationApplied": false,
  "ColumnLevelPermissionRulesApplied": false
}

テンプレートを作成する(1回目)

先ほど取得した分析とデータセットのARNを使用し、テンプレートを作成します。

aws quicksight create-template --aws-account-id 999999999999 --template-id template_ver1 --name template_1 \
--permissions '[
  {
    "Principal": "arn:aws:quicksight:ap-northeast-1:999999999999:namespace/default",
    "Actions": ["quicksight:DescribeTemplate"]
  }
]' \
--source-entity \
'{
  "SourceAnalysis": {
    "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/c268c29c-6380-46ac-8f6a-1057dc01f3a0",
    "DataSetReferences": [
      {
        "DataSetPlaceholder": "DataSet_Sales",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/0b48da43-df90-45e4-a477-ad6c0bdd19d4"
      },
      {
        "DataSetPlaceholder": "DataSet_Stock",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/907ceb25-f4cc-45c1-8d6f-c57dcb8ff5fc"
      }
    ]
  }
}'

分析を修正する

手作業で分析を修正します。今回は間違えて修正した場合を想定し、項目を削除してみます。

テンプレートを作成する(2回目)

修正後の状態を保存するため、テンプレートを作成します。
分析とデータセットのARNをは同じものを使用しますが、template-idとnameは先ほどと異なる名称にします。

aws quicksight create-template --aws-account-id 999999999999 --template-id template_ver2 --name template_2 \
--permissions '[
  {
    "Principal": "arn:aws:quicksight:ap-northeast-1:999999999999:namespace/default",
    "Actions": ["quicksight:DescribeTemplate"]
  }
]' \
--source-entity \
'{
  "SourceAnalysis": {
    "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:analysis/c268c29c-6380-46ac-8f6a-1057dc01f3a0",
    "DataSetReferences": [
      {
        "DataSetPlaceholder": "DataSet_Sales",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/0b48da43-df90-45e4-a477-ad6c0bdd19d4"
      },
      {
        "DataSetPlaceholder": "DataSet_Stock",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/907ceb25-f4cc-45c1-8d6f-c57dcb8ff5fc"
      }
    ]
  }
}'

実際に作成できているかをlist-templatesで確認します。

aws quicksight list-templates --aws-account-id 999999999999 --output json | jq '.TemplateSummaryList | sort_by(.LastUpdatedTime) | reverse | .[]'
{
  "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:template/template_ver2",
  "TemplateId": "template_ver2",
  "Name": "template_2",
  "LatestVersionNumber": 1,
  "CreatedTime": "2023-05-30T09:45:04.903000+00:00",
  "LastUpdatedTime": "2023-05-30T09:45:04.903000+00:00"
}
{
  "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:template/template_ver1",
  "TemplateId": "template_ver1",
  "Name": "template_1",
  "LatestVersionNumber": 1,
  "CreatedTime": "2023-05-30T09:41:29.126000+00:00",
  "LastUpdatedTime": "2023-05-30T09:41:29.126000+00:00"
}

テンプレートが2種類作成されていることが確認できました。

分析を削除する

ここで分析を削除します。削除後もテンプレートから任意のバージョンの分析が復元できれば、バックアップとして使用できる想定です。

テンプレートから分析を作成する

それではテンプレートから分析を復元します。 まずはバージョン1のテンプレートを使用します。

aws quicksight create-analysis --aws-account-id 999999999999 --analysis-id analysis_from_ver1_deleted --name "分析_ver1から作成_分析削除後" \
--source-entity '{
  "SourceTemplate": {
    "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:template/template_ver1",
    "DataSetReferences": [
      {
        "DataSetPlaceholder": "DataSet_Sales",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/0b48da43-df90-45e4-a477-ad6c0bdd19d4"
      },
      {
        "DataSetPlaceholder": "DataSet_Stock",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/907ceb25-f4cc-45c1-8d6f-c57dcb8ff5fc"
      }
    ]
  }
}' \
--permissions '[
    {
        "Principal": "arn:aws:quicksight:ap-northeast-1:999999999999:group/default/default_namespace_group",
        "Actions": [
            "quicksight:RestoreAnalysis",
            "quicksight:UpdateAnalysisPermissions",
            "quicksight:DeleteAnalysis",
            "quicksight:DescribeAnalysisPermissions",
            "quicksight:QueryAnalysis",
            "quicksight:DescribeAnalysis",
            "quicksight:UpdateAnalysis"
        ]
    }
]'

続いてバージョン2のテンプレートを使用して分析を作成します。
analysis-idとnameはバージョン1と異なる名称にします。

aws quicksight create-analysis --aws-account-id 999999999999 --analysis-id analysis_from_ver2_deleted --name "分析_ver2から作成_分析削除後" \
--source-entity '{
  "SourceTemplate": {
    "Arn": "arn:aws:quicksight:ap-northeast-1:999999999999:template/template_ver2",
    "DataSetReferences": [
      {
        "DataSetPlaceholder": "DataSet_Sales",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/0b48da43-df90-45e4-a477-ad6c0bdd19d4"
      },
      {
        "DataSetPlaceholder": "DataSet_Stock",
        "DataSetArn": "arn:aws:quicksight:ap-northeast-1:999999999999:dataset/907ceb25-f4cc-45c1-8d6f-c57dcb8ff5fc"
      }
    ]
  }
}' \
--permissions '[
    {
        "Principal": "arn:aws:quicksight:ap-northeast-1:999999999999:group/default/default_namespace_group",
        "Actions": [
            "quicksight:RestoreAnalysis",
            "quicksight:UpdateAnalysisPermissions",
            "quicksight:DeleteAnalysis",
            "quicksight:DescribeAnalysisPermissions",
            "quicksight:QueryAnalysis",
            "quicksight:DescribeAnalysis",
            "quicksight:UpdateAnalysis"
        ]
    }
]'

復元した分析の確認

復元した分析を確認してみます。
バージョン1から復元した分析は、項目が削除されていない状態でした。

バージョン2から復元した分析は、項目が削除されていました。

テンプレートを作成した時点での分析が再現されていますね。

まとめ

分析が削除された状態からでも、テンプレートをバックアップとして使用して分析を復元することができました。 テンプレートや分析を作成する際に、下記項目は任意の名称がつけられるため、名称で「どの分析か」「どのバージョンか」等が分かるようにしておくと復元の助けになりそうです。

  • template-id
  • (templateの)name  
  • analysis-id
  • (analysisの)name

最後までお読み頂きありがとうございました。
テンプレートを使用した運用の際に、少しでも参考になりましたら嬉しいです。

参考記事