Назад | Перейти на главную страницу

Ошибка выдачи интерполяции Terraform при использовании параметра terraform.workspace

поэтому я пытаюсь выполнить интерполяцию i-e с помощью public scheme и terraform.workspace поэтому подсети будут выбираться динамически. Для этого попробовал слияние terraform.workspace с участием elb_subnets но его ошибка бросания, что единственный поддерживаемый ключ для интерполяции 'terraform.X' - 'рабочая область'

variable "elb_scheme" {
  default = "public"
}

variable "prod_elb_subnets" {
  type = "map"

  default = {
    public  = "subnet-23ywe324, subnet-234hj34, subnet-cdh7868"
    private = "subnet-hj3h2323, subnet-jihi782, subnet-237dew"
  }
}

variable "qa_elb_subnets" {
  type = "map"

  default = {
    public  = "subnet-234ee234, subnet-da238sdf, subnet-sd2233"
    private = "subnet-09jsdf23, subnet-hi232rf, subnet-89832w32"
  }
}

  setting {
    namespace = "aws:ec2:vpc"
    name      = "ELBSubnets"

    value = "${var.(terraform.workspace_elb_subnets["${var.elb_scheme}"])}"
  }

вывод:

Error: module.ebs.aws_elastic_beanstalk_environment.beanstalk: 1 error(s) occurred:

* module.ebs.aws_elastic_beanstalk_environment.beanstalk: terraform.workspace_elb_subnets: only supported key for 'terraform.X' interpolations is 'workspace'

Рабочее пространство Terraform

terraform workspace list
  default
* qa

Можете ли вы пометить свои подсети? Проще использовать поиск источников данных на основе среды, чем жестко закодировать их в переменной.

Что-то вроде этого, если вам просто нужны идентификаторы

data "aws_subnet_ids" "subnets" {

  tags {
    Env = "${terraform.workspace}"
  }
}

Если ваши подсети помечены рабочей областью, вы можете использовать их как

Чтобы получить одну подсеть на основе количества

"${element(data.aws_subnet_ids.subnets.ids, count.index)}" 

Чтобы собрать их всех в списке

"${data.aws_subnet_ids.subnets.ids}"

Для получения дополнительной информации см. Следующее

https://www.terraform.io/docs/providers/aws/d/subnet_ids.html

Источники данных очень полезны, и вы должны изучить их использование, а не что-либо жестко кодировать.