环境变量可以使用 Container
类中的 envVars
字段
或在容器启动时手动设置传递到容器中。
密钥可以通过使用 Worker 密钥 或 密钥存储 传递到容器中,然后将它们作为环境变量传递到容器中。
这些示例展示了传递密钥和环境变量的各种方式。在每个示例中,我们将 传递:
- 变量
"ACCOUNT_NAME"
作为硬编码环境变量 - 密钥
"CONTAINER_SECRET_KEY"
作为来自 Worker 密钥的密钥 - 密钥
"ACCOUNT_API_KEY"
作为来自密钥存储的密钥
在实践中,您可能只使用其中一种存储密钥的方法,但 我们将展示两种方法以保证完整性。
首先,让我们在 Worker 密钥中创建 "CONTAINER_SECRET_KEY"
密钥:
npx wrangler secret put CONTAINER_SECRET_KEY
yarn wrangler secret put CONTAINER_SECRET_KEY
pnpm wrangler secret put CONTAINER_SECRET_KEY
然后,让我们在密钥存储中创建一个名为 "demo" 的存储,并向其中添加
"ACCOUNT_API_KEY"
密钥:
npx wrangler secrets-store store create demo --remote
yarn wrangler secrets-store store create demo --remote
pnpm wrangler secrets-store store create demo --remote
npx wrangler secrets-store secret create demo --name ACCOUNT_API_KEY --scopes workers --remote
yarn wrangler secrets-store secret create demo --name ACCOUNT_API_KEY --scopes workers --remote
pnpm wrangler secrets-store secret create demo --name ACCOUNT_API_KEY --scopes workers --remote
有关如何创建密钥的完整详细信息,请参阅 Workers 密钥文档 和 密钥存储文档。
接下来,我们需要在 Wrangler 配置中添加绑定以访问我们的密钥和环境变量。
{ "name": "my-container-worker", "vars": { "ACCOUNT_NAME": "my-account" }, "secrets_store_secrets": [ { "binding": "SECRET_STORE", "store_id": "demo", "secret_name": "ACCOUNT_API_KEY" } ] // 其余配置...}
name = "my-container-worker"
[vars]ACCOUNT_NAME = "my-account"
[[secrets_store_secrets]]binding = "SECRET_STORE"store_id = "demo"secret_name = "ACCOUNT_API_KEY"
请注意,"CONTAINER_SECRET_KEY"
不需要设置,因为它会自动
添加到 env
中。
另请注意,我们没有在容器相关的 wrangler 配置部分中配置环境变量 或密钥的任何特定内容。
现在,让我们使用容器类中的 envVars
字段定义一个容器:
export class MyContainer extends Container { defaultPort = 8080; sleepAfter = "10s"; envVars = { ACCOUNT_NAME: env.ACCOUNT_NAME, ACCOUNT_API_KEY: env.SECRET_STORE.ACCOUNT_API_KEY, CONTAINER_SECRET_KEY: env.CONTAINER_SECRET_KEY, };}
此 Container
的每个实例现在在启动时都会设置这些变量和密钥
作为环境变量。
但是如果您想要为每个实例设置环境变量呢?
在这种情况下,设置 manualStart
,然后使用 start
方法为每个实例传递环境变量。
我们假设我们已经在密钥存储中设置了额外的密钥。
export class MyContainer extends Container { defaultPort = 8080; sleepAfter = '10s'; manualStart = true;}
export default { async fetch(request, env) { if (new URL(request.url).pathname === '/launch-instances') { let idOne = env.MY_CONTAINER.idFromName('foo'); let instanceOne = env.MY_CONTAINER.get(idOne);
let idTwo = env.MY_CONTAINER.idFromName('foo'); let instanceTwo = env.MY_CONTAINER.get(idTwo);
// 每个实例获得不同的环境变量集
await instanceOne.start({ envVars: { ACCOUNT_NAME: env.ACCOUNT_NAME + "-1", ACCOUNT_API_KEY: env.SECRET_STORE.ACCOUNT_API_KEY_ONE, CONTAINER_SECRET_KEY: env.CONTAINER_SECRET_KEY_TWO, } )
await instanceTwo.start({ envVars: { ACCOUNT_NAME: env.ACCOUNT_NAME + "-2", ACCOUNT_API_KEY: env.SECRET_STORE.ACCOUNT_API_KEY_TWO, CONTAINER_SECRET_KEY: env.CONTAINER_SECRET_KEY_TWO, } ) return new Response('容器实例已启动'); }
// ... 等等 ... }}
- @2025 Cloudflare Ubitools
- Cf Repo