本文へスキップ

AI運用の判断と根拠を引く

トップへ戻る

リース失効・タイムアウト・キャンセル後に残る「ゾンビ外部操作」をどう封じるか

用語・参照用語・参照公式仕様のみ公式仕様のみ現行現行として扱う

記事状態: 公開 · 最終確認: 2026-10-11

要点

リース失効・heartbeat 処理待ち時間の上限・キャンセルは、スケジューラ上の所有権や待機を終わらせるための制御であり、旧実行主体の停止や既送信の外部副作用の取消しを一般には保証しない。可能な対象では単調なgeneration/fencing tokenをmutation境界で原子的に検証し、対応しない外部副作用ではstable 操作内容 主体の識別、提供元のdocumented 重複実行を防ぐ性質、結果reconciliationを組み合わせる。処理待ち時間の上限やcancelだけを根拠に「副作用なし」「exactly once」と表現しない。

現在の判断

リース失効・heartbeat 処理待ち時間の上限・キャンセルは、スケジューラ上の所有権や待機を終わらせるための制御であり、旧実行主体の停止や既送信の外部副作用の取消しを一般には保証しない。可能な対象では単調なgeneration/fencing tokenをmutation境界で原子的に検証し、対応しない外部副作用ではstable 操作内容 主体の識別、提供元のdocumented 重複実行を防ぐ性質、結果reconciliationを組み合わせる。処理待ち時間の上限やcancelだけを根拠に「副作用なし」「exactly once」と表現しない。

どこまで当てはまるか

リース失効・タイムアウト・キャンセル後に残る「ゾンビ外部操作」をどう封じるか

詳しく理解する

要点と前提

分散したAIエージェントやワークフローでは、タスクのリース失効、heartbeat 処理待ち時間の上限、親処理のキャンセル、再割当てが起きても、古いworkerや既に送信済みの外部API操作まで同時に停止したとは限らない。ここを同一視すると、新しいworkerが処理を引き継いだ後に古いworkerが復帰し、二重更新、古い状態による上書き、重複した外部副作用を発生させる。運用上の原則は、スケジューラ上の所有権喪失と、実プロセス停止と、外部世界での副作用停止を別々の事実として扱うことである。

何が保証され、何が保証されないか

AWS Step FunctionsのTask 処理待ち時間の上限やheartbeat 処理待ち時間の上限は、ワークフローが待ち続ける時間を制限し、失敗や再試行へ遷移させるための制御である。callback task tokenやSendTaskHeartbeatも、オーケストレータ側がタスクの生存・完了を判断するための仕組みであり、既に別サービスへ送られたHTTP要求、DB更新、決済、メール送信などを物理的に取り消す一般的な仕組みではない。したがって「処理待ち時間の上限した」「leaseが切れた」「cancelを送った」という観測だけから、「外部副作用は発生していない」と結論してはならない。

etcdのlease/lock系プリミティブも同じ境界を示す。lease失効によって所有権を失わせることはできるが、停止していた旧workerが後で復帰する可能性は残る。etcdの改訂版やTxn Compareのような単調に進む世代・バージョンを利用し、保護対象のmutation境界で現在の世代と原子的に照合できれば、古いworkerによる要再確認 書込みを拒否できる。Consulのセッション、check-session、check-index、CASも同種の条件付き更新を構成できる。ただし、これらが直接守れるのはその条件を検証する対象である。外部SaaSや別DBがfencing tokenを理解しないなら、ロックサービス側でleaseを失効させただけでは外部副作用を封じられない。

必要な制御

第一に、実行権限へ世代を持たせる。job、処理の流れ、resourceごとに単調なgeneration、改訂版、epoch等を発行し、再割当て後は新世代だけを現在のとする。旧workerが復帰した場合、重要なmutationの直前に現在の generationを検証する。検証と更新を別々に行うとTOCTOUが残るため、保護対象が対応する場合はconditional 書込み、transaction、compare-and-swap等で「世代確認+更新」を原子的に行う。

第二に、fencingを検証できない外部副作用には別の防御を置く。送信前にstable logical 操作内容 IDと要求内容を永続化し、提供元が重複実行を防ぐ性質 keyを提供する場合はそのdocumented 適用範囲/window内で同一主体の識別・同一parameterを使用する。結果が不明なまま処理待ち時間の上限した場合は、即座に別の意味のmutationを発行せず、提供元 操作内容 ID、対象object、イベント/履歴、結果の照合 API等で結果をreconcileする。重複実行を防ぐ性質や照会面が存在しない操作では、自動再試行を安全だと仮定せず、人手確認、forward 復旧、containmentへ切り替える。

第三に、cancelを安全性証明に使わない。キャンセル要求は「これ以上の仕事を望まない」という制御信号であって、外部世界のeffectが存在しないことの証明ではない。worker、ツール 実行環境、提供元の各層でcancelの受理時刻、dispatch済みか、提供元 操作内容 IDが発行済みか、最終結果の照合が何を示したかを別々に記録する。

