記事の内容
本記事はAmazon Q Developerを活用しながら、Amazon Quick FlowsのコンソールUIとAPIの両面を実測した内容をまとめています。コンソール操作の手順紹介だけでなく、裏側のAPIでできること・できないことまで踏み込んでお伝えします。
記事の流れ
在庫に関する簡単なサンプルデータを用いて、再注文の閾値を下回っているかを判定して
ログを出力するような簡単なフローを作ってみます
コンソール操作でのデモを行った後、boto3 APIを用いてコンソール操作の裏側(できること・できないこと)を実測で明らかにします。さらに発展形として、AIの精度を高めるデータモデリングの手法についても解説します。
使用するデータ
使用するデータは以下で、在庫に関する簡単なサンプルデータとなります
inventory
inventory.csv
| Category | Item | Quantity | Reorder Point | Description | Search URL |
|---|---|---|---|---|---|
| Electronics | Laptops | 150 | 50 | Portable computing devices | https://www.google.com/search?q=Laptops |
| Stationery | Printers | 76 | 20 | Devices for printing documents | https://www.google.com/search?q=Printers |
| Machinery | Conveyor belts | 12 | 3 | Mechanisms for moving items efficiently | https://www.google.com/search?q=Conveyor+belts |
| Supplies | LED lights | 700 | 200 | Lighting solutions | https://www.google.com/search?q=LED+lights |
| Furniture | Chairs | 130 | 30 | Seating solutions | https://www.google.com/search?q=Chairs |
| Vehicles | Forklifts | 6 | 2 | Industrial lifting equipment | https://www.google.com/search?q=Forklifts |
| Equipment | Power drills | 40 | 10 | Tools for drilling holes | https://www.google.com/search?q=Power+drills |
| Tools | Hammer | 200 | 60 | Tool for driving nails | https://www.google.com/search?q=Hammer |
| Apparels | Uniforms | 500 | 150 | Clothing worn for identification or safety | https://www.google.com/search?q=Uniforms |
| Sanitation | Sanitizers | 1000 | 300 | Products for maintaining hygiene | https://www.google.com/search?q=Sanitizers |
| Stationery | Ink Cartridges | 5 | 20 | Replacement ink for printers | https://www.google.com/search?q=Ink+Cartridges |
| Supplies | Masks | 50 | 200 | Protective face masks | https://www.google.com/search?q=Masks |
| Electronics | Monitors | 2 | 5 | Desktop display units | https://www.google.com/search?q=Monitors |
Flows作成手順
- Quickのトップページ左メニューから「スペースを作成する」を実行し、inventory.csv をアップロードします。スペースはQuickのRAG機能の実体であり、S3のPDFや社内文書など様々なデータソースに対応しています。

- 左のナビゲーションから「フロー」→「フローを作成」を選択します。対話画面が開くので、「スペースの内容を読み取り、再注文が必要な項目を割り出してログ出力、週1回実行」と自然言語で指示します。

- 右上でエディタから実行モードに切り替え、デバッグ実行でフローが意図した挙動をするか確認します。

