«значение счетчика не может быть вычислено», когда оно зависит от источника данных параметров AWS SSM - PullRequest
0 голосов
/ 30 августа 2018

У меня есть проект Terraform, который я настраивал с использованием Параметры менеджера систем AWS . Представьте себе проект Terraform со следующим variables.tf:

variable "stack_name" {
  type    = "string"
  default = "stack"
}

variable "vpc_cidr_block" {
  type = "string"
}

variable "subnet_config_public_subnets" {
  type = "list"
}

variable "subnet_config_private_subnets" {
  type = "list"
}

terraform.tfvars может выглядеть так:

vpc_cidr_block                = "10.1.0.0/16"
subnet_config_public_subnets  = ["10.1.2.0/24", "10.1.4.0/24", "10.1.6.0/24"]
subnet_config_private_subnets = ["10.1.1.0/24", "10.1.3.0/24", "10.1.5.0/24"]

Вместо этого представьте, что variables.tf содержит это вместо:

variable "stack_name" {
  type    = "string"
  default = "stack"
}

data "aws_ssm_parameter" "vpc_cidr_block" {
  name = "/terraform/${var.stack_name}/vpc_cidr_block"
}

data "aws_ssm_parameter" "subnet_config_public_subnets" {
  name = "/terraform/${var.stack_name}/subnet_config_public_subnets"
}

data "aws_ssm_parameter" "subnet_config_private_subnets" {
  name = "/terraform/${var.stack_name}/subnet_config_private_subnets"
}

locals {
  vpc_cidr_block                = "${data.aws_ssm_parameter.vpc_cidr_block.value}"
  subnet_config_public_subnets  = "${split(",", data.aws_ssm_parameter.subnet_config_public_subnets.value)}"
  subnet_config_private_subnets = "${split(",", data.aws_ssm_parameter.subnet_config_private_subnets.value)}"
}

Теперь, пока у меня установлены параметры SSM с правильными именами, я могу использовать ${local.vpc_cidr_block} вместо ${var.vpc_cidr_block} везде в моем проекте.

Это работает отлично , пока я работаю с существующими ресурсами и существующим файлом состояния. То есть, если я создаю свои ресурсы, используя первые файлы переменных / tfvars, а затем переключаюсь на источник данных SSM. Но если я начинаю с нуля, используя версию SSM, я получаю ошибку value of 'count' cannot be computed из ресурсов, которые зависят от ${length(local.subnet_config_private_subnets)} и ${length(local.subnet_config_public_subnets)}.

Я не могу понять, почему это происходит, особенно когда значения не вызывают проблем при работе refresh, plan или apply с существующими ресурсами.

Помощь и / или предложения о том, как разобраться в этом, будут очень оценены.

...