Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

制限

最終更新 Markdown で表示Agent セットアップ

Workflows の作成、デプロイ、実行に適用される制限は次のとおりです。

多くの制限は Workers スクリプトに適用される制限を引き継いでおり、Workers の制限 のドキュメントに記載されています。

機能 Workers Free Workers Paid
スクリプトあたりの Workflow クラス定義 スクリプトサイズ上限 3 MB(Worker サイズ制限 に従う) スクリプトサイズ上限 10 MB(Worker サイズ制限 に従う)
アカウントあたりのスクリプト総数 100 500(Worker スクリプト制限 と共有)
ステップあたりのコンピューティング時間 1 10 ms 30 秒(デフォルト)/ アクティブ CPU 時間 を最大 5 分まで設定可能
ステップあたりの継続時間(ウォールクロック) 1 制限なし 制限なし。ネットワーク I/O の待ちやデータベースクエリなど
ステップあたりの非ストリーム結果の最大サイズ 2 1MiB(2^20 バイト) 1MiB(2^20 バイト)
イベントの最大 ペイロードサイズ 1MiB(2^20 バイト) 1MiB(2^20 バイト)
Workflow インスタンスあたりの永続化できる最大状態 3 100MB 1GB
step.sleep の最大期間 365 日(1 年) 365 日(1 年)
Workflow あたりの最大ステップ数 4 1,024 10,000(デフォルト)/ 最大 25,000 まで設定可能
Workflow 実行回数の上限 1 日あたり 100,000(Workers の日次制限 と共有) 制限なし
アカウントあたりの同時 Workflow インスタンス数(実行) 5 100 50,000
Workflow インスタンス作成レートの上限 6 1 秒あたり 100 7 アカウントあたり 1 秒 300 7、Workflow あたり 1 秒 100
キュー済みインスタンス の最大数 100,000 2,000,000
完了した Workflow インスタンス状態の保持期間 3 日 30 日 8
Workflow 名の最大長 9 64 文字 64 文字
Workflow インスタンス ID の最大長 9 100 文字 100 文字
Workflow インスタンスあたりのサブリクエスト最大数 50/リクエスト 10,000/リクエスト(デフォルト)/ 最大 1,000 万まで設定可能
ステップあたりの最大リトライ回数 10,000 10,000

JavaScript Workflows で、ステップから大きなバイナリ出力を永続化したい場合は、ReadableStream<Uint8Array> を返します。ストリーム出力もインスタンスあたりのストレージ制限に含まれるため、非常に大きい成果物や長く残す成果物は R2 などの外部ストレージに保存し、適切なときは参照を返します。

waiting 状態のインスタンスは同時実行数の制限に含まれません

waiting 状態のインスタンス(step.sleep でのスリープ、リトライ待ち、または step.waitForEvent でのイベント待ち)は、同時実行数の制限に含まれません。そのため、スリープ中またはイベント待ちの Workflow インスタンスを同時に数百万持てます。制限(同時インスタンス 10,000)に含まれるのは、アクティブに running しているインスタンスだけです。 ただし、すでに 10,000 のインスタンスが同時に実行中の場合、waiting 状態だったインスタンスはすぐには再開されず、キューに入ります。 インスタンスが running から waiting へ遷移すると、ほかの queued インスタンスがスケジュールされます(通常は最も古いキュー済みインスタンスが、ベストエフォートで選ばれます)。待ち時間が非常に短い場合、この状態遷移は起きないことがあります。

たとえば、作業をしたあと 30 日待ち、そのあとさらに作業を続ける Workflow を考えます。

src/index.tsts
import {
	WorkflowEntrypoint,
	WorkflowStep,
	WorkflowEvent,
} from "cloudflare:workers";

type Env = {
	MY_WORKFLOW: Workflow;
};

export class MyWorkflow extends WorkflowEntrypoint<Env> {
	async run(event: WorkflowEvent<unknown>, step: WorkflowStep) {
		await step.do("initial work", async () => {
			let resp = await fetch("https://api.cloudflare.com/client/v4/ips");
			return await resp.json<any>();
		});

		await step.sleep("wait 30 days", "30 days");

		await step.do(
			"make a call to write that could maybe, just might, fail",
			{
				retries: {
					limit: 5,
					delay: "5 seconds",
					backoff: "exponential",
				},
				timeout: "15 minutes",
			},
			async () => {
				if (Math.random() > 0.5) {
					throw new Error("API call to $STORAGE_SYSTEM failed");
				}
			},
		);
	}
}

ある Workflow インスタンスが 30 日待っているあいだは waiting 状態になり、同時実行数の上限に達している場合は、ほかの queued インスタンスが実行できます。

Workers Paid の cron 起動インスタンス

Workers Paid では、schedules で作成された Workflow インスタンスは、cron の発火ごとに最大 1 時間、Workflow の同時実行スロットを消費せずに実行できます。

そのバジェットを使い切ると、インスタンスは譲って通常の同時実行キューに入ります。同時実行スロットが空いたときに再開します。この cron 同時実行バジェットを使ったことが原因で、インスタンスが失敗したり、タイムアウトしたり、終了したりすることはありません。

Workflow の schedules には、次の制限が適用されます。

制限
アカウントあたりの schedules(cron 式)の最大数 100
cron 式の最大長 256 文字

Workflow のステップ数制限を上げる

