【Quick Suite】Amazon Quick Suiteの機能を触ってみる ~Quick Automate 編~
先日の10月10日にAmazon QuickSightがリブランディングされて、Amazon Quick Suiteに進化しました。
そのタイミングでいくつかの追加機能がありますので、触ってみます。

今回はこちらのサイドバーにある、QUICK AUTOMATEを触ってみます。
前回まで触った話は、下記の記事でまとめていますので必要であればご確認ください。
S3との連携については、こちらを参考にしております。
今回の達成目標
「e-StatのAPIを使用して、最新の北海道人口を取得し、そのデータをエクセルにまとめてS3にアップロードする」
です。それではやっていきましょう。
下準備
e-StatのAPIの取得方法などは割愛します。
S3バケットも適当なバケットをus-east-1で作成しています。説明する下準備は以下の4つです。
- IAM Roleの作成
- Integrationsの設定
- AWS Actionsの設定
- Manage groupsでActionsを紐づけ
IAM Roleの作成(S3との連携のため)
IAM Roleはカスタム信頼ポリシーを選択し、下記のポリシーを入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "quicksight.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

ポリシーは、S3のフルアクセスをアタッチしてください。最小権限であればPutObjectでいいと思います。

その状態でIAM Roleを作成して、作成されたIAM RoleのARNをメモっておいてください。後で使用します。
Integrations (REST API)
Quick AutomateでREST APIを使用するための設定を行います。
IntegrationsのページでREST API connectionを選択します。

Nameに適当な名前を付け、Service authenticationを選択し、Authentication typeをNONEにします。Base URLに
https://api.e-stat.go.jp
を入力してNextを押します。

使用できるactionsが出てくるので、Create and continueを押し、Shareの設定はいったん何もせずに、Nextを押します。そうすると、問題なければ成功しActionsの欄にREST APIが出てきます。

AWS Actions(S3)
Quick AutomateでS3を使用するための設定を行います。
Quick Suiteの管理画面側にある、AWS Actionsを選択します。

新しいアクションを選択します。

Amazon S3を選択して、Nextを押します。使用できるActionが表示されるので、そのままNextを押します。

Connection detailsの画面で、適当なアクション名をつけ、先ほど作成したIAM RoleのARNを入力します。

共有先の選択が必須なので、現在Quick Suiteで使用している自分のアカウントのメールアドレスなどを入力して、出てきたアカウントを選択して追加します。

Manage groups
IntegrationsやAWS Actionsで設定したものを、Quick Automateで使用するための紐づけ作業を行います。
Quick AutomateのProjectを開き、右上のManage groupsを選択します。そこで表示される一覧の中に、自分のアカウントのgroupsがあると思いますので、そちらをクリックします。

すると、現在紐づいているAssets一覧の画面に映りますので、Addを押しActionsを選択します。

下準備設定した、IntegrationsやAWS Actionsが表示されると思いますので、それを選択してAddを押して追加します。

すると、Assetsの一覧に追加されます。

これで、Quick AutomateでIntegrationsやAWS Actionsで設定したActionが利用可能になります。
QUICK AUTOMATE
projectの立ち上げ
まず、Projectsを選択して、Create projectを押します。

立ち上がってきたModalに適当な名前とGroupを選択して、Createを押します。

なにやら、Overviewの画面が立ち上がってきました。とりあえずそのまま、Start buildingを押します。

すると、Flowsの時のような、何を作るかを入力する画面が出てきます。今回はSkipしておきます。

ローディングが終わると、下記のようなStep Functionsみたいな画面が立ち上がります。

Actionsのサイドバーにいろいろ出来そうなものがあります。下準備で紐づけたアクションが赤枠のここに出てきています。何も紐づけていない場合はここに出てきません。

フローの流れ
大雑把に言うと、下記の流れでフローを組みます。
- REST APIでGETする
- データを整形する
- Excelを作成して、データを格納する
- S3にアップロードする
REST APIでGETする
サイドバーのREST APIからGETを選択してドラッグ&ドロップしてフローにもっていきます。

