Workers for Platforms で User Worker をデプロイするとき、バインディング を付けて、KV 名前空間、D1 データベース、R2 バケット などのリソースへアクセスさせられます。これにより、インフラストラクチャコンポーネントを自分で構築せずに、エンド顧客がより強力なアプリケーションを構築できます。
アップロード時に付けたバインディングは、そのユーザー Worker のすべての呼び出しで使えます。代わりにリクエストスコープのプラットフォーム機能を提供するには、動的ディスパッチの props で RPC スタブを渡します。
バインディングにより、各 User Worker は機能を次のように拡張できます。
- KV、R2、D1、または Durable Objects で データを保存する
- Queues と Workflows で 作業を非同期処理する
- Containers(Durable Object としてバインド)で コンテナを実行する
- VPC Services、VPC Networks、Hyperdrive で プライベートネットワークに接続する
- Analytics Engine で メトリクスを収集する
各 User Worker がアクセスできるのは、明示的に付けられたバインディングだけです。完全な分離のため、一意のリソース(D1 データベースや KV 名前空間など)を各 User Worker に作成して付けられます。
この例では、KV 名前空間 を作成して User Worker に付ける手順を説明します。同じ手順で、他の バインディング にも付けられます。
Cloudflare API を使って KV 名前空間を作成します。
Upload User Worker API を使い、KV 名前空間バインディングを Worker に付けます。Worker スクリプトの初回アップロード時、または既存 Worker の更新時にできます。
curl -X PUT \
"https://api.cloudflare.com/client/v4/accounts/<account-id>/workers/dispatch/namespaces/<your-namespace>/scripts/<script-name>" \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer <api-token>" \
-F 'metadata={
"main_module": "worker.js",
"bindings": [
{
"type": "kv_namespace",
"name": "USER_KV",
"namespace_id": "<your-namespace-id>"
}
]
}' \
-F 'worker.js=@/path/to/worker.js'これで User Worker は、env.USER_KV.get()、env.USER_KV.put()、その他の KV メソッドを使い、env 引数から USER_KV バインディングにアクセスできます。
注: Worker に新しいバインディングを追加する予定がある場合は、keep_bindings パラメーターを使い、既存のバインディングを保ったまま新しいバインディングを追加します。
curl -X PUT \
"https://api.cloudflare.com/client/v4/accounts/<account-id>/workers/dispatch/namespaces/<your-namespace>/scripts/<script-name>" \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer <api-token>" \
-F 'metadata={
"bindings": [
{
"type": "r2_bucket",
"name": "STORAGE",
"bucket_name": "<your-bucket-name>"
}
],
"keep_bindings": ["kv_namespace"]
}'