第四に、再割当て時のauthorityを明示する。新workerへ所有権を渡した時点で旧workerの認証情報自体を即時失効できない場合がある。したがって「認証情報がまだ使える」ことと「このjob generationでmutationしてよい」ことを分離し、mutation境界で現在の authority/generationを検証する。長寿命認証情報だけに依存すると、要再確認 workerが技術的には書き込み可能なまま残る。

出典 / 出典・来歴 資料内の該当箇所

  • Enterprise AI発展拡張統合管理台帳 EA_REVISION_LEDGER: EA-506 / EA-506-R1-20261011。
  • 発展・拡張調査通信(継続正本): 1XpjZC_R1eHlIckvUaEaJ_mcj6YW6j0ihZ0b91z5vewU, marker EA-506 FORMAL RESEARCH BOUNDED UNIT 2026-10-11 17:27 JST。
  • AWS Step Functions Developer Guide: Task 処理待ち時間の上限 / heartbeat 処理待ち時間の上限 / callback task token semantics; AWS SendTaskHeartbeat API。
  • etcd 仕様・利用方法の文書: leases/locks, revisions, transactions/Compare semantics and external-resource fencing 適用限界。
  • HashiCorp Consul 仕様・利用方法の文書: sessions and transaction checks (check-session, check-index, CAS)。
  • Martin Kleppmann, fencing-token analysis for distributed locks and 要再確認 clients。
  • Registered practitioner reproductions retained in EA-506 改訂版 notes: stale-worker 復旧 and target-side fencing limits, 参照日 2026-10-17。

監査上、上記の仕様資料は制御 primitiveと境界を支持するが、特定AI製品での本番環境 incident発生率や全提供元でのfencing可用性を証明するものとして扱わない。

よくある失敗・反証

  • 典型的な事故経路は、Aがleaseを取得して外部処理を開始し、pauseやnetwork partitionでheartbeatを失う、オーケストレータがAを失効扱いにしてBへ再割当てする、Bが新しい状態を確定する、その後Aが復帰して古い前提のmutationを送る、という順序である。対象がgenerationを原子的に検証すればAを拒否できる。一方、対象がその仕組みを持たず、Aが既に外部要求をdispatch済みなら、lease失効だけでは要求を回収できない。

    さらに重要な限界として、単に「これまで見た最大fence」を対象側に記録する方式では、新世代Bが対象へ到達する前に旧世代Aが先着した場合、Aを拒否できないことがある。再割当てと同時に旧世代を即時拒否したいなら、authority 出典とmutation 適用限界をより直接結合し、現在の generationを対象側が照合できる設計が必要になる。

  • fencing tokenは、対象がtokenを比較し、その判定とmutationを一体として実行できる場合に強い。すべての外部APIがこの能力を持つわけではない。重複実行を防ぐ性質 keyも提供元が定めた適用範囲、保持期間・保持方針、parameter matching semanticsの内側で重複effectを抑える仕組みであり、普遍的なexactly-once保証ではない。キャンセルAPIもbest-effortの場合があり、成功応答が既送信effectの不存在を意味するとは限らない。

    したがって、lease、処理待ち時間の上限、heartbeat、cancel、fencing、重複実行を防ぐ性質、reconciliationは代替関係ではなく、異なる失敗面を担当する。lease/heartbeatはownershipとliveness、fencingは要再確認 authorityのmutation拒否、重複実行を防ぐ性質は同一logical 操作内容の重複抑制、reconciliationは曖昧な結果の確定を担当する。

まだ確認できていないこと

  • EA-506-UNKNOWN-01

    公開情報だけでは、authority失効後に旧AI agent/workerが提供元側で有害な副作用を確定させた事例について、十分に独立検証された本番環境 postmortemは限定的である。また、提供元横断で利用できるfencing token標準は存在せず、外部APIが世代検証を提供するかは製品ごとに異なる。実行環境ごとのcancel propagationとprovider-side effectの境界も個別検証が必要である。これらの未知を理由にlease失効やcancelをexactly-once保証へ昇格させてはならない。

根拠資料

この記事には、直接開ける外部出典が登録されていません。出典IDや検証情報は末尾で確認できます。

更新履歴

  1. EA-506-R1-20261011: 正式な 監査/publication 対応付け

出典ID・検証情報・機械可読データ

根拠の種類と情報の鮮度は、ラベルとアイコンで確認できます。

記事ID
EA-506
最終確認日
2026-10-11
提供元・モデル・プラン・利用環境
—
対象地域
—
元資料の全文と収録照合記録
要点と前提