Propertiesを入力していきます。
- Q action connector id
- 連携したREST APIのActionを選択します。
- URI
- 設定したときに入力したBASE URI以降のURIを入力します。
- Request
- 今回はBodyに何も必要ないので、
{}を入力します。
- 今回はBodyに何も必要ないので、
- Output Variable
- APIのリクエスト結果を格納する変数名を入れます。

データを整形する
取得したJSON形式のリクエスト結果をそのままアップロードしてもよかったのですが、せっかくなんで、いろいろ触るためデータ整形を行います。
サイドバーから、Custom agentを選択してドラッグ&ドロップします。

Custom agentはInstructionに指示文を入れておけば、よしなに作業をしてくれるようです。
今回は、APIでとってきたJSONをきれいにまとめるという作業をしてもらいます。
Instructionに
str(result_message) + "から北海道の直近5年分の人口データを各年度別でまとめて出力してください。"
と入力します。e-Statからの結果に関しては、整形テストのため50年分のデータがあったり、必要ない日本人の総人口などのデータも含まれているので、そのデータから必要なものを抽出し整形するというのを、あえて生成AIでやろうとしています。
Structured outputに欲しい出力を指定します。

Agent responseに出力結果を格納する変数名を入力します。
最終的には、こんな感じ。

整形されたデータの形式は以下の通りです。
{
"populations": [
{ "total_populations": 5043000, "total_populations_Male": 2382000, "total_populations_Female": 2661000, "year": 2024 },
{ "total_populations": 5092000, "total_populations_Male": 2405000, "total_populations_Female": 2688000, "year": 2023 },
{ "total_populations": 5140000, "total_populations_Male": 2427000, "total_populations_Female": 2714000, "year": 2022 },
{ "total_populations": 5183000, "total_populations_Male": 2446000, "total_populations_Female": 2737000, "year": 2021 },
{ "total_populations": 5224614, "total_populations_Male": 2465088, "total_populations_Female": 2759526, "year": 2020 }
]
}
ちなみに今回は設定しませんでしたが、Agentにツールを持たせるようなイメージで、このAgentにActionsの付与することができます。ここでいうActionsとは、IntegrationsやAWS Actionsで設定したものも含みます。
Excelを作成して、データを格納する
流れは以下の通りです。

- Open new file: Excelファイルを開く
- Add row: ヘッダーを入力する
- Loop through items: データの中の年度分ループする
- Custom code block: 値のみを抽出する
- Add row: エクセルに行としてデータを追加する
- Save file as: エクセルを保存する

Loop through itemsで、Collection of itemsに、
agent_output["populations"]
と入力することで、整形されたデータからリストの部分を抽出しています。
Custom code blockで何をしているかというと、前段のLoop through itemsから渡される各年度のJSONデータが下記のように引き渡されるので、
{
'total_populations': 5043000,
'total_populations_Male': 2382000,
'total_populations_Female': 2661000,
'year': 2024
}
[12345678, 20000, 20000, 2024]に変換して、エクセルにAdd rowしやすい形にしています。

Custom code block
S3にアップロードする
ActionsのサイドバーからUpload fileを選択します。
Propertiesの各項目を入力します。
- Q action connector id
- 下準備で連携したS3のアクションを選択します
- File
- 保存したエクセルを入力する
- Bucket
- エクセルの保存先のS3 Bucket名を入力する
- Key
- Keyを入力する
- Keyを入力する
これでフローは完成です。


Debugを押して動きを試してみましょう。

完了すると、



こんな感じです。
さいごに
かなりフローの構築までに苦戦しましたが、手作業で何とかできました。S3にアップロードさえできればSPICEにとりこんで、Quick Sightで表示するとかも簡単なので、定期的に外部からデータの更新をするみたいな運用はできる可能性がありそうです。まだまだ使用していないアクションもいっぱいあるので、どこかで触ってみたいと思います。UI agentあたりはWEBページからの情報取得をやってくれるようなので、試してみたいと思います。
Chat Assistantもついているので、やりたいことを入力すると勝手にフローを構築してくれたりもします。

Discussion