各 Workflow インスタンスはデフォルトで 10,000 ステップまで対応しますが、Wrangler 設定で最大 25,000 ステップまで上げられます。詳細は Workflow のステップ数制限 を参照してください。

Workflow の CPU 制限を上げる

Workflows は Worker スクリプトであり、Workers と同じ 呼び出しあたりの CPU 制限 を共有します。CPU 時間はアクティブな処理時間です。ネットワークリクエスト、ストレージ呼び出し、そのほか一般的な I/O の待ち時間は、CPU 時間にも Workflows のコンピューティング消費にも含まれません。

Workflow が CPU 時間の上限を超えると、次のエラーがスローされます。

Error: Worker exceeded CPU time limit.

これは wrangler tail の結果では exceededCpuWorkers のメトリクス では exceededResources と表示されます。

デフォルトでは、Workflow 呼び出しあたりの最大 CPU 時間は 30 秒です。Workflow 定義に紐づくすべての呼び出しで上げるには、Wrangler 設定で limits.cpu_ms を設定します。

{
	// ...rest of your configuration...
	"limits": {
		"cpu_ms": 300000, // 300,000 milliseconds = 5 minutes
	},
	// ...rest of your configuration...
}
[limits]
cpu_ms = 300_000

CPU 時間と制限の詳細は、Workers のドキュメント を参照してください。

Workflow のサブリクエスト制限を上げる

サブリクエストとは、Workflow が Fetch API でインターネット上のリソースへ送るリクエスト、または R2KVD1 などのほかの Cloudflare サービスへ送るリクエストです。Workflows は長時間実行され、外部サービスや Cloudflare API を何度も呼び出すことが多いため、デフォルトのサブリクエスト制限を超えることがあります。

Workflow がサブリクエスト制限を超えると、次のエラーがスローされます。

Error: Too many subrequests.

これは Workers のメトリクス では exceededResourceswrangler tail の結果では exception と表示されます。

デフォルトでは、Workflow インスタンスあたりのサブリクエスト最大数は Workers Paid プランで 10,000 です。Wrangler 設定で limits.subrequests を設定すると、最大 1,000 万まで上げられます。

{
	// ...rest of your configuration...
	"limits": {
		"subrequests": 10000000, // 10 million (maximum)
	},
	// ...rest of your configuration...
}
[limits]
subrequests = 10_000_000

Free プランの Workers は、呼び出しあたり外部サブリクエスト 50、Cloudflare サービスへのサブリクエスト 1,000 のままです。

サブリクエスト制限の詳細は、Workers のドキュメント を参照してください。

呼び出し種別ごとのウォールタイム上限

ウォールタイム(ウォールクロック時間とも呼ばれます)は、呼び出しの開始から終了までの経過時間の合計です。ネットワークリクエスト、I/O、その他の非同期処理の待ち時間も含みます。CPU 時間 とは異なります。CPU 時間は、CPU がコードを実際に実行している時間だけを測ります。

次の表は、開発者プラットフォーム全体における Worker の呼び出し種別ごとのウォールタイム上限です。

呼び出し種別 ウォールタイム上限 詳細
受信 HTTP リクエスト 無制限 クライアントが接続している間は、ハード上限はありません。レスポンス本文をストリーミング中の Worker はアクティブのままです。waitUntil() は、レスポンス後または切断後、最大 30 秒まで実行を延ばします。
Cron Triggers 15 分 スケジュール実行の Workers は、呼び出しあたり最大 15 分のウォールタイムです。
Queue consumers 15 分 各コンシューマーの呼び出しは、最大 15 分のウォールタイムです。
Durable Object alarm handlers 15 分 アラームハンドラーの呼び出しは、最大 15 分のウォールタイムです。
Durable Objects(RPC / HTTP) 無制限 呼び出し元が Durable Object に接続している間は、ハード上限はありません。リクエスト、RPC 呼び出し、レスポンスストリーム、WebSocket、または進行中の I/O がある間、Durable Objects はアクティブのままです。
Workflows(ステップごと) 無制限 各ステップは無制限のウォールタイムで実行できます。個々のステップには、設定した CPU 時間上限 が適用されます。

Footnotes

  1. 各ステップが CPU 時間の上限を超えず、Workflow あたりの最大ステップ数に達しない限り、Workflow インスタンスは無期限に実行できます。 2

  2. 非ストリームの step.do() 戻り値に適用されます。JavaScript Workflows では、より大きなバイナリ出力向けに、シリアライズ可能な戻り値の型として ReadableStream<Uint8Array> も使えます。

  3. この合計には、JavaScript の step.do() 呼び出しから返されたストリーム付きステップ出力の永続化バイト数が含まれます。

  4. step.sleep は最大ステップ数の制限に含まれません

  5. 同時実行数の制限に含まれるのは、running 状態のインスタンスだけです。waiting 状態のインスタンスは、これらの制限から除外されます。Workers Paid の cron 起動 Workflow インスタンスには、発火ごとに別枠の 1 時間の cron 同時実行バジェットがあります。

  6. 作成または再起動された各インスタンスが、この制限にカウントされます

  7. 新しい Workflow インスタンスの作成レートを超えると、Workflows は HTTP 429 のレート制限エラーを返します。 2

  8. Workflow インスタンスの状態とログは、Workers Free プランでは 3 日間、Workers Paid プランでは 30 日間保持されます。

  9. 一致パターン: _^[a-zA-Z0-9_][a-zA-Z0-9-_]\*$_ 2

役に立ちましたか?