コンテンツにスキップ

運用設計

実行時の挙動・運用フローを定義する。

全体システム構成 (Phase 1b)

5 レーン (関係者 / テーマリポ / Backlog / AWS / SaaS) の 構造図 (関連性のみ、方向付きフローは下の各セクション参照):

automedia 運用システム構成

レーン構成

レーン 内容
関係者 メディア運営者 (spin-dd 運営担当) / automedia 開発者 (spin-dd エンジニアリング)
テーマリポ <key>-hubspot-theme コントロールプレーン (Claude Code セッション + .automedia/ + HubSpot テーマ)
Backlog 業務 SoT (TTRTAGSPIN、3 新規 status + カスタムフィールド)
automedia AWS 中央サービス spindd account (ap-northeast-1)。API Gateway / Lambda 群 / EventBridge / Storage / Claude Platform
External SaaS LINE Platform / Backlog SaaS / HubSpot / GitHub

設計原則・役割境界は コントロールプレーンと責務分担 を参照。


① コンテンツ起票 → 承認 → 配信予約

メディア運営者が Backlog 課題を承認し、automedia が EventBridge Schedule に予約するまでの流れ。

flow-1

Step 主アクター 動作
① 課題起票 メディア運営者 (spin-dd 運営担当、テーマリポ Claude Code または Backlog UI) 「コンテンツ運用」issueType で課題を作成、配信メタ (チャネル / 投稿日時 / テンプレ) を記入
② 内容確認 → 承認の意思 メディア運営者 プレビューを確認 (read 系 endpoint で automedia preview <issue> 可)
③ status を automedia承認 に変更 メディア運営者 (チーム内レビュー後) Backlog UI で status 遷移 = 承認の意思表示。承認者・日時は Backlog の status 変更履歴に組み込みで残る (チーム内 4-eyes 運用にするかは別途定義)
④ Webhook 配信 Backlog SaaS IssueUpdatedPOST /backlog/webhook に送信
⑤ webhook-backlog Lambda 受理 システム status === 'automedia承認' を検証、それ以外なら 400 (not-approved)
⑥ Schedule 登録 webhook-backlog Lambda 即時送信も予約も常に EventBridge Schedule 経由at(max(投稿日時, now+5s)) で登録 → 5 秒以内に deliver が起動。経路統一で監査ログ・取り消し動線を一貫化

不変条件: - automedia承認 未満の status での write 要求は 400 (not-approved) で拒否 - automedia承認 状態で本文・投稿日時・テンプレ参照が変更されたら、Lambda が自動で status を 1 つ戻す + Schedule 削除 (= invalidate、Invalidate ルール)

詳細は コンテンツワークフロー を参照。


② 配信実行 → 結果書き戻し

EventBridge Schedule 到達時点で deliver Lambda が Claude Platform 経由で配信を実行し、結果を Backlog に書き戻すまで。

flow-2

Step 主アクター 動作
① Schedule 到達 EventBridge Schedule at(投稿日時) 秒精度で deliver Lambda を invoke
② Claude 呼び出し deliver Lambda Claude Platform on AWS (IAM 統合) を Claude Agent SDK で呼ぶ、tool 実行で各 SaaS API に到達
③ 配信実行 deliver Lambda LINE Messaging API / HubSpot CMS / CRM / Email へ送信
④a 成功時 deliver Lambda Backlog 課題の status を automedia実行済み に更新 + コメント [automedia] dispatched at <iso> + カスタムフィールド「自動配信実行日時」更新
④b 失敗時 / retry 尽き deliver Lambda Backlog 課題の status を automediaエラー に更新 + コメント [automedia] failed: <reason>

冪等性: DynamoDB deliver-locks テーブルで <tenant>:<issueKey> ロックを取得してから配信実行。同一課題の二重実行を防止。

リトライ規則 (deliver Lambda 内部):

失敗種別 自動 retry
5xx / Timeout 指数バックオフ (30s, 2m, 10m, 30m, 1h) 最大 5 回 → リトライ尽き automediaエラー
認証失敗 (401/403) なし (token 更新が必要) → 即時 automediaエラー
422 (ペイロード不正) なし → 即時 automediaエラー

automediaエラー に遷移したら 人手介入が前提 (自動再実行なし)。詳細は コンテンツワークフロー: 失敗時のリトライ規則


③ read 系問い合わせ (preview / status / audience-query)

