INTEGRITY Dokumentace

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í.

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

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

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