我的terraform脚本是为生产中的一个web应用程序建立的。
作为其中的一部分,我启用了Azure DDoS保护。
然而,与其他基础设施相比,这确实是非常昂贵的。
因此,我不想为我的开发环境创建它。
我使用Azure管道运行terraform,因此我希望将管道配置为可选,而不是创建管道。例如,在管道中使用变量
是否有一个选项,我可以传递到terraform,以跳过这个资源?
假设有一个选项,并且我可以跳过ddos资源,如果不存在,那么在下面的代码段中创建vnet会失败吗?
#---------------------------------------
# DDOS Protection Plan Definition
#---------------------------------------
resource "azurerm_network_ddos_protection_plan" "ddos" {
name = var.ddos_plan_name
location = var.location
resource_group_name = azurerm_resource_group.rg.name
}
#---------------------------------------
# vNet Definition
#---------------------------------------
resource "azurerm_virtual_network" "vnet" {
name = lower("${local.vNet_id}-${var.location_id}-${var.env_id}-1")
resource_group_name = azurerm_resource_group.rg.name
location = var.location
address_space = var.address_space
ddos_protection_plan {
id = azurerm_network_ddos_protection_plan.ddos.id
enable = true
}
depends_on = [
azurerm_resource_group.rg
]
}发布于 2022-02-17 14:04:36
我的方法是使用count元参数1。例如,创建一个名为create_ddos_protection_plan的变量,将其设置为bool类型,默认情况下将其设置为false。
variable "create_ddos_protection_plan" {
description = "Whether to create DDoS resource or not."
type = bool
default = false
}
resource "azurerm_network_ddos_protection_plan" "ddos" {
count = var.create_ddos_protection_plan ? 1 : 0
name = var.ddos_plan_name
location = var.location
resource_group_name = azurerm_resource_group.rg.name
}稍后,如果您决定要创建变量,可以将变量的值设置为true或完全删除count元参数。
如果基于当前设置资源不存在,则vnet创建将失败。
发布于 2022-02-18 00:30:34
您可以使用the count meta-argument动态地选择要创建的特定资源的实例数量,包括可能选择创建零实例,从而有效地禁用资源:
variable "enable_ddos_protection" {
type = bool
default = true
}
resource "azurerm_network_ddos_protection_plan" "ddos" {
count = var.enable_ddos_protection ? 1 : 0
name = var.ddos_plan_name
location = var.location
resource_group_name = azurerm_resource_group.rg.name
}由于此资源的实例数量现在是动态的,因此azurerm_network_ddos_protection_plan.ddos将显示为对象列表,而不是单个对象。因此,您还需要更改在虚拟网络配置中引用它的方式。
最直接的声明方法是使用dynamic block告诉Terraform在该资源的每个实例中生成一个ddos_protection_plan块,因此如果没有保护计划实例,就不会出现该类型的块:
resource "azurerm_virtual_network" "vnet" {
name = lower("${local.vNet_id}-${var.location_id}-${var.env_id}-1")
resource_group_name = azurerm_resource_group.rg.name
location = var.location
address_space = var.address_space
dynamic "ddos_protection_plan" {
for_each = azurerm_network_ddos_protection_plan.ddos
content {
id = ddos_protection_plan.value.id
enable = true
}
}
}(我在这里删除了depends_on声明,因为它与resource_group_name参数中的引用是多余的,但是dynamic块是这个示例的主要内容。)
https://stackoverflow.com/questions/71159410
复制相似问题