Amazon QuickSightのアセットのインポート・エクスポートジョブで別アカウントにダッシュボードを共有してみた

インポート・エクスポートジョブで、アカウント間のアセットの共有を試してみました。テンプレートを配布したい場合などに便利そうです。
2023.07.04

データアナリティクス事業本部の鈴木です。

Amazon QuickSight でアセットのインポート・エクスポートジョブを実行がサポートされました。エクスポートしたアセットをアカウント間で共有したかったので試してみました。

この機能については以下のブログ記事でいち早く検証して頂いていました。

やりたいこと

以下のように、アカウントAにあるダッシュボードをアカウントBに移し替えたいです。

エクスポート・インポートの全体像

この記事ではダッシュボードと依存するアセットをエクスポートおよびインポートしました。ダッシュボードはS3からSPICEに読み込んだデータを表示するものとしました。

全体的な流れは以下のAWS Big Data Blogで説明されています。特に、とても分かりやすいシーケンス図が掲載されているので、一度確認頂いて流れを理解することをお勧めします。

前提の説明

データについて

今回は下記リンクにて公開されている、UCI Machine Learning RepositoryのIris Data Setを使用しました。

  • https://archive.ics.uci.edu/ml/datasets/iris

データをダウンロードし、iris.dataをS3バケットにアップロードしておきました。

マニフェストファイルは、例えば以下のように作成し、別途バケットにアップロードしておきました。

manifest.json

{
    "fileLocations": [
        {
            "URIs": [
                "s3://データ用バケット名/iris/iris-dataset.csv"
            ]
        }
    ],
    "globalUploadSettings": {
        "textqualifier": "\""
    }
}

データ用バケット名は自身のものに置き換えてください。

ダッシュボードについて

このように、品種ごとに、花びらの長さが同じ個体の数を棒グラフで表してみました。

ダッシュボードのサンプル

データセットは、エクスポート元のアカウントにて、QuickSightのコンソールから新しいS3データセットを作成しました。

新しいデータセットを作成

新しい分析を作成してこのデータセットに接続し、棒グラフを作成した後、ダッシュボードとして共有することで、ダッシュボードのアセットを作成しました。

やってみた

1. アセットバンドルのエクスポート

まず、start-asset-bundle-export-jobでエクスポートを開始します。

エクスポートの開始

エクスポート対象のAWSアカウントIDダッシュボードのARNエクスポート対象のAWSアカウント用のプロファイル名は環境に応じたものに差し替えて下さい。

aws quicksight start-asset-bundle-export-job --aws-account-id エクスポート対象のAWSアカウントID  --asset-bundle-export-job-id iris-dashboard-export-job --resource-arns ダッシュボードのARN --include-all-dependencies --export-format QUICKSIGHT_JSON --profile エクスポート対象のAWSアカウント用のプロファイル名

--asset-bundle-export-job-idでエクスポートジョブ名を指定しますが、これは次に使います。

アセットバンドルのダウンロード

続いて、describe-asset-bundle-export-jobでジョブのステータスを確認します。ジョブがSUCCESSFULであれば、レスポンスのDownloadUrlにアセットの情報が記載したS3の署名付きURLが記載されています。

aws quicksight describe-asset-bundle-export-job --aws-account-id エクスポート対象のAWSアカウントID --asset-bundle-export-job-id iris-dashboard-export-job --profile エクスポート対象のAWSアカウント用のプロファイル名

S3の署名付きURLをブラウザで開くなどしてアセットバンドルをダウンロードしました。今回の名前の付け方だと、assetbundle-iris-dashboard-export-job.qsというファイルがダウンロードできました。

2. アセットバンドルのインポート

続いて、インポート対象のアカウントにassetbundle-iris-dashboard-export-job.qsをインポートしてみました。

アセットバンドルのアップロード

まず、assetbundle-iris-dashboard-export-job.qsをアセット用のS3バケットにアップロードしました。このバケットには、インポート対象のアカウントのQuickSightで、アクセス許可をしておきました。

アセット用のバケット

マニフェストファイルのアップロード

データソース用にマニフェストファイルもアップロードしました。今回は上の画像に写っている場所に上げておきました。

マニフェストファイルの指定は次で行いました。

インポートジョブの実行

start-asset-bundle-import-jobを以下のように実行しました。

