Amazon Quick Flow で生成したデータを S3 バケットに自動書き込みしてみた

Amazon Quick Flow で生成したデータを S3 バケットに自動書き込みしてみた

Amazon Quick Flow で予測データを S3 に自動保存したいというニーズから、OpenAPI カスタムコネクタを使った実装方法を試してみました。標準機能の制限を突破するアプローチを紹介します。
2026.07.19

いわさです。

前回の記事で、Amazon Quick の Flow と Automation を使って「データセット Q&A で予測生成 → S3 に書き込み」を自動化しようとしたところ、標準機能の組み合わせでは実現できないことがわかりました。

https://dev.classmethod.jp/articles/quick-flow-automation-datasetqa-to-s3/

Flow は外部 SaaS コネクタ(Google Drive、Slack 等)しかアクションで使えず、AWS サービスコネクタ(S3)は Automation のみ対応。
一方で Automation はデータセット Q&A が使えない、という状況でした。

ただ、アクションコネクタ互換性のテーブルを見ると、カスタムコネクタの「OpenAPI」は Flow でサポートされています。

https://docs.aws.amazon.com/quick/latest/userguide/action-connector-apis-supported-types.html

カスタムコネクタ Chat Agents Flows Automations
OpenAPI ✓ ✓ —
REST API — — ✓
MCP ✓ ✓ ✓

つまり、S3 書き込み用の API を自前で用意して OpenAPI コネクタとして Quick に登録すれば、Flow 内で予測生成から S3 書き込みまで完結できるのでは?ということで試してみました。
なお、MCP サーバーも Flow で使えるので、そちらでも同じアプローチが取れそうです。
今回こちらを確認してみたので紹介します。

実際に確認してみる

Lambda 関数の作成

まず、CSV テキストを受け取って S3 に書き込む Lambda を作成します。

lambda_s3_upload.py
import boto3
import json

s3 = boto3.client('s3')

BUCKET = 'hoge0713iwasa'
KEY = 'demo/forecast/ticket_sales_forecast.csv'

def handler(event, context):
    body = event.get('body', '{}')

    try:
        payload = json.loads(body)
        csv_content = payload.get('csv_content', body)
    except (json.JSONDecodeError, TypeError):
        csv_content = body

    s3.put_object(
        Bucket=BUCKET,
        Key=KEY,
        Body=csv_content.encode('utf-8'),
        ContentType='text/csv; charset=utf-8'
    )

    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'application/json'},
        'body': json.dumps({'message': 'uploaded', 'bucket': BUCKET, 'key': KEY})
    }

IAM ロールは s3:PutObject のみ許可しています。

API Gateway の作成

REST API を作成し、POST /upload で Lambda を呼び出すように設定します。
認証は今回はデモ検証用なので設定なしにしています。

curl -s -X POST "https://zmg1gsvj38.execute-api.ap-northeast-1.amazonaws.com/prod/upload" \
  -H "Content-Type: application/json" \
  -d '{"csv_content": "event_date,day_of_week\n2026-07-17,金"}'
{"message": "uploaded", "bucket": "hoge0713iwasa", "key": "demo/forecast/ticket_sales_forecast.csv"}

API 側の準備は完了です。

OpenAPI スキーマの作成

Quick の OpenAPI コネクタに登録するスキーマを作成します。
検証の中で色々とトライアンドエラーがありまして、そこからわかったポイントは以下です。

  • components.securitySchemes を空でも定義する(ないとバリデーションエラーになる)
  • Content-Type は application/json にする(text/plain は非対応)
  • リクエストボディは csv_content プロパティに CSV テキストを入れる形式
