如何在 Pulumi Azure Native 中设置全局标签

How to set global tags in Pulumi Azure Native

在特定于堆栈的设置文件中(即 Pulumi.dev.yaml),如果设置了位置(即 azure-native:location),则会自动设置资源组位置,并且资源的位置源自资源组位置。现在我正在尝试为所有资源应用通用标签,即 CreatedBy: Pulumi有什么方法可以设置 common/global 标签,类似于设置文件 (Pulumi.dev.yaml) 中的 azure-native:location 吗?

预期:位置和标签都将从 Pulumi.dev.yaml

开始设置
config:
  azure-native:location: japaneast
  azure-native:tags:
    CreatedBy: Pulumi
var mainRgArgs = config.RequireObject<JsonElement>(KEY_RESOURCE_GROUP_ARGS);
var mainRgName = mainRgArgs.GetProperty(RESOURCE_GROUP_NAME).GetString()!;

var mainRg = new ResourceGroup(RESOURCE_GROUP_MAIN, new ResourceGroupArgs
{
    ResourceGroupName = mainRgName
    //Location = 
    //Tags = 
});

无法自动设置标签,因为标签不是必需的 API 属性。

之所以 location 是提供者参数,是因为每个资源在创建时都需要一个位置。标签不是这样。

但是,可以使用 transformation

自动将标签添加到可标记的资源(并非所有资源)

转换允许您将属性注入每个资源,无论您是否明确地为您的资源设置了该值。但是,您必须设置可标记资源列表,因为并非每个 Azure 资源都是可标记的。

在资源上注册标签的函数如下所示:

export function registerAutoTags(autoTags: Record<string, string>): void {
    pulumi.runtime.registerStackTransformation((args) => {
        if (isTaggable(args.type)) {
            args.props["tags"] = { ...args.props["tags"], ...autoTags };
            return { props: args.props, opts: args.opts };
        }
        return undefined;
    });
}

然后您可以通过调用函数来使用这些标签:

registerAutoTags({
    "user:Project": pulumi.getProject(),
    "user:Stack": pulumi.getStack(),
    "user:Cost Center": config.require("costCenter"),
});

关于此的更多信息(尽管是针对 AWS,而非 Azure)here. You can find a list of Azure resources that are support tags here