このガイドでは、最初の Workers VPC Service を作成し、Worker からプライベートネットワーク内のリソースにアクセスできるようにします。
Workers アプリケーションを作成し、プライベートネットワークに Tunnel を作って Cloudflare に接続します。その後、Worker からアクセスしたいプライベートネットワーク上のサービス向けに VPC Services を設定します。
始める前に、次を完了してください。
- Cloudflare アカウント ↗ に登録します。
Node.js↗ をインストールします。
Node.js のバージョンマネージャー
権限の問題を避け、Node.js のバージョンを切り替えられるよう、Volta ↗ や nvm ↗ などの Node バージョンマネージャーを使います。このガイドの後半で説明する Wrangler には、Node バージョン 16.17.0 以降が必要です。
さらに、次が必要です。
- プライベートネットワークへのアクセス(ローカルネットワーク、AWS VPC、Azure VNet、GCP VPC、またはオンプレミスネットワーク)
- 既存の VPC Services を Worker からバインドするための Connectivity Directory Bind ロール
- または、VPC Services を作成して Worker からバインドするための Connectivity Directory Admin ロール
Wrangler で新しい Worker プロジェクトを作成します。
npm create cloudflare@latest -- workers-vpc-appyarn create cloudflare workers-vpc-apppnpm create cloudflare@latest workers-vpc-appセットアップでは、次のオプションを選びます。
- What would you like to start with? では、
Hello World exampleを選びます。 - Which template would you like to use? では、
Worker onlyを選びます。 - Which language do you want to use? では、
TypeScriptを選びます。 - Do you want to use git for version control? では、
Yesを選びます。 - Do you want to deploy your application? では、
Noを選びます(デプロイ前にいくつか変更します)。
プロジェクトディレクトリに移動します。
cd workers-vpc-appCloudflare Tunnel は、プライベートネットワークから Cloudflare へのセキュアな接続を作ります。このトンネルにより、Workers はプライベートリソースに安全にアクセスできます。外部クラウドの仮想マシンまたはコンテナでトンネルを作成できます。このチュートリアルでは、ローカルデスクトップでも構いません。
-
Workers VPC ダッシュボード ↗ を開き、Tunnels タブを選びます。
-
Create を選び、新しいトンネルを作成します。
-
トンネル名を入力し(例:
workers-vpc-tunnel)、Save tunnel を選びます。 -
オペレーティングシステムとアーキテクチャを選びます。ダッシュボードに、環境向けの具体的なインストール手順が表示されます。
-
表示されたコマンドに従い、
cloudflaredをダウンロードしてインストールします。一意のトークン付きのサービスインストールコマンドを実行します。
トンネルが正常に接続されると、ダッシュボードが確認を表示します。
トンネルが接続されたら、Workers にアクセスさせたいサービスへトンネルが到達できることを確認します。トンネルは、Workers VPC に公開したい内部リソースに到達できるマシンにインストールします。外部クラウドでは、トンネルが目的のサービスにアクセスできるよう、Access-Control-Lists、Security Groups、または VPC Firewall Rules の設定が必要な場合があります。
トンネルが動いているので、Workers が内部リソースにアクセスするために使う VPC Service を作成します。
-
Workers VPC ダッシュボード ↗ を開き、VPC Services タブを選びます。
-
Create を選び、新しい VPC Service を作成します。
-
VPC Service の Service name を入力します(例:
my-private-api)。 -
Tunnel ドロップダウンからトンネルを選びます。新しいトンネルが必要な場合は Create Tunnel を選びます。
-
内部サービスの Host or IP address を入力します(例:
localhost、internal-api.company.local、または10.0.1.50)。 -
Ports を設定します。次のどちらかを選びます。
- 標準の HTTP(80)と HTTPS(443)向けに Use default ports
- カスタムの HTTP および HTTPS ポートを指定する Provide port values
-
DNS Resolver を設定します。次のどちらかを選びます。
- トンネル組み込みの DNS 解決を使う Use tunnel as resolver
- Custom resolver を選び、DNS リゾルバーの IP を入力します(例:
8.8.8.8)
-
Create service を選び、VPC Service を作成します。
ダッシュボードに、一意の Service ID 付きの新しい VPC Service が表示されます。次の手順のためにこの Service ID を保存します。
HTTP サービスの場合:
npx wrangler vpc service create my-private-api \
--type http \
--tunnel-id <YOUR_TUNNEL_ID> \
--hostname <YOUR_HOSTNAME>TCP サービスの場合(例: PostgreSQL データベース):
npx wrangler vpc service create my-database \
--type tcp \
--tcp-port 5432 \
--app-protocol postgresql \
--tunnel-id <YOUR_TUNNEL_ID> \
--ipv4 <YOUR_IPV4_ADDRESS>次を置き換えます。
<YOUR_TUNNEL_ID>を手順 2 のトンネル ID<YOUR_HOSTNAME>を内部サービスのホスト名(例:internal-api.company.local)<YOUR_IPV4_ADDRESS>をサービスのプライベート IP アドレス(例:10.0.1.50)
次もできます。
--hostname <YOUR_HOSTNAME>を--ipv4 <YOUR_IPV4_ADDRESS>、--ipv6 <YOUR_IPV6_ADDRESS>、またはデュアルスタック構成の両方に置き換えて、IP アドレスでサービスを作成する--http-port <PORT>および/または--https-port <PORT>を追加して、HTTP サービスにカスタムポートを指定する(例:--http-port 8080 --https-port 8443)--cert-verification-modeで TLS 証明書の検証モードを設定する(verify_full、verify_ca、またはdisabled)
コマンドはサービス ID を返します。次の手順のために保存します。
権限エラーが出る場合は、必要なロール を参照してください。
Wrangler 設定ファイルに VPC Service バインディングを追加します。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "workers-vpc-app",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-09-20",
"vpc_services": [
{
"binding": "VPC_SERVICE",
"service_id": "<YOUR_SERVICE_ID>"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "workers-vpc-app"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-09-20"
[[vpc_services]]
binding = "VPC_SERVICE"
service_id = "<YOUR_SERVICE_ID>"<YOUR_SERVICE_ID> を手順 3 のサービス ID に置き換えます。
VPC Service バインディングを使うよう Worker を更新します。次の例です。
export default {
async fetch(request, env, ctx): Promise<Response> {
const url = new URL(request.url);
// This is a simple proxy scenario.
// In this case, you will need to replace the URL with the proper protocol (http vs. https), hostname and port of the service.
// For example, this could be "http://localhost:1111", "http://192.0.0.1:3000", "https://my-internal-api.example.com"
const targetUrl = new URL(
`http://<ENTER_SERVICE_HOST>:<ENTER_SERVICE_PORT>${url.pathname}${url.search}`,
);
// Create new request with the target URL but preserve all other properties
const proxyRequest = new Request(targetUrl, {
method: request.method,
headers: request.headers,
body: request.body,
});
const response = await env.VPC_SERVICE.fetch(proxyRequest);
return response;
},
} satisfies ExportedHandler<Env>;Worker をローカルでテストします。リモートの VPC Services を使う必要があります。wrangler.jsonc 設定ファイルで構成した Workers remote bindings を使うか、npx wrangler dev --remote を使います。
npx wrangler devhttp://localhost:8787 にアクセスし、Worker からプライベートネットワークへの接続をテストします。
テストが完了したら、Worker をデプロイします。
npx wrangler deployWorker はデプロイ済みになり、Cloudflare Tunnel 経由でプライベートネットワークのリソースに安全にアクセスできます。権限エラーが出る場合は、必要なロール を参照してください。
- 高度な構成向けの 設定オプション を確認する
- 本番向けに 高可用性トンネル をセットアップする
- AWS、Azure、GCP、Kubernetes 向けの プラットフォーム固有ガイド を見る
- 一般的なユースケースの 例 を確認する