生成されたログが以下となります
# 再注文必要商品 詳細ログ ================================================================================ 再注文ログレポート ================================================================================ [実行日時] 2024年12月19日 生成 [サマリー] - 総商品数: 13商品 - 再注文必要商品数: 3商品 - 正常在庫商品数: 10商品 ================================================================================ 再注文必要商品詳細 ================================================================================ [商品 #1] ⚠️ 緊急 --------------------------------------------------- 商品名 : Monitors 現在在庫数 : 2個 ReOrderPoint : 5個 不足数 : -3個 在庫充足率 : 40.0% 緊急度 : 最高 (在庫ほぼ枯渇) --------------------------------------------------- [商品 #2] ⚠️ 緊急 --------------------------------------------------- 商品名 : Ink Cartridges 現在在庫数 : 5個 ReOrderPoint : 20個 不足数 : -15個 在庫充足率 : 25.0% 緊急度 : 高 (発注点の1/4以下) --------------------------------------------------- [商品 #3] ⚠️ 緊急 --------------------------------------------------- 商品名 : Masks 現在在庫数 : 50個 ReOrderPoint : 200個 不足数 : -150個 在庫充足率 : 25.0% 緊急度 : 高 (大量不足) --------------------------------------------------- ================================================================================ 推奨アクション ================================================================================ 1. 【最優先】Monitors: 即時発注手配が必要 2. 【優先】Ink Cartridges: 早急な補充が必要 3. 【優先】Masks: 大量発注の手配が必要 ================================================================================ ログ終了 ================================================================================
また、ログのダウンロードもUIで提供されています。
外部コネクタ連携(Slack等)
SlackなどのコネクタはコンソールのConnectorsタブから設定できます。フロー実行結果をそのままSlackチャンネルへ通知することが可能です。なお、コネクタのアクション設定には Quick の管理者権限が必要なため、権限エラーが出た場合はIAMロールの quicksight:* 権限を確認してください。
boto3 APIでコンソール操作の裏側を実測する
ここまでのコンソール操作を実際に試しながら、「この処理はAPIでも実現できるのか?」を Amazon Q Developer と一緒に検証しました。Quick Flowsは比較的新しい機能であり、できること・できないことの境界をAPIレベルで把握しておくことが自動化設計の出発点になります。
Amazon Q Developer による自律的なAPI探索プロセス
Amazon Q Developer は単なるコード補完ではなく、「コード生成 → 実行 → エラー観察 → 原因特定 → 修正案提示」のループを自律的に回す AWS の Agentic AI ツールです。今回の boto3 検証でも、このループが複数回まわりました。以下は describe_data_set の制約を発見・回避するまでの実際のプロセスです。
【ステップ1】Q Developer が初期実装を生成
「CSVデータセットから列情報を取得したい」という指示に対し、Q Developer が以下のコードを提案しました。
response = qs.describe_data_set(
AwsAccountId=account_id,
DataSetId=dataset_id
)
columns = response['DataSet']['PhysicalTableMap']
【ステップ2】実行 → エラー観察
実行すると以下のエラーが返りました。
botocore.exceptions.ClientError: An error occurred (InvalidParameterValueException) when calling the DescribeDataSet operation: File source type is not supported in Public API
【ステップ3】Q Developer が原因を特定 → 代替アプローチを提案
Q Developer がエラーメッセージを解析し、次のように診断しました。
「コンソールのCSVアップロードで作成したデータセットは
File source扱いとなり、describe_data_setPublic API の対象外です。同じデータセットを参照しているトピックが存在する場合、describe_topic経由で列情報を取得できます。代替実装を生成します。」
【ステップ4】修正コード生成 → 再実行で解決
Q Developer が提案した回避策が動作し、制約の境界線を確定できました。このように Q Developer はエラーを入力として次の判断を自律的に生成するAgentic AIとして機能しています。
ファイルソース系データセットの制約とワークアラウンド
コンソールのCSVアップロードで作ったデータセットは describe_data_set API で列情報を取得できません。
InvalidParameterValueException: File source type is not supported in Public API
代わりに、同じデータセットを参照している既存トピックから describe_topic 経由で列情報を引き回す方法が有効です。
def get_columns_from_existing_topic(aws_account_id, dataset_arn):
topics = qs.list_topics(AwsAccountId=aws_account_id).get('TopicsSummaries', [])
for t in topics:
r = qs.describe_topic(AwsAccountId=aws_account_id, TopicId=t['TopicId'])
for ds in r['Topic'].get('DataSets', []):
if ds['DatasetArn'] == dataset_arn and ds.get('Columns'):
return ds['Columns']
return []
計算フィールドをAPIで定義する
コンソールの「計算フィールドを追加」操作は create_topic の CalculatedFields に対応します。
calculated_fields = [
{
'CalculatedFieldName': 'Shortage',
'CalculatedFieldDescription': '再注文点を下回っている不足数',
'Expression': '{Reorder Point} - {Quantity}',
'CalculatedFieldSynonyms': ['不足数', '足りない数量'],
'IsIncludedInTopic': True,
'ColumnDataRole': 'MEASURE',
}
]
qs.create_topic(
AwsAccountId=account_id,
TopicId='inventory-topic',
Topic={
'Name': 'Inventory-Topic',
'UserExperienceVersion': 'NEW_READER_EXPERIENCE',
'DataSets': [
{
'DatasetArn': dataset_arn,
'DatasetName': 'Inventory Dataset',
'Columns': columns,
'CalculatedFields': calculated_fields,
}
]
}
)
コンソール操作との対応:
| コンソール | API |
|---|---|
| 計算フィールドを追加 | CalculatedFields に式を渡す |
| 数式(Reorder Point – Quantity) | Expression: '{Reorder Point} - {Quantity}' |
| シノニム(不足数) | CalculatedFieldSynonyms |
| トピックに含める | IsIncludedInTopic: True |
Quick Flows API — できること・できないこと
boto3 で Quick Flows を操作できる範囲を実測で確認しました。

