コンテナは、outbound handlers を通じて Workers bindings(KV、R2、D1、Durable Objects など)にアクセスできます。outbound handler は、コンテナからの HTTP リクエストを傍受し、Workers ランタイム内で実行します。設定済みのバインディングは、すべてそこで使えます。
コンテナは仮想ホスト名(例: http://my.kv/some-key)へ通常の HTTP リクエストを送り、outbound handler がバインドしたリソースで解決します。コンテナ内に SDK やクライアントライブラリは不要です。
仮想ホスト名ごとに outboundByHost handler を定義します。env 引数で、Wrangler 設定に宣言したすべてのバインディングへアクセスできます。
export class MyContainer extends Container {}
MyContainer.outboundByHost = {
"my.kv": async (request, env, ctx) => {
const url = new URL(request.url);
const key = url.pathname.slice(1);
const value = await env.KV.get(key);
return new Response(value);
},
"my.r2": async (request, env, ctx) => {
const url = new URL(request.url);
// Scope access to this container's ID
const path = `${ctx.containerId}${url.pathname}`;
const object = await env.R2.get(path);
return new Response(object?.body ?? null, { status: object ? 200 : 404 });
},
};コンテナが http://my.kv/some-key を呼び出すと、handler が KV バインディングで解決します。http://my.r2/file.png への呼び出しは、現在のコンテナインスタンスにスコープして R2 から読み取ります。
ctx 引数は containerId を公開します。これにより、outbound handler からそのコンテナ自身の Durable Object とやり取りできます。
"get-state.do": async (request, env, ctx) => {
const id = env.MY_CONTAINER.idFromString(ctx.containerId);
const stub = env.MY_CONTAINER.get(id);
// Assumes getStateForKey is defined on your DO
return stub.getStateForKey(request.body);
},- 送信トラフィックを扱う — コンテナからのすべての送信 HTTP をブロック、許可、傍受します
- 環境変数とシークレット — シークレットと環境変数を設定します
- Durable Object インターフェース —
ctx.containerの API リファレンス全体