openapi_s3_upload.json
{
  "openapi": "3.0.3",
  "info": {
    "title": "Ticket Sales Forecast Upload API",
    "description": "Upload forecast CSV to S3 via API Gateway + Lambda",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://zmg1gsvj38.execute-api.ap-northeast-1.amazonaws.com/prod"
    }
  ],
  "components": {
    "securitySchemes": {}
  },
  "paths": {
    "/upload": {
      "post": {
        "operationId": "uploadForecastCsv",
        "summary": "Upload forecast CSV to S3",
        "description": "Receives CSV content as JSON and uploads it to S3",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "csv_content": {
                    "type": "string",
                    "description": "CSV text including header row and data rows"
                  }
                },
                "required": ["csv_content"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Upload successful",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "message": { "type": "string" },
                    "bucket": { "type": "string" },
                    "key": { "type": "string" }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Quick に OpenAPI コネクタを登録

Quick コンソールの Connectors 画面で OpenAPI Specification コネクタを作成します。

FA4BE1FD-B556-40BB-888F-4D36D3E2AA3B.png

設定値はこちらです。

  • 名前: forecast-s3-upload
  • 接続タイプ: パブリックネットワーク
  • Auth configuration: None
  • ベース URL: https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod

Quick Flow の構築

Flow のステップ構成は以下のようにしました。

  1. チャットエージェント: カスタムエージェント(データセット Q&A)で予測 CSV を生成
  2. アクション: OpenAPI コネクタ(forecast-s3-upload)で S3 に書き込み

509A4860-35FD-432A-A124-7B39C63F7E9F_1_105_c.jpeg

アクションステップのコネクタ選択で、登録した OpenAPI コネクタが表示されるようになりました。

フローの実行

フローを実行すると、まずチャットエージェントが予測 CSV を生成します。

0BB07F9D-0635-4CFF-B8C3-AD0AEEA0EC67.png

続いてアクションステップに進むと、生成された CSV が csv_content フィールドに入った状態で確認画面が表示されます。

BE5688E0-1510-4C35-8AB9-B0A1FA44111B_1_105_c.jpeg

Submit を押すとアップロードが実行されます。
なお、アクション実行には Submit を押す必要がありますが、これは手動実行した場合の制限です。自動実行させる方法は後述します。

5D582B37-3CFC-4E1E-8A3F-3317265D06AF.png

結果の確認

S3 に予測 CSV が書き込まれたことを確認します。

FB33E061-4F80-48AF-905E-6BE239F04CC9.png

event_date,day_of_week,channel,tickets_sold,ticket_price,revenue,venue_capacity
2026-07-17,金,自社サイト,133,5500,731500,300
2026-07-17,金,プレイガイド,117,5000,585000,300
2026-07-17,金,当日券,14,6000,84000,300
2026-07-18,土,自社サイト,128,5500,704000,300
2026-07-18,土,プレイガイド,135,5000,675000,300
2026-07-18,土,当日券,16,6000,96000,300
2026-07-19,日,自社サイト,152,5500,836000,300
2026-07-19,日,プレイガイド,97,5000,485000,300
2026-07-19,日,当日券,14,6000,84000,300

Athena で実績テーブルと予測テーブルを UNION ALL してダッシュボードで確認すると、実績データの続きに予測データが表示されます。

206A32D9-4F33-45BC-93A5-E8A95B549B94.png

スケジュール実行について

Quick Flow のスケジュール機能を使えば、この一連の処理を定期実行できます。
トリガー設定時に「確認なしで実行」を ON にすると、アクションの Submit 確認をスキップして自動実行させることができます。(スキップさせないこともできる)

4D8675BC-8A5E-43D1-9C14-AD9A2449846F_4_5005_c.jpeg

Turn on Run with no confirmation to automatically submit action forms during scheduled runs.

https://docs.aws.amazon.com/quicksuite/latest/userguide/schedules-in-quick-flows.html

さいごに

本日は Amazon Quick Flow で生成した予測データを OpenAPI コネクタ経由で S3 バケットに自動書き込みしてみました。

Flow 標準では S3 への書き込みができないのですが、API Gateway + Lambda などでカスタム API を用意して OpenAPI コネクタとして登録すれば突破できることがわかりました。この方法なら応用すればなんでも出来そうですね。

今回の検証の範囲だと認証なしのパブリックAPIという形でした。必要に応じて認証などの方法も検討が必要ですね。

Quick だけで完結しないのは少し残念ですが、Flow のスケジュール実行と組み合わせれば「定期的にデータセットから予測を生成して S3 に書き出し → ダッシュボードに反映」というパイプラインが実現できます。
AWS サービスコネクタが Flow でも使えるようになると嬉しいんですけどね。アップデートに期待したいです。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事