gpt4 book ai didi

Azure:如何使用通用 Terraform 脚本根据输入自动创建资源组?

转载 作者:行者123 更新时间:2023-12-03 04:44:17 25 4
gpt4 key购买 nike

为了自动创建资源组,我想使用通用的 Terraform 脚本

作为示例,以下脚本根据 *.tfvars.json 文件中提供的输入值在 Azure 中创建资源组

ma​​in.tf

# Configure the Microsoft Azure provider
provider "azurerm" {
features {}
}

# Create a Resource Group if it doesn’t exist
resource "azurerm_resource_group" "example" {
name = var.resource_group_name
location = "West US"
}

vars.tf

# Input variable: image sku
variable "resource_group_name" {
description = "Name of the resource group"
default = "example-resources"
}

testing.tfvars.json

{
"resource_group_name":"example-resources-testing"
}

执行方式如下

terraform apply --auto-approve -var-file="testing.tfvars.json"

在创建新资源组之前,它会销毁现有资源组。我不想破坏现有的资源组,只需创建一个新的资源组。

我不想克隆脚本。我应该怎么做才能重复使用通用 Terraform 脚本而不破坏现有脚本?这只是在执行前禁用或删除状态的问题吗?

目的是使用 ITSM 票证系统自动创建资源组,ITSM 票证工具将为 terraform 脚本提供输入以创建所需的资源。它不应影响现有资源组。

最佳答案

首先,让我们回答为什么更改变量会删除旧资源组(如果您不感兴趣,只需跳到最后一部分)

为什么 terraform 在更改变量时会破坏资源组

Terraform 代码不是“脚本”。这是您想要的基础设施状态

因此,如果您更改变量,您的愿望就会从拥有 resource-group-1 更改为拥有 resource-group-2。您当前的愿望存储在称为状态文件的东西中。为了满足您的愿望,terraform 必须删除第一个并创建另一个。但有几种方法可以做你想做的事。

解决方案

要在单个 terraform 代码中拥有多个资源组,您必须:

  • 将每个资源组的信息存储在单独的状态文件中(您对拥有单个资源组有很多小愿望)
  • 或将多个资源组的信息存储在一个状态文件中(您希望在一个更大的愿望中拥有多个资源组)

多个状态文件(许多小愿望)

要以第一种方式获得它,您有两个选择:

  • 创建多个状态文件(仅当您远程存储状态文件时才有效)
  • 工作区(由 @SoySolisCarlos 介绍),在本地计算机上工作,并在远程存储上创建多个状态文件(如第一个解决方案中所示)

单一状态文件(一个大愿望)

Terraform 还允许您将多个资源组存储在单个状态文件中,因此唯一的事情就是迭代资源组名称列表。你的迭代运算符是for_each。它应该看起来像这样:

variable "resource_group_names" {
description = "Names of the resource groups"
type = set(string)
}

resource "azurerm_resource_group" "example" {
for_each = var.resource_gruop_names
name = each.value
location = "West US"
}

变量将是:

{
"resource_group_names":["resource-group-1", "resource-group-2", "resource-group-3"]
}

每个关键字都会为您提供keyvalue,但在集合中它们是相同的。有关 eachfor_each 等的更多信息,您可以阅读 here

关于Azure:如何使用通用 Terraform 脚本根据输入自动创建资源组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73763820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com