terraform - 如何在Terraform中使用动态资源名称?

标签 terraform

我想在多个开发和生产环境中使用相同的terraform模板。

我的方法:
据我了解,资源名称必须唯一,并且terraform在内部存储资源的状态。因此,我尝试为资源名称使用变量-但似乎不受支持。我收到一条错误消息:

$ terraform plan
var.env1
  Enter a value: abc

Error asking for user input: Error parsing address 'aws_sqs_queue.SqsIntegrationOrderIn${var.env1}': invalid resource address "aws_sqs_queue.SqsIntegrationOrderIn${var.env1}"


我的terraform模板:

variable "env1" {}

provider "aws" {
        region = "ap-southeast-2"
}

resource "aws_sqs_queue" "SqsIntegrationOrderIn${var.env1}" {
        name = "Integration_Order_In__${var.env1}"
        message_retention_seconds = 86400
        receive_wait_time_seconds = 5
}


我认为,要么我的方法是错误的,要么是语法。有任何想法吗?

最佳答案

我建议对每个环境使用不同的workspace。这使您可以像这样指定配置:

variable "env1" {}

provider "aws" {
        region = "ap-southeast-2"
}

resource "aws_sqs_queue" "SqsIntegrationOrderIn" {
        name = "Integration_Order_In__${var.env1}"
        message_retention_seconds = 86400
        receive_wait_time_seconds = 5
}


确保根据环境命名“ aws_sqs_queue”资源的名称(例如,通过在名称中包含该名称),以避免AWS中的名称冲突。

关于terraform - 如何在Terraform中使用动态资源名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46353686/

相关文章:

azure - terraform azurerm_virtual_machine_extension 设置上的动态 block

azure - Terraform 避免删除额外的子网资源

Terraform AWS SES 凭证资源

amazon-web-services - terraform aws_lb_listener_rule 条件参数在 terraform 0.12.20 中未被识别

amazon-web-services - Terraform (Yaml) 中的步骤函数定义

go - 无法将 terraform variables.tf 文件读入可能进入程序

azure - 使用 terraform 轮换 Azure 存储帐户访问 key

bash - terraform循环外部输入

amazon-web-services - AWS 地形 : Filter specific subnets by matching substring in tag name

azure - Terraform 通过服务主体和客户端 key 向 azure 进行身份验证