← Cloudflare Workers VPC / workers-vpc
Workers Binding API
Bindingy VPC poskytují API pro přístup k privátním službám z vašeho Workeru. Oba VPC služby a VPC sítě zpřístupní fetch() metoda pro provoz HTTP. VPC Networks také nabízí connect() metoda pro spojení raw TCP. Rozdíl mezi typy vazby spočívá v rozsahu směrování, ne v rozhraní API.
Typy bindingů
VPC Service
VPC Service binding směruje požadavky na konkrétního předem registrovaného hostitele a port. Tento Konfigurace VPC Service vždy určuje cíl připojení, i když se jiná adresa URL nebo hostitel nachází v fetch() volání.
- host uvedené v
fetch()neřídí směrování. Pouze naplňujeHosthlavička, a při použitíhttps, hodnota Server Name Indication (SNI). - port uvedené v
fetch()se ignoruje: vždy se použije port zadaný v konfiguraci VPC Service.
VPC Network
VPC Network binding poskytuje přístup ke každé službě dostupné prostřednictvím navázaného Cloudflare Tunnel nebo Cloudflare Mesh, včetně tras podsítí a hostname oznámených přes Cloudflare Tunnel nebo Mesh a cílů připojených přes vstupní body Cloudflare WAN (GRE, IPsec nebo CNI). Adresa URL předaná do fetch() nebo adresu předanou do connect() určuje skutečný cíl: hostname nebo IP adresu a port.
fetch()
Odešle požadavek HTTP na privátní službu prostřednictvím připojeného Cloudflare Tunnel nebo Cloudflare Mesh. K dispozici pro bindingy VPC Service i VPC Network.
const response = await env.MY_BINDING.fetch(resource, options);Parametry
resource(string | URL | Request): adresa URL, kterou chcete načíst. Musí se jednat o absolutní URL adresu včetně protokolu, hostitele a cesty (napříkladhttp://internal-api/api/users).options(volitelný RequestInit): standardní možnosti fetch, včetně:method: metoda HTTP (GET, POST, PUT, DELETE atd.)headers: hlavičky požadavkubody: tělo požadavkusignal: AbortSignal pro zrušení požadavku
Návratová hodnota
Vrátí Promise<Response> která se přeloží na standardní objekt Response rozhraní Fetch API ↗.
Příklady
Následující příklady platí jak pro bindingy VPC Service, tak pro VPC Network.
Základní požadavek GET
export default {
async fetch(request, env) {
const privateRequest = new Request(
"http://internal-api.company.local/users",
);
const response = await env.MY_BINDING.fetch(privateRequest);
const users = await response.json();
return new Response(JSON.stringify(users), {
headers: { "Content-Type": "application/json" },
});
},
};POST požadavek s tělem
export default {
async fetch(request, env) {
const privateRequest = new Request(
"http://internal-api.company.local/users",
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${env.API_TOKEN}`,
},
body: JSON.stringify({
name: "John Doe",
email: "[email protected]",
}),
},
);
const response = await env.MY_BINDING.fetch(privateRequest);
if (!response.ok) {
return new Response("Failed to create user", { status: response.status });
}
const user = await response.json();
return new Response(JSON.stringify(user), {
headers: { "Content-Type": "application/json" },
});
},
};Požadavek s HTTPS a IP adresou
export default {
async fetch(request, env) {
const privateRequest = new Request("https://10.0.1.50/api/data");
const response = await env.MY_BINDING.fetch(privateRequest);
return response;
},
};connect()
Otevře nezpracované TCP připojení k privátnímu cíli prostřednictvím propojeného Cloudflare Tunnel nebo Cloudflare Mesh. K dispozici pouze u vazeb typu VPC Network.
const socket = await env.MY_BINDING.connect(address);Parametry
address(string | SocketAddress): cíl připojení. Zadejte řetězec ve formátu"host:port"formát (například"10.0.1.50:6379") neboSocketAddressobjekt shostnameaport.
Návratová hodnota
Vrátí Promise<Socket> která se přeloží na Socket hodnotou readable a writable streamy. Pokud connect() se nepodaří navázat spojení, vyvolá výjimku.
Příklady
Připojení k privátní instanci Redis
export default {
async fetch(request, env) {
const socket = await env.MY_BINDING.connect("10.0.1.50:6379");
const writer = socket.writable.getWriter();
await writer.write(new TextEncoder().encode("PING\r\n"));
await writer.close();
return new Response(socket.readable);
},
};Připojení pomocí objektu SocketAddress
export default {
async fetch(request, env) {
const socket = await env.MY_BINDING.connect({
hostname: "10.0.1.50",
port: 6379,
});
const writer = socket.writable.getWriter();
await writer.write(new TextEncoder().encode("PING\r\n"));
await writer.close();
return new Response(socket.readable);
},
};Požadované role
Aby bylo možné ve Workeru navázat binding na VPC Service nebo VPC Network, potřebuje váš uživatel Connectivity Directory Bind (nebo Connectivity Directory Admin). Přímé vytvoření vazby na Cloudflare Tunnel prostřednictvím VPC Network binding vyžaduje Connectivity Directory Admin. Definice rolí najdete v Role.
Další kroky
- Nakonfigurujte VPC služby
- Nakonfigurujte VPC sítě
- Viz příklady použití