首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Azure:如何使用通用Terraform脚本来根据输入自动创建资源组?

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

Stack Overflow用户
提问于 2022-09-18 15:05:28
回答 2查看 91关注 0票数 0

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

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

main.tf

代码语言:javascript
运行
复制
# 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

代码语言:javascript
运行
复制
# Input variable: image sku
variable "resource_group_name" {
  description = "Name of the resource group"
  default     = "example-resources"
}

testing.tfvars.json

代码语言:javascript
运行
复制
{
   "resource_group_name":"example-resources-testing"
}

然后执行就像

terraform -自动批准-var-file="testing.tfvars.json“

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

我不想复制剧本。如何在不破坏现有脚本的情况下反复使用通用Terraform脚本?这仅仅是在执行之前禁用或删除状态的问题吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-09 23:47:58

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

为什么terraform在变化变量上破坏资源组?

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

因此,如果您更改变量,您就会将您的愿望从拥有resource-group-1更改为拥有resource-group-2。您当前的Re欲存储在一个称为状态文件的东西中。为了满足你的愿望,地形必须先移除,再创造另一个。但是有几种方法可以做你想做的事。

解决方案

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

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

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

首先,您有两个选择:

  • 创建多个状态文件(仅当您远程存储状态文件时才有效)
  • 在本地机器和远程存储上工作的工作空间(由@大豆SoySolisCarlos覆盖)创建多个状态文件(如第一个解决方案中的那样)。

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

Terraform还允许您将多个资源组存储在单个状态文件中,因此惟一的方法是迭代资源组名称列表。你的迭代操作符是for_each。应该是这样的:

代码语言:javascript
运行
复制
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"
}

变量是:

代码语言:javascript
运行
复制
{
   "resource_group_names":["resource-group-1", "resource-group-2", "resource-group-3"]
}

each关键字提供keyvalue,但设置相同。有关eachfor_each等的更多信息,您可以阅读这里

票数 4
EN

Stack Overflow用户

发布于 2022-09-18 15:55:41

您需要为每个环境创建一个工作区

工作区由命令的terraform工作区集管理。要创建一个新的工作区并切换到它,您可以使用terraform workspace new;要切换工作区,可以使用terraform workspace select;有关管理工作空间的更多信息。

在Terraform配置中,可以使用${terraform. Workspace}插值序列包括当前工作区的名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73763820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档