分散したAIエージェントやワークフローでは、タスクのリース失効、heartbeat timeout、親処理のキャンセル、再割当てが起きても、古いworkerや既に送信済みの外部API操作まで同時に停止したとは限らない。ここを同一視すると、新しいworkerが処理を引き継いだ後に古いworkerが復帰し、二重更新、古い状態による上書き、重複した外部副作用を発生させる。運用上の原則は、スケジューラ上の所有権喪失と、実プロセス停止と、外部世界での副作用停止を別々の事実として扱うことである。

何が保証され、何が保証されないか

AWS Step FunctionsのTask timeoutやheartbeat timeoutは、ワークフローが待ち続ける時間を制限し、失敗や再試行へ遷移させるための制御である。callback task tokenやSendTaskHeartbeatも、オーケストレータ側がタスクの生存・完了を判断するための仕組みであり、既に別サービスへ送られたHTTP要求、DB更新、決済、メール送信などを物理的に取り消す一般的な仕組みではない。したがって「timeoutした」「leaseが切れた」「cancelを送った」という観測だけから、「外部副作用は発生していない」と結論してはならない。

etcdのlease/lock系プリミティブも同じ境界を示す。lease失効によって所有権を失わせることはできるが、停止していた旧workerが後で復帰する可能性は残る。etcdのrevisionやTxn Compareのような単調に進む世代・versionを利用し、保護対象のmutation境界で現在の世代と原子的に照合できれば、古いworkerによるstale writeを拒否できる。Consulのsession、check-session、check-index、CASも同種の条件付き更新を構成できる。ただし、これらが直接守れるのはその条件を検証する対象である。外部SaaSや別DBがfencing tokenを理解しないなら、ロックサービス側でleaseを失効させただけでは外部副作用を封じられない。

必要なcontrol

第一に、実行権限へ世代を持たせる。job、workflow、resourceごとに単調なgeneration、revision、epoch等を発行し、再割当て後は新世代だけをcurrentとする。旧workerが復帰した場合、重要なmutationの直前にcurrent generationを検証する。検証と更新を別々に行うとTOCTOUが残るため、保護対象が対応する場合はconditional write、transaction、compare-and-swap等で「世代確認+更新」を原子的に行う。

第二に、fencingを検証できない外部副作用には別の防御を置く。送信前にstable logical operation IDと要求内容を永続化し、providerがidempotency keyを提供する場合はそのdocumented scope/window内で同一identity・同一parameterを使用する。結果が不明なままtimeoutした場合は、即座に別の意味のmutationを発行せず、provider operation ID、対象object、event/history、readback API等で結果をreconcileする。idempotencyや照会面が存在しない操作では、自動再試行を安全だと仮定せず、人手確認、forward recovery、containmentへ切り替える。

第三に、cancelを安全性証明に使わない。キャンセル要求は「これ以上の仕事を望まない」という制御信号であって、外部世界のeffectが存在しないことの証明ではない。worker、tool runtime、providerの各層でcancelの受理時刻、dispatch済みか、provider operation IDが発行済みか、最終readbackが何を示したかを別々に記録する。

第四に、再割当て時のauthorityを明示する。新workerへ所有権を渡した時点で旧workerのcredential自体を即時失効できない場合がある。したがって「credentialがまだ使える」ことと「このjob generationでmutationしてよい」ことを分離し、mutation境界でcurrent authority/generationを検証する。長寿命credentialだけに依存すると、stale workerが技術的には書き込み可能なまま残る。

failure pattern

典型的な事故経路は、Aがleaseを取得して外部処理を開始し、pauseやnetwork partitionでheartbeatを失う、オーケストレータがAを失効扱いにしてBへ再割当てする、Bが新しい状態を確定する、その後Aが復帰して古い前提のmutationを送る、という順序である。対象がgenerationを原子的に検証すればAを拒否できる。一方、対象がその仕組みを持たず、Aが既に外部要求をdispatch済みなら、lease失効だけでは要求を回収できない。

さらに重要な限界として、単に「これまで見た最大fence」を対象側に記録する方式では、新世代Bが対象へ到達する前に旧世代Aが先着した場合、Aを拒否できないことがある。再割当てと同時に旧世代を即時拒否したいなら、authority sourceとmutation boundaryをより直接結合し、current generationを対象側が照合できる設計が必要になる。

適用境界とcounterevidence

fencing tokenは、対象がtokenを比較し、その判定とmutationを一体として実行できる場合に強い。すべての外部APIがこの能力を持つわけではない。idempotency keyもproviderが定めたscope、retention、parameter matching semanticsの内側で重複effectを抑える仕組みであり、普遍的なexactly-once保証ではない。キャンセルAPIもbest-effortの場合があり、成功応答が既送信effectの不存在を意味するとは限らない。

