Pulumi 中的抽象配置

Abstracting configuration in Pulumi

我一直在学习 Pulumi(非常棒的工具!)并且遇到了以下情况。让我们假设我有一堆我想部署到多个环境的资源。对于每个环境,我希望有不同的名称(例如,dev == "dev" 中的 ResourceGroup,qa =="qa" 等)。我怎样才能通过 Pulumi 实现这一目标?我想避免的是将所有配置(针对所有环境)添加到一个 Pulumi 配置文件中。使用少量资源它可能会工作,但如果数量更多,我想这个文件将变得不可读。我想到的唯一解决方案是为所有资源创建一个组件,然后为每个环境创建一个堆栈,该堆栈可以将组件与资源一起使用。但也许有更好的选择?

Pulumi stacks 就是专门为此设计的。您可以拥有一个 pulumi 项目文件,该文件可以通过堆栈部署到多个环境中。

为每个堆栈获取不同的名称:

  1. Create a stack加上环境名称,例如:

    pulumi stack init dev
    
  2. 使用 pulumi.getStack() 在您的代码中获取堆栈名称。

    它将看起来像这样:

    const stack = pulumi.getStack()
    
    const resourceGroup = new azure.core.ResourceGroup("group", {
      name: `group-{stack}` // use stack name as part of resource name
      location: "West US"
    });
    
    

    This example is for JS, but you can find references for other languages in linked docs

除了栈名,还可以有单独的configuration values per stack - https://www.pulumi.com/docs/intro/concepts/project/#stack-settings-file