顧客フロントSEのIT勉強ブログ

顧客フロントSEがなるべく手を動かしながらIT技術を学んでいくブログです。

【AWSワークショップ】QuickSight Workshop② ~管理者向け~

f:id:se_o_chan:20210909174402p:plain

今回はQuickSightワークショップで管理者向け機能を学んでいこうと思います。

前回はダッシュボードを作成する作成者向けワークショップでしたが、今回はQuickSightのテナント全体の管理者向けの機能です。

具体的にはIDEとしてCloud9を使って、CLIベースで権限設定、マルチテナント、コンテンツの移植などのQuickSight操作を行っていくことになります。

ちなみに、前回のQuickSight 作成者ワークショップはこちらです。

frontse.hatenablog.jp

 

Admin Workshop(管理者ワークショップ)

初期セットアップ

Step 1 - Cloud9のセットアップ

Cloud9からQuickSightを操作できるよう、事前準備を行います。

1)AWSマネジメントコンソールから「Cloud9」を検索し、起動します。

2)Cloud9の画面で「Create enveronment」ボタンを押します。

3)Nameに「QuickSight Admin Workshop」と入力し「Next step」ボタンを押します。

4)Environment typeは「Create a new EC2 instance for environment (direct access)」、Instance typeは「t2.micro」、Platformは「Amazon Linux 2」、Cost-saving setting(コスト削減のために何分アクティビティが無ければ環境を停止するか)は「After forur hours」にして「Next step」ボタンを押します。

f:id:se_o_chan:20210907091636p:plain

5)「Create environment」ボタンを押します。これで数分待てばCloud9の環境が出来上がります。

Step 2 - QuickSightのセットアップ

ここはQuickSightを始めて使う人向けの作業です。

前回の作成者向けワークショップで完了を作っているのでスキップします。

Step 3 - Cloud9の初期化

1)こちらからCloud9の設定ファイルをダウンロードします。Zipファイルになっているのでローカルで解凍します。

2)Cloud9の画面上部にあるFileタブから「Upload Local Files...」をクリックします。

f:id:se_o_chan:20210907092527p:plain

3)「Select folder」から先ほど回答したフォルダを選択し、アップロードします。

4) アップロードが完了したら「Upload Files」ダイアログは×ボタンで閉じます。

5)画面左のパネルからRunMeFirst.shを右クリックし「Run」を選択します。

f:id:se_o_chan:20210907092945p:plain

6)画面下のターミナル画面でCloud9のEC2環境にいくつかのパッケージをインストールしてよいかを「Is this ok [y/d/N]:」と聞いてくるので「y」を入力し、Enterボタンを押します。

7)シェルの実行が終わったら、ターミナル画面上部の+ボタンから新しいターミナルを開き、次のスクリプトを実行します。各変数値が正しく返却されたら準備OKです。

echo AAI:$AAI , IR:$IR , UN:$UN, EML:$EML

f:id:se_o_chan:20210907094945p:plain

※RunMeFirst.shで何を実行しているかはシェルの中身を見てみると良いですが、

AWS CLIJSONレスポンスをパースするためのjqコマンドのインストール
・後で使うSageMakerのpythonライブラリ(それに紐づくboto3やnumpyなども)のインストール
AWS CLIのGetCallerIdentityコマンドで取得したアカウントID、ユーザのARN等の情報をDescribeUserOutput.json(後の工程で使う)に保存

を実行しています。

 

Step 4 - サンプルダッシュボードのセットアップ

注意!!

ワークショップが提供しているCloudFormationテンプレートに誤りがあり、手順通りに実行するとスタック作成に失敗します。

下記に私が整理した代替手順を示しますが、一時利用ということでS3バケット周りのセキュリティがゆるゆるです。本操作が終わりましたらパブリックアクセスを停止する等で対応してください。

ちなみに、このファイルは後述「コンテンツの移植」でも使います。

1)次の内容を「SalesDataManifest.json」という名前でテキストファイルに保存する。

{
    "fileLocations": [{
        "URIs": [
            "https://s3.us-east-1.amazonaws.com/spaceneedle-samplefiles.prod.us-east-1/sales/data.csv"
        ]
    }],
    "globalUploadSettings": {
        "format": "CSV",
        "delimiter": ",",
        "textqualifier": "\"",
        "containsHeader": "true"
    }
}

2)AWSマネジメントコンソールからS3を開き「バケットを作成」ボタンをクリックします。

3)バケット名は任意(グローバルで一意である必要あり)に設定します。画面途中の「パブリックアクセスをすべてブロック」のチェックを外し、「バケットを作成」ボタンをクリックします。

4)できたバケットを選択し「アクセス許可」タブから下記のバケットポリシーを設定する。