利用可能なAPI:
qs = boto3.client('quicksight', region_name='ap-northeast-1')
# フロー一覧の取得
flows = qs.list_flows(AwsAccountId=account_id)['FlowSummaryList']
for flow in flows:
print(flow['Name'], flow['PublishState'], f"実行回数: {flow['RunCount']}")
# フロー詳細の取得
meta = qs.get_flow_metadata(AwsAccountId=account_id, FlowId=flow_id)
# 権限の確認・変更
perms = qs.get_flow_permissions(AwsAccountId=account_id, FlowId=flow_id)
list_flows で取得できる情報には RunCount(実行回数)や PublishState(PUBLISHED/DRAFT)が含まれており、モニタリング用途に活用できます。
APIでは実行できない操作:
| 操作 | 結果 |
|---|---|
| フローの作成 | Public APIなし(コンソール必須) |
| フローのプログラム実行 | StartFlowSession は内部セッションAPIのため不可 |
| フロー定義の取得 | 定義内容(プロンプト等)はAPIで取得不可 |
フローの作成・実行はコンソール操作が必要です。一方で一覧取得・権限管理はAPI化可能という境界を把握しておくと、自動化の設計に役立ちます。
なぜフロー作成・実行は Public API で操作できないのか
Quick Flows はQuickSightの中でも新しいAgentic機能であり、フロー実行は認証済みユーザーのブラウザセッションコンテキスト(StartFlowSession)を必要とします。このセッションはコンソールからインタラクティブに確立されるものであり、サービス側がユーザーの意図確認・権限スコープの動的評価を行うため、boto3 SDK の呼び出しだけでは確立できない設計になっています。
IAMポリシー上は quicksight:StartFlowSession アクションが定義されているものの、これはコンソール内部のセッション管理用です。Amazon Q Business など、マネージドAI機能全般で「フロー設計はコンソール、運用監視はAPI」という役割分担になっているパターンと共通します。
実務上の設計方針: フローの作成・実行はコンソール操作として人間が担い、API側では「モニタリング(list_flows の RunCount / PublishState)」と「権限管理(get_flow_permissions)」に集中する設計が現実的です。
一歩進んだデータ加工:Caliculated Field
こちらもお好みですが、さらに精度を高める際には、データ分析の観点を取り入れてあげると
AIの判断やフローをより確実なものとできます。
そういう観点で元データをみると
CSVには Quantity(在庫数) と Reorder Point(発注点) はありますが、
「あと何個足りないか」の列はありません。そこでトピック側に計算フィールドを作ります。
これをFlowsのプロンプト(指示文)だけで「不足している数を計算して出力して」とAIに丸投げすることも可能ですが、AIの解釈のブレによって計算が漏れたり、フォーマットが不安定になったりするリスク(プロダクション環境での課題)が残ります。
そこで、AI側に頑張らせるのではなく、参照元のナレッジベース(トピック)側であらかじめ「計算フィールド」として定義しておくというベストプラクティスをご紹介します。
トピック側での仕込み設定
対象トピックの 「Data(データ)」 タブを開き、右上の 「Add calculated field(計算フィールドの追加)」 をクリックします。
以下のようにビジネスロジックを定義します。
フィールド名(Field name): Shortage シノニム(Synonyms): 不足数, 足りない数量 計算式(Expression): Reorder Point - Quantity
データの変化(Before / After)と効果
この先回りのデータモデリングを行うことで、出力されるログ(あるいはSlack通知)のクオリティに明確な差が出ます。
Before(設定前):
AIが「発注点を下回っているか」の判定だけで手一杯になり、ログにはただ対象の商品名が並ぶだけ。担当者は「で、結局それぞれ何個発注すればいいの?」をデータソースに確認しに行く手間が発生する。
After(設定後):
あらかじめ定義した Shortage をAIが正しく認識し、「どの商品が、あと何個不足しているか」が正確に、かつ「緊急度の高い順(不足数が多い順)」にソートされた、現場がそのまま発注処理に使える極めて実用的なログ・通知が確実に生成されるようになります。
計算フィールドを活用する場合は、単純にスペースにcsvをアップロードする形ではなく、
データセットにcsvをアップロード、トピックにルールを設定する必要があります。
その手法はもう一つのビジュアライズの記事でご確認ください。
計算済みフィールドに以下のように差分の計算式を格納し、プレビューの値(画面下)
もイメージ通りであることを確認します