aws quicksight start-asset-bundle-import-job --aws-account-id インポート対象のAWSアカウントID --asset-bundle-import-job-id iris-import-job --asset-bundle-import-source "{\"S3Uri\": \"s3://アセット用のバケット名/iris/assetbundle-iris-dashboard-export-job.qs\"}" --override-parameters '{"DataSources": [{"DataSourceId": "データソースのID", "DataSourceParameters":{ "S3Parameters": {"ManifestFileLocation": {"Bucket": "アセット用のバケット", "Key": "iris/manifest.json"}}}}]}' --region ap-northeast-1 --profile インポート対象のAWSアカウント用のプロファイル名

--asset-bundle-import-sourceでアップロードしたassetbundle-iris-dashboard-export-job.qsファイルの場所を指定しました。

--override-parametersは、例えばS3のデータソースのマニフェストファイルのあるS3バケット名のような、インポート/エクスポートで差し替えないといけないパラメータを上書きするための設定でした。今回はS3をデータソースとしたデータセットをエクスポートしているので、マニフェストファイルの場所は差し替える必要があったため、この設定で指定しました。

進行状況および結果は、describe-asset-bundle-import-jobで確認が可能でした。エラーが発生したような場合はここから確認できました。JobStatusSUCCESSFULであることを確認するとよいでしょう。

aws quicksight describe-asset-bundle-import-job --aws-account-id インポート対象のAWSアカウントID --asset-bundle-import-job-id iris-import-job --region ap-northeast-1 --profile インポート対象のAWSアカウント用のプロファイル名

3. アセットの共有

ここまででアセットのインポートはできたのですが、QuickSightにログインしてみるとダッシュボードは確認できませんでした。

ダッシュボードは確認できない

管理者ユーザーで、QuickSightの管理画面より、アセットの共有を行いました。

共有するアセットを選択して、共有を押しました。

データソースの共有

誰に共有するかが聞かれるので、自分に所有者として共有しました。

共有設定

今回は、以下の3つのアセットについて、この設定を行いました。

  • ダッシュボード
  • データセット
  • データソース

共有を行った時点でデータセットにS3からデータが取り込まれ、ダッシュボードにアクセスすることで棒グラフが表示されました。

インポートできたダッシュボード

特にタイトルの日本語が文字化けしていないところはポイントと思います。

補足

共有設定の自動化のヒント

今回はコンソールから共有設定をしましたが、可能であれば自動でできるようにしたいです。共有設定を実施した時間帯のCloudTrailログを確認すると、UpdateDataSetPermissionsの実行履歴がありました。

CloudTrailの記録

開発者ガイドにAWS CLIでの実行例もあったため、参考にするとよさそうでしたのでご紹介です。

データソースIDの確認

今回の例では、データソースのマニフェストファイルの設定を上書きするために、データソースIDが必要でした。

これはエクスポート元のアカウントでQuickSightの管理画面か、describe-data-setなどで確認できました。

アセットバンドルに含まれる対象

今回はダッシュボードをエクスポート対象としましたが、アセットバンドルに含まれたのは以下の3種で、分析は含まれませんでした。

  • ダッシュボード
  • データセット
  • データソース

例えばML Insightを使いたい場合は分析も必要になるので、配布用のアセットバンドルを作るような際は、何が含まれているか注意し、不足しているものは加えて個別でエクスポートする必要がありそうでした。

ダッシュボードだけ共有したときの挙動

今回、インポートした後に共有設定をしましたが、ダッシュボードだけ見られればそれでいいので、ダッシュボードだけ共有してみました。

結果としては、以下のようにデータソースがないエラーが出てしまったため、依存関係のあるものは一通り設定をする必要がありました。

ダッシュボードが表示されない例

アセット管理の機能について

インポートしたアセットを、アセット管理の機能から共有設定してほかのユーザーから閲覧できるようにしました。

この機能については以下のブログで詳しく説明がありました。

アセット共有先設定時の補足

アセットを共有ポップアップでユーザーまたはグループを選ぶ際に、結果なしと表示されますが、ユーザー名の一部を入力するとサジェストされます。

アセット共有先の選択

最後に

QuickSightのアセットのエクスポートジョブでアセットバンドルを作成し、別のアカウントにインポートしてダッシュボードを使えるようになるところまで試してみました。

共有設定やパラメータの上書きなど使い方を試行錯誤する必要はありそうですが、アセットバンドルとしてファイルでQuickSightのアセットを保管できるようになるのはとても嬉しい機能でした。