🔥

【Quick Suite】Amazon Quick Suiteの機能を触ってみる ~Quick Automate 編~

に公開

先日の10月10日にAmazon QuickSightがリブランディングされて、Amazon Quick Suiteに進化しました。
https://aws.amazon.com/jp/blogs/news/reimagine-business-intelligence-amazon-quicksight-evolves-to-amazon-quick-suite/

そのタイミングでいくつかの追加機能がありますので、触ってみます。

今回はこちらのサイドバーにある、QUICK AUTOMATEを触ってみます。

前回まで触った話は、下記の記事でまとめていますので必要であればご確認ください。
https://zenn.dev/marche/articles/3bf561f927936b
https://zenn.dev/marche/articles/1780b03f2844c1

S3との連携については、こちらを参考にしております。
https://catalog.us-east-1.prod.workshops.aws/workshops/01d20dfe-3c37-4b6c-98c5-fd5a0d220a12/ja-JP/50-quick-automate

今回の達成目標

e-StatのAPIを使用して、最新の北海道人口を取得し、そのデータをエクセルにまとめてS3にアップロードする

です。それではやっていきましょう。

下準備

e-StatのAPIの取得方法などは割愛します。
https://www.e-stat.go.jp/api/api-info/api-spec

S3バケットも適当なバケットをus-east-1で作成しています。説明する下準備は以下の4つです。

  1. IAM Roleの作成
  2. Integrationsの設定
  3. AWS Actionsの設定
  4. 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 typeNONEにします。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のサイドバーにいろいろ出来そうなものがあります。下準備で紐づけたアクションが赤枠のここに出てきています。何も紐づけていない場合はここに出てきません。

フローの流れ

大雑把に言うと、下記の流れでフローを組みます。

  1. REST APIでGETする
  2. データを整形する
  3. Excelを作成して、データを格納する
  4. S3にアップロードする

REST APIでGETする

サイドバーのREST APIからGETを選択してドラッグ&ドロップしてフローにもっていきます。

Propertiesを入力していきます。

  • Q action connector id
    • 連携したREST APIのActionを選択します。
  • URI
    • 設定したときに入力したBASE URI以降のURIを入力します。
  • Request
    • 今回は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を作成して、データを格納する

流れは以下の通りです。

  1. Open new file: Excelファイルを開く
  2. Add row: ヘッダーを入力する
  3. Loop through items: データの中の年度分ループする
  4. Custom code block: 値のみを抽出する
  5. Add row: エクセルに行としてデータを追加する
  6. 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を入力する

これでフローは完成です。


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

完了すると、



こんな感じです。

さいごに

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

Chat Assistantもついているので、やりたいことを入力すると勝手にフローを構築してくれたりもします。

Discussion