フロー上で扱うデータをスペースのcsv直接ではなく、トピックにしてあげることが必要です

AIでの解釈もずれづらくなり、表もイメージ通り作成できていることがわかります!

最後にQuickのデータフロー構造おさらい
上記の発展情報では下記のセマンティック・Topic層、及び決定論的ロジックでのフローの補強を行なった形となります。
+-------------------------------------------------------------+
| データインジェスト層 |
| Space(RAGリポジトリ:CSV等のファイルを格納) |
+------------------------------+------------------------------+
|
| データ参照
v
+-------------------------------------------------------------+
| AIフロー実行・制御層 |
| Amazon Quick Flows (自然言語による処理ロジックの定義) |
+------------------------------+------------------------------+
|
| 決定論的ロジック(計算フィールド)
v
+-------------------------------------------------------------+
| セマンティック・Topic層 |
| データ層における数式・シノニム定義 |
+------------------------------+------------------------------+
|
| Slack Webhook / Connector
v
+-------------------------------------------------------------+
| 通知・連携層 |
| 外部チャネル(Slack等) |
+-------------------------------------------------------------+
データインジェスト層(Spaces): ナレッジベースの役割を果たす「Space」を定義し、検証データである inventory.csv を格納する 。本番環境では、Amazon S3やSharePoint、Box等の外部エンタープライズシステムと連携したRAG(Retrieval-Augmented Generation)基盤としてスケール可能である 。
AIフロー実行・制御層(Quick Flows): 自然言語によって定義された「何が発注点を下回っているか」を判定する命令フローを実行する 。週次の実行スケジュールが設定されている 。
セマンティック・Topic層(計算フィールド): 単なる自然言語命令から、Dataset-to-Topic構造へ移行し、計算フィールドを活用した安定的な意思決定ロジックを構成する 。
通知・連携層(外部コネクタ): 管理者権限を付与されたSlackコネクタを通じて、最終的な処理結果を運用チャネルに配送する。
boto3 APIで判明した Quick Flows の制約まとめ
| 項目 | 制約・落とし穴 | 対処 |
|---|---|---|
| フロー作成 | Public API なし(コンソール必須) | フロー設計は人間がコンソールで行う |
| フロー実行 | StartFlowSession はブラウザセッション依存のため boto3 不可 |
実行もコンソール or スケジュール設定で対応 |
| フロー定義の取得 | プロンプト内容など定義はAPIで取得不可 | コンソールで確認するしかない |
describe_data_set |
CSVアップロード系データセットは File source type is not supported |
describe_topic 経由で列情報を引き回す |
| 計算フィールド | コンソール操作と API(CalculatedFields)は対応しているが IsIncludedInTopic: True を忘れると反映されない |
明示的に True を設定する |
| モニタリング | list_flows の RunCount / PublishState でフローの稼働状況を監視可能 |
CI/CDや監視ツールからのAPI呼び出しに活用できる |
本記事では、Amazon Q Quick Flows を boto3 API で実測し、コンソール操作との境界線を明らかにしました。実装に取り組む際のポイントを以下に整理します。
コンソールが必須の操作(APIでは代替不可)
– フローの作成・設計:Public API が存在しないため、コンソールでの人手による設計が前提
– フローの実行:StartFlowSession はブラウザセッション依存のため boto3 からは呼び出し不可
– フロー定義の確認:プロンプト内容などの定義はAPIで取得できないため、コンソールで直接確認する
APIで自動化できる操作
– list_flows による稼働状況のモニタリング(RunCount / PublishState)
– get_flow_permissions による権限管理
– トピックへの計算フィールド追加(CalculatedFields に IsIncludedInTopic: True を明示することが必須)
実装方針として「フローの設計・実行はコンソール(人間が担当)、運用監視と権限管理はAPI(自動化)」という役割分担を採用することが、Quick Flows 自動化の現実的なアーキテクチャです。CI/CD パイプラインや Slack アラート連携を検討している場合は、list_flows の RunCount と PublishState を起点にした監視設計から始めると、段階的な自動化がしやすくなります。
合わせてQuickSight Qのトピック自動作成についても関連記事を執筆しているので、こちらも興味があればご確認ください。
Amazon Quick のAIによるビジュアライズ生成機能