したがって、lease、timeout、heartbeat、cancel、fencing、idempotency、reconciliationは代替関係ではなく、異なる失敗面を担当する。lease/heartbeatはownershipとliveness、fencingはstale authorityのmutation拒否、idempotencyは同一logical operationの重複抑制、reconciliationは曖昧な結果の確定を担当する。

OPEN_UNKNOWN

公開情報だけでは、authority失効後に旧AI agent/workerがprovider側で有害な副作用を確定させた事例について、十分に独立検証されたproduction postmortemは限定的である。また、provider横断で利用できるfencing token標準は存在せず、外部APIが世代検証を提供するかは製品ごとに異なる。runtimeごとのcancel propagationとprovider-side effectの境界も個別検証が必要である。これらの未知を理由にlease失効やcancelをexactly-once保証へ昇格させてはならない。

SAFE_WORDING

リース失効・heartbeat timeout・キャンセルは、スケジューラ上の所有権や待機を終わらせるための制御であり、旧実行主体の停止や既送信の外部副作用の取消しを一般には保証しない。可能な対象では単調なgeneration/fencing tokenをmutation境界で原子的に検証し、対応しない外部副作用ではstable operation identity、providerのdocumented idempotency、結果reconciliationを組み合わせる。timeoutやcancelだけを根拠に「副作用なし」「exactly once」と表現しない。

Source / provenance locator
  • Enterprise AI発展拡張統合管理台帳 EA_REVISION_LEDGER: EA-506 / EA-506-R1-20261011。
  • 発展・拡張調査通信(継続正本): 1XpjZC_R1eHlIckvUaEaJ_mcj6YW6j0ihZ0b91z5vewU, marker EA-506 FORMAL RESEARCH BOUNDED UNIT 2026-10-11 17:27 JST。
  • AWS Step Functions Developer Guide: Task timeout / heartbeat timeout / callback task token semantics; AWS SendTaskHeartbeat API。
  • etcd documentation: leases/locks, revisions, transactions/Compare semantics and external-resource fencing boundary。
  • HashiCorp Consul documentation: sessions and transaction checks (check-session, check-index, CAS)。
  • Martin Kleppmann, fencing-token analysis for distributed locks and stale clients。
  • Registered practitioner reproductions retained in EA-506 revision notes: stale-worker recovery and target-side fencing limits, accessed 2026-10-17。

監査上、上記の仕様資料はcontrol primitiveと境界を支持するが、特定AI製品でのproduction incident発生率や全providerでのfencing可用性を証明するものとして扱わない。

  • EA-506-CURRENT-APPROVAL研究資料研究資料根拠の出所: AUDITED_CANONICAL_RESEARCH_PACKET

    現行本文の監査・revision対応

    裏付ける内容
    現行台帳のAUDIT_PASSと候補・revision・本文ハッシュの対応を確認しています。
    確認日
    —
    出典・実験ID
    ORPHAN-RESCUE-EA506-20261019-C1
    検証箇所
    1KqhJtiSb2S84rWmeYVwKcT_76dBwZ_B0ZZuAWQqH0rQ/EA_REVISION_LEDGER#ea_id=EA-506&revision_id=EA-506-R1-20261011&candidate_id=ORPHAN-RESCUE-EA506-20261019-C1 · EA-506-R1-20261011
    適用範囲
    —
    出典・来歴
    CURRENT_CANONICAL_APPROVAL_READBACK
    限界
    監査状態と来歴の記録です。外部根拠の最新性や本文の全主張を追加保証しません。
  • EA-506-CURRENT-BODY-READBACK実装資料実装資料根拠の出所: IMPLEMENTATION_READBACK

    現行本文の収録照合

    裏付ける内容
    公開生成入力の本文SHA-256が、監査済み候補に結び付いたハッシュと一致しています。
    確認日
    2026-10-19
    出典・実験ID
    BODY-SHA256:df2ea45c2ad05d898c0ec85e4f924118744e0f6ddb25ced92da295d845c2eca7
    検証箇所
    content/staging/EA-506.md · df2ea45c2ad05d898c0ec85e4f924118744e0f6ddb25ced92da295d845c2eca7 · EA-506-R1-20261011
    適用範囲
    —
    出典・来歴
    CURRENT_APPROVED_BODY_HASH_MATCH
    限界
    本文の同一性の検査です。外部システムの挙動や全主張の真偽を実証したものではありません。
出典ID
ORPHAN-RESCUE-EA506-20261019-C1, BODY-SHA256:df2ea45c2ad05d898c0ec85e4f924118744e0f6ddb25ced92da295d845c2eca7
追跡中のUNKNOWN ID
EA-506-UNKNOWN-01
再確認のきっかけ
正式な 改訂版/publication 状態 change · 本文 成果物 hash change · 出典 現行性 change · new contradiction or 実装 結果の照合

機械検査: 通過 — 機械検査の結果です。情報の正確性や実行の承認を保証するものではありません。

    同じ記事IDの機械可読データです。