テーマリポ Claude Code セッションが副作用なしで automedia の情報を取得する経路。Backlog 課題を起票せずに呼び出せる。

flow-3

Step 主アクター 動作
① read リクエスト テーマリポ Claude Code (.claude/skills/automedia-*) OIDC → テナント単位の read-only IAM Role で短期クレデンシャル取得 → GET/POST
② API Gateway → read API Lambda システム 認証通過後、内部処理 (将来追加実装)
③ 必要に応じて参照 read API Lambda S3 (templates) / Backlog API (課題情報) / HubSpot CRM API (リード抽出) などを read のみで叩く
④ JSON で応答 テーマリポ Claude Code preview 内容 + 承認状態 / audience サイズなどを取得

現状の実装状況: read API Lambda は 未実装。Phase 1b の追加スコープとして別 Issue で着手予定 (08-control-plane.md の追加実装スコープ)。


④ LINE follow → welcome reply + HubSpot リード upsert

LINE ユーザーが友だち追加 / ブロック解除した瞬間のフロー。webhook-line Lambda が welcome reply を 5 秒以内に返し、並列で HubSpot に upsert する。

flow-4

Step 主アクター 動作
① 友だち追加 ユーザー LINE 公式アカウントをブロック解除 / 新規追加
② follow event LINE Platform POST /line/webhook/{channel_id}
③ welcome.json 取得 webhook-line Lambda S3 の <tenant>/templates/line/welcome.json を読む
④ welcome reply (≤5s) webhook-line Lambda LINE Reply API でメッセージ送信
⑤ HubSpot upsert (並列) webhook-line Lambda line_user_id で search-first、line_follow_count インクリメント + line_last_followed_at 更新

redelivery 対応: LINE は約 62 秒後に同 event を再配信することがあり、deliveryContext.isRedelivery=true を検知して skip する (PR #102)。

詳細は LINE follow フロー (welcome + HubSpot upsert) を参照。


⑤ テナント設定同期 (.automedia/ Push)

テーマリポの .automedia/** (project.yml / templates / rules) が GitHub に push されたら、S3 cache にミラーするフロー。

flow-5

Step 主アクター 動作
① git push メディア運営者 (テーマリポ Claude Code) PR レビュー → main へ merge → push
② Push Webhook GitHub POST /github/webhook
③ sync Lambda システム HMAC 検証 → .automedia/**s3://spin-dd-automedia-tenants/<tenant>/ にミラー

二重審査: 設定変更は GitHub PR レビュー に加え、配信時に Backlog 承認 が必要 (= GitHub と Backlog の両方で承認が要る)。


⑥ 日次セーフティネット (Scan Lambda)

Backlog Webhook 配信の取りこぼしを救済する最終防衛線。通常運用では検知件数 0 を期待。

flow-6

Step 主アクター 動作
① rate(1 day) 起動 EventBridge Scheduler scan Lambda を 1 日 1 回起動
② 取りこぼし課題の検索 scan Lambda 全テナント Backlog をスキャン: status = automedia承認 + 投稿日時 ≤ now() + 自動配信実行日時 IS NULL
③a 検知 → 救済 scan Lambda deliver Lambda を invoke (= 通常経路と同じ実行)
③b 検知 → アラート scan Lambda CloudWatch Alarm に通知 → Backlog Webhook 設定の問題として調査対象

通常は 0 件。検知が継続するようなら Backlog Webhook の配信失敗 / シークレット期限切れなどを示すシグナル。


⑦ 開発者の force 経路 (トラブル対応)

automedia 開発者が本番 write エンドポイント (Backlog 承認必須) を バイパス する経路。緊急時の最後の手段として位置付け。

flow-7

Step 主アクター 動作
① 認証 automedia 開発者 AWS SSO (spindd profile) でログイン
② CLI 起動 automedia 開発者 aws lambda invoke で対象 Lambda を直接呼ぶ
③ Lambda invoke システム 本番経路と同じコードだが、payload を自由指定可能
④ 履歴記録 システム CloudTrail に全 invoke 履歴が残る (監査は維持)

原則: - 本番 write エンドポイント (webhook-backlog 経由) は 厳格に承認必須、例外なし - 開発者の force 経路はそれと 完全に別経路。本番フローを汚さないため分離 - CloudTrail で全 invoke が記録されるため監査は維持される - 通常運用では使わない (Issue #104 確定事項)


各論ページ