引入用于提供者凭证的 envVarMappings
抱歉,我需要您提供要翻译的具体文本内容(除了已给出的来源链接之外)。请把文章的正文粘贴过来,我就可以为您完成简体中文翻译。
使用不同凭证运行多个提供程序
提供程序传统上依赖固定的环境变量名称(例如 AWS_ACCESS_KEY_ID、ARM_CLIENT_SECRET)。这导致在单个 Pulumi 程序中使用环境变量时,难以配置同类型的两个提供程序——比如针对不同账户的两个 AWS 提供程序。
Pulumi v3.220.0 引入了 envVarMappings,这是一项新的资源选项,允许您将提供程序的环境变量重新映射到自定义键,从而解决了此限制。
身份验证选项
在配置 Pulumi 提供程序时,您有两种主要方式来提供凭证:
1. Pulumi 配置(存储在 Pulumi.yaml 中)
pulumi config set azure-native:clientSecret --secret
2. 环境变量
export ARM_CLIENT_SECRET=1234567
环境变量在 CI 流水线中尤其方便,或者当您不想将密钥写入状态文件(即使已加密)时也很有用。然而,提供程序要求的硬编码变量名在多种情形下可能会导致问题。
当内置变量不足时
- 需要不同凭证的多个提供程序实例但共享相同变量名。
例如,使用两个显式的 Azure 提供程序针对不同订阅时,无法通过独立的环境变量进行配置。唯一的替代方案是将凭证写入提供程序配置,这会将密钥写入状态,并在令牌轮换时产生大量噪声差异。
使用 envVarMappings 重新映射环境变量
envVarMappings 允许您告诉提供者从自定义定义的环境变量读取其期望的变量。
概念:
“对于我的 Pulumi 提供者期望的任何环境变量,我想能够告诉提供者使用自定义定义的环境变量的值。”
示例
假设提供者期望 ARM_CLIENT_SECRET,但您希望它使用在 CUSTOM_ARM_CLIENT_SECRET 中定义的不同值。
export CUSTOM_ARM_CLIENT_SECRET=7654321
然后使用映射配置提供者:
TypeScript
import * as pulumi from "@pulumi/pulumi";
import * as command from "@pulumi/command";
const provider = new command.Provider("command-provider", {}, {
envVarMappings: {
// If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
"CUSTOM_ARM_CLIENT_SECRET": "ARM_CLIENT_SECRET",
},
});
Python
import pulumi
import pulumi_command as command
provider = command.Provider("command-provider",
opts=pulumi.ResourceOptions(
env_var_mappings={
# If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
"CUSTOM_ARM_CLIENT_SECRET": "ARM_CLIENT_SECRET",
}
)
)
Go
provider, err := command.NewProvider(ctx,
"command-provider",
&command.ProviderArgs{},
pulumi.EnvVarMappings(map[string]string{
// If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
"CUSTOM_ARM_CLIENT_SECRET": "ARM_CLIENT_SECRET",
}),
)
if err != nil {
return err
}
C#
var provider = new Command.Provider("command-provider",
new Command.ProviderArgs(),
new CustomResourceOptions
{
EnvVarMappings = new Dictionary
{
// If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
{ "CUSTOM_ARM_CLIENT_SECRET", "ARM_CLIENT_SECRET" }
}
});
Java
var provider = new Provider("command-provider",
ProviderArgs.Empty,
CustomResourceOptions.builder()
.envVarMappings(Map.of(
// If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
"CUSTOM_ARM_CLIENT_SECRET", "ARM_CLIENT_SECRET"))
.build());
YAML (Pulumi YAML)
resources:
command-provider:
type: pulumi:providers:command
options:
envVarMappings:
# If CUSTOM_ARM_CLIENT_SECRET exists, provider sees the value as ARM_CLIENT_SECRET
CUSTOM_ARM_CLIENT_SECRET: ARM_CLIENT_SECRET
使用 envVarMappings,每个提供者都可以从唯一命名的环境变量读取其所需的变量,从而在同一程序中启用多个凭据集。
今天就尝试
使用 Pulumi v3.220.0 或更高版本,并在任何支持它的提供程序中添加 envVarMappings。完整参考,请参阅官方 envVarMappings 文档。
祝编码愉快!