← Sandbox SDK / sandbox / guides
Подключитесь к привязкам Workers
Песочницы могут обращаться к привязки Workers : KV, R2, D1, Durable Objects и другие, через обработчики исходящих запросов. Outbound handler перехватывает HTTP-запросы от песочницы и выполняется внутри среды выполнения Workers, где доступны все настроенные вами привязки.
Песочница отправляет обычный HTTP запрос на виртуальное имя хоста (например, http://my.kv/some-key), а outbound handler определяет его с помощью привязанного ресурса. Внутри песочницы не требуется никакого SDK или клиентской библиотеки.
Используйте привязки в исходящих обработчиках
Определите outboundByHost обработчик для каждого виртуального имени хоста. env аргумент даёт доступ ко всем привязкам, объявленным в конфигурации Wrangler.
export class MySandbox extends Sandbox {}
MySandbox.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 ?? "", { status: value ? 200 : 404 });
},
"my.r2": async (request, env, ctx) => {
const url = new URL(request.url);
// Scope access to this sandbox'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 });
},
};export class MySandbox extends Sandbox {}
MySandbox.outboundByHost = {
"my.kv": async (request: Request, env: Env, ctx: OutboundHandlerContext) => {
const url = new URL(request.url);
const key = url.pathname.slice(1);
const value = await env.KV.get(key);
return new Response(value ?? "", { status: value ? 200 : 404 });
},
"my.r2": async (request: Request, env: Env, ctx: OutboundHandlerContext) => {
const url = new URL(request.url);
// Scope access to this sandbox'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 и обработчик разрешает его с помощью привязки KV. Вызов http://my.r2/file.png читает из R2 в рамках текущего экземпляра sandbox.
Доступ к состоянию Durable Object
ctx аргумент предоставляет доступ к containerId, что позволяет взаимодействовать с собственным Durable Object песочницы из outbound handler.
export class MySandbox extends Sandbox {}
MySandbox.outboundByHost = {
"get-state.do": async (request, env, ctx) => {
const id = env.MY_SANDBOX.idFromString(ctx.containerId);
const stub = env.MY_SANDBOX.get(id);
// Assumes getStateForKey is defined on your DO
return stub.getStateForKey(request.body);
},
};export class MySandbox extends Sandbox {}
MySandbox.outboundByHost = {
"get-state.do": async (
request: Request,
env: Env,
ctx: { containerId: string },
) => {
const id = env.MY_SANDBOX.idFromString(ctx.containerId);
const stub = env.MY_SANDBOX.get(id);
// Assumes getStateForKey is defined on your DO
return stub.getStateForKey(request.body);
},
};Дополнительные материалы
- Обработка исходящего трафика : блокировка, разрешение и перехват всего исходящего HTTP-трафика из песочницы
- Параметры песочницы : настройка поведения песочницы
- Переменные окружения : настройка секретов и переменных окружения