{
    "Version": "2012-10-17",
    "Id": "Policy1630979891256",
    "Statement": [
        {
            "Sid": "Stmt1630979890030",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::${バケット名}/*"
        }
    ]
}

5)そのバケットに「SalesDataManifest.json」をアップロードする。

6)こちらからCloudFormationテンプレートファイルをダウンロードします。

7)テンプレートファイルの40~41行目に先ほどアップロードした「SalesDataManifest.json」のバケットとキーを設定する箇所があるので、既存値を削除して3~5で作成したバケット、キーの値に書き換えます。

8)こちらからCloudFormationのスタック作成画面に移動します。

9)「テンプレートの指定」でテンプレートソースを「テンプレートファイルのアップロード」に変更し、「次へ」ボタンをクリックします。

f:id:se_o_chan:20210907113529p:plain

10)「スタックの詳細を指定」画面で、スタックの名前に「QuickSightSample」、パラメータのQuickSightIdentityRegionにStep3の最後に実行したスクリプトのIRの値(ap-northeast-1など)、QuickSightUserにスクリプトのUNの値を入力し、「次へ」ボタンを押します。

11)「スタックオプションの設定」画面は初期設定のまま「次へ」ボタンを押します。

12)「レビュー」画面で「スタックの作成」ボタンを押します。数分待つとCloudFormationによってQuickSight内にデータソース、データセット、テーマ、分析、ダッシュボードが作成されます。

QuickSight CLI入門

Exercise 1 - QuickSight CLIに慣れる

1)Cloud9の画面下部にあるターミナル画面から、次のコマンドを実行すると、利用可能なコマンドのリストが表示されます。戻るにはqを入力しEnterを押します。

aws quicksight help

2)例えば次のようなコマンドを実行すると、特定のコマンドの仕様が確認できます。これもqを入力すれば元に戻れます。

aws quicksight describe-user help

f:id:se_o_chan:20210907145801p:plain

Exercise 2 - describe-userコマンドを実行

1)次のコマンドを実行してみます。QuickSightユーザの詳細が確認できます。

aws quicksight describe-user --aws-account-id $AAI --namespace default --user-name $UN --region $IR

f:id:se_o_chan:20210907154839p:plain

アカウントのカスタマイズ

ここではCLIを使って新しい分析で使われるデフォルトテーマの設定をしてみます。

マルチテナントの場合は、異なるnamespaceに対して異なるデフォルト設定ができます(マルチテナントについては後で触れます)。

Exercise 1 - デフォルトテーマの確認

1)QuickSight画面の左メニューから「データセット」画面に移動し、「QSTCF-DataSet」をクリックします。

2)出てきたダイアログで「分析の作成」ボタンをクリックします。

3)画面上部で分析の名前を「QSTCF-DataSet analysis」から「ThemeCheck-1」に変更します。

4)シート内の空のビジュアルにフォーカスを当てた状態で、フィールドリストからSalespersonをクリックします。するとSalesperson毎のレコード件数が薄い青色の棒グラフになって表示されます。

5)画面左の「テーマ」メニューを押すと、今は「Classic」というテーマが適用されていることが分かります。

f:id:se_o_chan:20210907155734p:plain

6)画面左上のQuickSightロゴをクリックしてホーム画面に戻ってください。先ほど作ったThemeCheck-1の分析は削除してください。

Exercise 2 - デフォルトテーマとしてMidnightを設定する

1)Cloud9で、ターミナル画面から次のコマンドを事項します。これにより今のリージョンのアカウント上で作られた新しい分析のデフォルトテーマがMidnightに変わります。

aws quicksight create-account-customization --aws-account-id $AAI --account-customization DefaultTheme=arn:aws:quicksight::aws:theme/MIDNIGHT

2)次のコマンドを実行するとアカウントに対するカスタマイズ設定が確認できます。今実行したデフォルトテーマがMignightになっているはずです。

aws quicksight describe-account-customization --aws-account-id $AAI

f:id:se_o_chan:20210907173426p:plain

Exercise 3 - 再度デフォルトテーマを確認する

1)Exercise 1で実施した手順を、テーマ名をThemeCheck-2にして実行してください。背景色や棒グラフの色が変わっていることが確認できます。

f:id:se_o_chan:20210907160553p:plain

Exercise 4 - デフォルトテーマをSeasideに変更する

1)Cloud9で、ターミナル画面から次のコマンドを事項します。これにより今のリージョンのアカウント上で作られた新しい分析のデフォルトテーマがSeasideに変わります。先ほどはcreate-account-customizationコマンドだったのが、今回はupdate-account-custmizationになっていることに注意して下さい。

aws quicksight update-account-customization --aws-account-id $AAI --account-customization DefaultTheme=arn:aws:quicksight::aws:theme/SEASIDE

Exercise 5 - 再々度デフォルトテーマを確認する

1)Exercise 1で実施した手順を、テーマ名をThemeCheck-3にして実行してください。背景色や棒グラフの色が変わっていることが確認できます。

f:id:se_o_chan:20210907161120p:plain

ユーザとグループ

Exercise 1 - QuickSightに新しいユーザを作る

1)Cloud9で次のコマンドを実行してREADERのユーザを作ります。オプション指定している「--identity-type QUICKSIGHT」とはユーザがQuickSightの中で管理されることを意味しますが、「--identity-type IAM」と指定すればIAMユーザとマッピングしたQuickSightユーザも作ることができます。

aws quicksight register-user --aws-account-id $AAI --namespace default --identity-type QUICKSIGHT --user-role READER --email Default-Reader1@quicksightadminworkshop.com --user-name Default-Reader1 --region $IR

2)上のコマンドのレスポンスにあるUserInvitationUrlをコピーして、ブラウザからそのURLのWebページにアクセスします。

3)任意のパスワードを設定し「アカウントの作成とサインイン」ボタンをクリックします。遷移後の画面で「続行」ボタンをクリックします。これで作成したユーザがActiveになりました。

4)一度QuickSightからサインアウトして、Default-Reader1ユーザでログインしてみます。まだ権限がないため、何のダッシュボードも閲覧できないはずです。

f:id:se_o_chan:20210907162530p:plain

Exercise 2 - 新しいグループを作る

QuickSightグループはオブジェクトやフォルダの共有、列レベルセキュリティ・行レベルセキュリティの適用等で使用されます。

1)Cloud9で、次のコマンドを実行しグループを作成します。

aws quicksight create-group --aws-account-id $AAI --namespace default --group-name Default-ReaderGroup --region $IR

Excercise 3 - ReaderGroupにダッシュボードを共有する

1)(Default-Reader1ユーザではなく)管理ユーザでQuickSightダッシュボードから「QSTCF-Dashboard」をクリックします。

2)画面右上の「共有」をクリックし、「ダッシュボードの共有」を選択します。

3)共有するグループに「Default-ReaderGroup」を選択し、「共有」ボタンをクリックします。

f:id:se_o_chan:20210907163446p:plain

Exercise 4 - Default-ReaderGroupにDefaut-Reader1ユーザを追加する

1)Cloud9で、次のコマンドを実行してグループにユーザを追加します。

aws quicksight create-group-membership --aws-account-id $AAI --namespace default --group-name Default-ReaderGroup --member-name Default-Reader1 --region $IR

2)list-group-membershipsコマンドで、グループに属するユーザを確認できます。

aws quicksight list-group-memberships --aws-account-id $AAI --namespace default --group-name Default-ReaderGroup --region $IR

Exercise 5 - Default-Reader1のダッシュボードビューを確認する

1)Default-Reader1でQuickSightにログインします(作業の簡素化の為、プライベートモードでブラウザを実行してからログインすると、管理ユーザの操作と共存できます)

2)QSTCF-Dashboardダッシュボードビューに表示されていることが確認できます。

f:id:se_o_chan:20210907164503p:plain

マルチテナント

QuickSightのユーザ、グループはnamespaceに属しており、namespaceを分けることで同じアカウント内にマルチテナントを実装できます。作成者/管理者は自分が属するnamespace内のユーザ・グループのみ閲覧・操作できます。

一方で、その他のアセット(データソース、データセット、テーマ、テンプレート、分析、ダッシュボード等)はアカウントの共有スペースに属しており、管理者が実行するAPIを通じて任意のnamespaceに属するユーザ/グループに共有できます。

Exercise 1 - 新しいnamespaceを作成する

1)Cloud9で、次のコマンドを実行してCustomer1というnamespaceを作成します。namespaceの作成は非同期なので、APIのレスポンスが返ってきても裏では20~30秒しないと作成が完了していません。

aws quicksight create-namespace --aws-account-id $AAI --identity-store QUICKSIGHT --namespace Customer1 --region $IR

Exercise 2 - IAMで新しいユーザを2つ作成する

1)AWSマネジメントコンソールからIAMコンソールを起動します。

2)画面左の「ユーザー」メニューから「ユーザーを追加」ボタンをクリックします。

3)Customer1-Auther1というユーザー名にします。ここでは名前の前半部=Exercise1のnamespace名にしていますが、別にそれは必須ではないです。

4)「別のユーザの追加」をクリックし、Customer1-Reader1というユーザー名にします。

5)アクセスの種類で「AWSマネジメントコンソールへのアクセス」にチェックを入れ、コンソールのパスワードは任意値、「パスワードのリセットが必要」のチェックを外し、「次のステップ:アクセス権限」ボタンをクリックします。

6)「既存のポリシーを直接アタッチ」をクリックし、「次のステップ:タグ」ボタンをクリックします。

7)タグには何もセットせず、「次のステップ:確認」ボタンをクリックします。

8)「このユーザにはアクセス権限がない」とアラートが出ますが、無視して「ユーザの作成」ボタンをクリックします。これでIAMユーザが作成されました。

Exercise 3 - 新しいnamespaceのステータスを確認する

1)Cloud9で、次のコマンドを実行しCustmer1のnamespaceのステータスを確認します。CreationStatusが「"CREATED"」になっているはずです。

aws quicksight describe-namespace --aws-account-id $AAI --namespace Customer1 --region $IR

f:id:se_o_chan:20210907173907p:plain

Exercise 4 - QuickSightでIAMユーザを登録する

AWSマネジメントコンソールからQuickSightを立ち上げて登録した場合、プライマリnamespace(update-account-settings APIで更新していなければdefault namespace)にユーザ登録されます。

ここではCLIを使って、別のnamespaceに登録します。

1)Cloud9で、次のコマンドを実行し、Customer1のnamespaceにCustomer1-Auther1ユーザを登録します。ロールにAUTHERを指定しています。

aws quicksight register-user --aws-account-id $AAI --namespace Customer1 --identity-type IAM --iam-arn arn:aws:iam::$AAI:user/Customer1-Author1 --user-role AUTHOR --email Customer1-Author1@quicksightadminworkshop.com --region $IR

2)同じく次のコマンドでCustomer1-Reader1ユーザも登録します。ロールにREADERを指定しています。

aws quicksight register-user --aws-account-id $AAI --namespace Customer1 --identity-type IAM --iam-arn arn:aws:iam::$AAI:user/Customer1-Reader1 --user-role READER --email Customer1-Reader1@quicksightadminworkshop.com --region $IR

Exercise 5 -Customer1-Auther1ユーザでQuickSightにログインする

1)QuickSight画面(https://quicksight.aws.amazon.com)を起動し、Customer-Auther1ユーザでログインします。

f:id:se_o_chan:20210907172222p:plain

Exercise 6 - Cutomer1-Author1ユーザにダッシュボードを共有する(誤りパターン)

1)管理ユーザのQuicksightで、ダッシュボードビューを開き、QSTCF-Dashboardをクリックします。

2)画面右上の「共有」から「ダッシュボードの共有」を選択します。

3)共有するユーザにCutomer1と入力してみます。Cutomer1-Auther1ユーザがヒットしないはずです。これはdefault namespaceにいる管理ユーザからはCustomer1 namespaceにいるユーザを見れないためです。

4)×ボダンで一旦ダイアログを閉じ、画面左上のQuickSightロゴをクリックします。

f:id:se_o_chan:20210907172700p:plain

Exercise 7 - Customer1-Author1ユーザにダッシュボードを共有する(正しいパターン)

1)Cloud9で、次のコマンドを実行し、ダッシュボードに適用されている今の権限を取得します。 レスポンスの中にある「DashboardId」はダッシュボードを開いた時のURLの末尾にあるキーで、QuickSightのUIから作成すると自動採番されます。一方で、APIやCloudFormationで作成するとIDを指定できます(ただし同一アカウント・同一リージョン内でユニークである必要あり)。今回はCloudFormationスタックの中で、ダッシュボード名と同じIDにしているので、下の画像のようなレスポンスになっています。

aws quicksight describe-dashboard-permissions --aws-account-id $AAI --dashboard-id QSTCF-Dashboard

f:id:se_o_chan:20210907174237p:plain

2)上のコマンドのレスポンスから2つの権限(Permissions)が設定されているのが分かりますが、今度は次のコマンドを実行してCustomer1-Author1ユーザにfull owner権限を付与します。

aws quicksight update-dashboard-permissions --aws-account-id $AAI --dashboard-id QSTCF-Dashboard --grant-permissions Actions=quicksight:DescribeDashboard,quicksight:ListDashboardVersions,quicksight:UpdateDashboardPermissions,quicksight:QueryDashboard,quicksight:UpdateDashboard,quicksight:DeleteDashboard,quicksight:DescribeDashboardPermissions,quicksight:UpdateDashboardPublishedVersion,Principal=arn:aws:quicksight:$IR:$AAI:user/Customer1/Customer1-Author1

f:id:se_o_chan:20210907175410p:plain

Exercise 8 - Cutomer1-Author1ユーザでダッシュボードを確認する

1)Exercise 5で開いたCutomer1-Auther1の画面に戻ります。画面をリフレッシュすると、QSTCF-Dashboardが増えているはずです。

f:id:se_o_chan:20210907180139p:plain

2)Cutomer1-Author1はfull owner権限を付与されたので、この権限を使ってCutomer1-Reader1ユーザにもダッシュボードを共有してみます。QSTCF-Dashboardをクリックします。
3)画面右上の「共有」から「ダッシュボードの共有」を選択します。

4)まず共有先にDafaultと入力してみます。Default-Reader1ユーザはヒットしないはずです。これはDefault-Reader1ユーザがCutomer1 namespaceにいないためです。

5)次に共有先にCustomer-Reader1を選択し、「共有」ボタンを押します。

f:id:se_o_chan:20210907180606p:plain

カスタムアクセス許可

QuickSightには3つの標準的なユーザプロファイル(管理者・作成者・閲覧者)があります。カスタムアクセス許可は必要に応じてこれらのプロファイルを変更できます。

例えば、データセット・データソースはあるグループにしか作成させたくない、と言うケースはカスタムアクセス許可を設定することで実現できます。

1)管理者ユーザのQuickSight画面で、画面右上のユーザ名をクリックし「Quicksightの管理」を選択します。

2)画面真ん中の「アクセス許可を管理」をクリックします。

f:id:se_o_chan:20210907181235p:plain

3)「カスタムアクセス許可の管理」画面で「作成」ボタンをクリックします。

4)名前に「QSWS-CustomPermission」と入力します。下のチェックボックスからCreating or updating all data sourcesとCreating or updating all datasetsにチェックを入れます。

f:id:se_o_chan:20210907181619p:plain

5)「作成」ボタンをクリックします。その後QuickSightロゴをクリックして、ホーム画面に戻ります。

Exercise 2 - 今のアクセス権限を確認する

1)画面左のメニューから「データセット」をクリックし「新しいデータセット」のボタンがあることを確認します。

2)QSTCF-Datasetをクリックし、「データセットの編集」「データセットの複製」ボタンがあることを確認します。

3)画面右上のユーザ名をクリックし「Quicksightの管理」を選択します。

4)ユーザ名の「アクセス許可」の列には何も設定されていないことを確認します。

f:id:se_o_chan:20210907182051p:plain

Exercise 3 - 管理ユーザにカスタムアクセス権を適用する

1)Cloud9で、次のコマンドを実行し、管理ユーザにカスタムアクセス権限を適用します。

aws quicksight update-user --aws-account-id $AAI --namespace default --user-name $UN --role ADMIN --email $EML --custom-permissions-name QSWS-CustomPermission --region $IR

2)管理ユーザのQuickSight画面に戻り、画面をリフレッシュします。すると、管理ユーザのアクセス許可の列に「QSWS-CustomPermission」が追加されています。

f:id:se_o_chan:20210907182423p:plain

3)QuickSightロゴをクリックし、ホーム画面に戻ります。その後、画面左メニューから「データセット」を選びます。

4)遷移した画面に「新しいデータセット」ボタンが無いことを確認します。

f:id:se_o_chan:20210907182645p:plain

5)QSTCF-Datasetをクリックすると、「データセットの編集」「データセットの複製」ボタンが不活性化されていることを確認します。

f:id:se_o_chan:20210907182737p:plain

Exercise 4 - 管理ユーザからカスタムアクセス権限を削除する

1)Cloud9で、次のコマンドを実行し、unapply-custom-permissionsオプションを指定して管理ユーザからカスタムアクセス権限を削除します。

aws quicksight update-user --aws-account-id $AAI --namespace default --user-name $UN --role ADMIN --email $EML --unapply-custom-permissions --region $IR

2)管理ユーザ画面で、データセット画面やQSTCF-Datasetを確認すると各種ボタンが戻っているはずです。

コンテンツの移植

QuickSightのアセットはAPIを使うことで、リージョンやアカウントを跨いで移植することができます。

Exercise 1 - データソースのコピーを作る

1)Cloud9で、次のコマンドを実行し、create-data-sourceコマンドの仕様を確認します。概要セクションに必須・オプションの入力値が記載されています。

aws quicksight create-data-source help

f:id:se_o_chan:20210907183552p:plain

2)describe-data-sourceコマンドを実行し、QSRSF-DatasourceはS3データソースから作られていることを確認します。

aws quicksight describe-data-source --aws-account-id $AAI --data-source-id QSTCF-DataSource

f:id:se_o_chan:20210907184032p:plain

3)describe-data-source-permissionsコマンドを実行し、データソースに適用されているアクセス権限を確認します。

aws quicksight describe-data-source-permissions --aws-account-id $AAI --data-source-id QSTCF-DataSource

f:id:se_o_chan:20210907184256p:plain

4)次のコマンドを実行し、2)3)で確認したパラメータ/パーミッションをコピーしたデータソースを作ります。コマンド末尾のsedは無駄なスペースを削除し、trで改行を取り除いています。PythonJavaを使ってプログラミングする場合に有用な方法です。

aws quicksight create-data-source --aws-account-id $AAI --name QSTCF-DataSource-V2 --data-source-id QSTCF-DataSource-V2 --data-source-parameters `aws quicksight describe-data-source --aws-account-id $AAI --data-source-id QSTCF-DataSource|jq '.DataSource.DataSourceParameters'|sed 's/ //g'|tr -d '\n'` --type S3 --permissions `aws quicksight describe-data-source-permissions --aws-account-id $AAI --data-source-id QSTCF-DataSource|jq '.Permissions'|sed 's/ //g'|tr -d '\n'`

5)QuickSightのデータセットメニューで「新しいデータセット」ボタンをクリックします。

6)画面下部の「既存のデータセットから」にQSTCF-DataSource-V2というデータセットができているのが分かると思います。

f:id:se_o_chan:20210908163005p:plain

Exercise 2 - データセットのコピーを作る

1)下記コマンドを実行して、次のステップで実行するcreate-data-setコマンドのインプットとなるJSONファイル(create-data-set.json)を作成します。

echo ['{"AwsAccountId":"'$AAI'"}', `aws quicksight describe-data-set --aws-account-id $AAI --data-set-id QSTCF-DataSet`, `aws quicksight describe-data-set-permissions --aws-account-id $AAI --data-set-id QSTCF-DataSet` ] |jq '{"AwsAccountId":.[0].AwsAccountId,"DataSetId":(.[1].DataSet.DataSetId + "-V2"),"Name":(.[1].DataSet.Name + "-V2"),"PhysicalTableMap":.[1].DataSet.PhysicalTableMap,"LogicalTableMap":.[1].DataSet.LogicalTableMap,"ImportMode":.[1].DataSet.ImportMode,"Permissions":.[2].Permissions}|.PhysicalTableMap.s3PhysicalTable.S3Source.DataSourceArn=(.PhysicalTableMap.s3PhysicalTable.S3Source.DataSourceArn+"-V2")'>~/environment/create-data-set.json

2)作成したJSONファイルをインプットにcreate-data-setコマンドを実行して、データセットを作成します。

aws quicksight create-data-set --cli-input-json file://~/environment/create-data-set.json

3)QuickSightでデータセットメニューを更新すると、QSTCF-DataSet-V2のデータセットが作られていることが分かります。

f:id:se_o_chan:20210908164358p:plain

Exercise 3 - テーマのコピーを作成する

1)次のコマンドを実行して、次のステップで実行するcreate-themeコマンドのインプットとなるJSONファイル(create-theme.json)を作成します。

echo ['{"AwsAccountId":"'$AAI'"}', `aws quicksight describe-theme --aws-account-id $AAI --theme-id QSTCF-Theme`, `aws quicksight describe-theme-permissions --aws-account-id $AAI --theme-id QSTCF-Theme` ] |jq '{"AwsAccountId":.[0].AwsAccountId,"ThemeId":(.[1].Theme.ThemeId + "-V2"),"Name":(.[1].Theme.Name + "-V2"),"BaseThemeId":.[1].Theme.Version.BaseThemeId,"Configuration":.[1].Theme.Version.Configuration,"Permissions":.[2].Permissions}'>~/environment/create-theme.json

2)作成したJSONファイルをインプットにcreate-themeコマンドを実行して、テーマのコピーを作成します。

aws quicksight create-theme --cli-input-json file://~/environment/create-theme.json

3)QuickSightで既存で任意の分析を開き、画面左のテーマメニューを開くと、QSTCF-Theme-V2というテーマができているのが分かると思います。コピー元のSEASIDEと同じ定義になっています。

f:id:se_o_chan:20210908165019p:plain

Exercise 4 - テンプレートを作る

1)次のコマンドを実行して、次のステップで実行するcreate-templateコマンドのインプットとなるJSONファイル(create-template.json)を作成します。

echo ['{"AwsAccountId":"'$AAI'"}', `aws quicksight describe-analysis --aws-account-id $AAI --analysis-id QSTCF-Analysis`]|jq '{"AwsAccountId":.[0].AwsAccountId,"TemplateId":"QSTCF-Template-V2","Name":"QSTCF-Template-V2","SourceEntity":{"SourceAnalysis":{"Arn":.[1].Analysis.Arn,"DataSetReferences":[{"DataSetPlaceholder":"DS1","DataSetArn":.[1].Analysis.DataSetArns[0]}]}}}'>~/environment/create-template.json

2)作成したJSONファイルをインプットにcreate-templateコマンドを実行して、QSTCF-Analysisのスナップショットを作成します。もしこのテンプレートを使って別のアカウントがダッシュボードをつくるためには、quicksight:DescribeTemplate permissionでターゲットアカウントのrootを指定するか*(アスタリスク)でパブリックテンプレートにします。

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

3)テンプレートはUIで確認できないので、下記のCLIで確認します。

aws quicksight describe-template --aws-account-id $AAI --template-id QSTCF-Template-V2

f:id:se_o_chan:20210908165849p:plain

Exercise 5 - テンプレートからダッシュボードを作成する

1)次のコマンドを実行して、次のステップで実行するcreate-dashboardコマンドのインプットとなるJSONファイル(create-dashboard.json)を作成します。ここでSourceTemplateとして先ほど作ったQSTCF-Template-V2、ThemeArnとしてQSTCF-Theme-V2を指定しています。

echo ['{"AwsAccountId":"'$AAI'"}', `aws quicksight describe-template --aws-account-id $AAI --template-id QSTCF-Template-V2`, `aws quicksight describe-dashboard --aws-account-id $AAI --dashboard-id QSTCF-Dashboard`, `aws quicksight describe-dashboard-permissions --aws-account-id $AAI --dashboard-id QSTCF-Dashboard`]|jq '{"AwsAccountId":.[0].AwsAccountId,"DashboardId":(.[2].Dashboard.DashboardId+"-V2"),"Name":(.[2].Dashboard.Name+"-V2"),"SourceEntity":{"SourceTemplate":{"Arn":.[1].Template.Arn,"DataSetReferences":[{"DataSetPlaceholder":"DS1","DataSetArn":(.[2].Dashboard.Version.DataSetArns[0]+"-V2")}]}},"ThemeArn":(.[2].Dashboard.Version.ThemeArn+"-V2"),"Permissions":.[3].Permissions,"DashboardPublishOptions":{"AdHocFilteringOption":{"AvailabilityStatus":"DISABLED"}}}'>~/environment/create-dashboard.json

2)作成したJSONファイルをインプットにcreate-dashboardコマンドを実行して、ダッシュボードを作成します。

aws quicksight create-dashboard --cli-input-json file://~/environment/create-dashboard.json

3)QuickSightで、ダッシュボードメニューを開くとQSTCF-Dashboard-V2ができているのが分かります。

f:id:se_o_chan:20210908171007p:plain

Exercise 6 - テンプレートから分析を作る

1)1)次のコマンドを実行して、次のステップで実行するcreate-analysisコマンドのインプットとなるJSONファイル(create-analysis.json)を作成します。

echo ['{"AwsAccountId":"'$AAI'"}', `aws quicksight describe-template --aws-account-id $AAI --template-id QSTCF-Template-V2`, `aws quicksight describe-analysis --aws-account-id $AAI --analysis-id QSTCF-Analysis`, `aws quicksight describe-analysis-permissions --aws-account-id $AAI --analysis-id QSTCF-Analysis`]|jq '{"AwsAccountId":.[0].AwsAccountId,"AnalysisId":(.[2].Analysis.AnalysisId+"-V2"),"Name":(.[2].Analysis.Name+"-V2"),"SourceEntity":{"SourceTemplate":{"Arn":.[1].Template.Arn,"DataSetReferences":[{"DataSetPlaceholder":"DS1","DataSetArn":(.[2].Analysis.DataSetArns[0]+"-V2")}]}},"ThemeArn":(.[2].Analysis.ThemeArn+"-V2"),"Permissions":.[3].Permissions}'>~/environment/create-analysis.json

2)作成したJSONファイルをインプットにcreate-analysisコマンドを実行して、分析を作成します。

aws quicksight create-analysis --cli-input-json file://~/environment/create-analysis.json

3)QuickSightで、分析メニューを開くとQSTCF-Analysis-V2ができているのが分かります。

f:id:se_o_chan:20210908171359p:plain

SageMakerと統合する

QuickSightのSPICEデータセットのデータが更新されるたびにSageMakerをバッチ変換モードで実行し、QuickSightで可視化させることができます。

Exercise 1 - SageMakerロールを作成する

1)AWSマネジメントコンソールから、IAMコンソールを開きます。

2)左のパネルから「ロール」を選択します。

3)「ロールを作成」ボタンをクリックします。

4)サービスリストからSageMakerを選択し、「次のステップ:アクセス権限」ボタンをクリックします。

5)ロールはAmazonSageMakerFullAccessのまま、「次のステップ:タグ」ボタンをクリックします。

6)タグは特に設定せず、「次のステップ:確認」ボタンをクリックします。

7)ロール名に「SageMakerRoleForQuickSightWorkshop」を設定し、「ロールの作成」ボタンをクリックします。

Exercise 2 - SageMakerのモデルを作成する

ここでは前年の注文がSLAを満たしたか否かを示すデータセットを使います。

SLAを満たすか否かを決める要因として、その注文が行われた国・関係する営業チーム・実際の製品など多くの要素があり、未来の注文がSLAを満たす可能性が高いかをSageMakerの機械学習を使って予測します。

1)Cloud9で、SageMaker IntegrationフォルダにあるExercise2-1.pyのスクリプトを実行します。Model xxxxxxxxx created. Move on to next step as mentioned in workshop.と表示されたらOKです。

注意!!

このPythonスクリプトを実行すると下記のようなエラーになるかもしれません(少なくとも私がそうなった・・)。このスクリプトで作成するSageMakerモデルに先ほど作成したIAMロールを引き渡せていないからなので、一旦スクリプトをダイレクト修正することで対処します。

f:id:se_o_chan:20210908180434p:plain

スクリプト修正方法
以下のようにExercise2-1.pyの9行目をコメントアウトして、作成したIAMロールのARNを直指定しちゃいます。

f:id:se_o_chan:20210908180652p:plain

Exercise 3 - QuickSightがSagaMakerにアクセスできるようにする

1)管理ユーザでQuickSightを開き、右上のユーザ名をクリックして「QuickSightの管理」を選択します。

2)左のメニューから「セキュリティとアクセス権限」をクリックします。

3)「追加または削除する」ボタンをクリックします。

4)Amazon SageMakerのチェックボックスにチェックをいれて「更新」ボタンを押します。

Exercise 4 - データセットを作る

1)QuickSightのデータセットメニューから、SaaS-Salesデータセットをクリックします。

2)「データセットの複製」ボタンをクリックします。

3)データセットの末尾に「-SM」を追記して「複製」ボタンをクリックします。

4)SaaS-Sales-SMデータセットをクリックし「データセットの編集」ボタンをクリックします。

Exercise 5 - SageMakerでオーグメントする

1)こちらからモデルの入力、出力フィールドおよびモデルを実行するインスタンスタイプ等の指定をしたファイルをダウンロードします。

2)Exercise 4で開いたSaaS-Sale-SMデータセットの画面で「SageMakerによるオーグメント」ボタンをクリックします。

3)モデルのドロップダウンから先ほどスクリプトで作成したSageMakerの「QSWS-OrderCompletionSLAPredicton」を選択します。

4)スキーマのテキストボックスをクリックし、先ほどダウンロードしたOrderCompletionSLASchema.jsonファイルを選び「アップロード」ボタンをクリックします。

f:id:se_o_chan:20210908182405p:plain

5)入出力のフィールドが読み取られるので「次へ」ボタンを押します。

6)「入力を確認」画面で同じ名前のフィールドがマッピングされていることを確認して「次へ」ボタンをクリックします。

f:id:se_o_chan:20210908182541p:plain

7)「出力を確認」画面で、「データの準備」ボタンをクリックします。

8)これでデータセットの末尾に「Will SLA be met?」という名前のフィールドが追加されました。右上の「保存」ボタンをクリックします。すると裏でSageMakerのモデルが動き始めます。

Exercise 6 - 予測を見る

1)QuickSightのデータセットメニューで、SaaS-Sales-SMデータセットをクリックします。

2)データセットの更新が終わっていることを確認します。もし終わっていなければ数分待ちます。

f:id:se_o_chan:20210908183324p:plain   f:id:se_o_chan:20210908183707p:plain

3)「分析の作成」ボタンをクリックします。

4)ビジュアルタイプから「テーブル」を選択します。

5)フィールドリストからOrder Date、Order ID、Will SLA be met?を選択します。

6)Order Dateを降順に並べ替えると、2021年の未来日のデータが出てきます。これらに対するWill SLA be met?はSageMakerによって導き出された予測結果です。 

f:id:se_o_chan:20210908184157p:plain

まとめ

前回同様、非常に長くなりましたが、これで管理者ワークショップは完了です。

全体通じてQuickSight CLIを使ってQuickSight環境のメンテナンスを行いました。

個人的にはCloud9をほとんど使ったことが無かったので、その感触も一緒につかめたのが良かったです。

またQuickSightのUIではできず、CLIでしか行えない操作(マルチテナントの作成、ユーザのマッピングなど)があることも学習できました。

次は「Anonymous Embedding(匿名での埋め込み)」で、LambdaやAPIGatewayと統合したダッシュボードの公開方法を学びます。

ブログランキング・にほんブログ村へにほんブログ村PVアクセスランキング にほんブログ村