Skip to content
Cloudflare Docs
非官方翻译 - 此文档为非官方中文翻译版本,仅供参考。如有疑问请以 英文官方文档 为准。

环境变量和密钥

将环境变量和密钥传递给您的容器

环境变量可以使用 Container 类中的 envVars 字段 或在容器启动时手动设置传递到容器中。

密钥可以通过使用 Worker 密钥密钥存储 传递到容器中,然后将它们作为环境变量传递到容器中。

这些示例展示了传递密钥和环境变量的各种方式。在每个示例中,我们将 传递:

  • 变量 "ACCOUNT_NAME" 作为硬编码环境变量
  • 密钥 "CONTAINER_SECRET_KEY" 作为来自 Worker 密钥的密钥
  • 密钥 "ACCOUNT_API_KEY" 作为来自密钥存储的密钥

在实践中,您可能只使用其中一种存储密钥的方法,但 我们将展示两种方法以保证完整性。

创建密钥

首先,让我们在 Worker 密钥中创建 "CONTAINER_SECRET_KEY" 密钥:

Terminal window
npx wrangler secret put CONTAINER_SECRET_KEY

然后,让我们在密钥存储中创建一个名为 "demo" 的存储,并向其中添加 "ACCOUNT_API_KEY" 密钥:

Terminal window
npx wrangler secrets-store store create demo --remote
Terminal window
npx 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"
}
]
// 其余配置...
}

请注意,"CONTAINER_SECRET_KEY" 不需要设置,因为它会自动 添加到 env 中。

另请注意,我们没有在容器相关的 wrangler 配置部分中配置环境变量 或密钥的任何特定内容。

在容器类上使用 envVars

现在,让我们使用容器类中的 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('容器实例已启动');
}
// ... 等等 ...
}
}