0

我有一个 Terraform 项目,我一直在使用AWS Systems Manager Parameters进行配置。想象一下具有以下内容的 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)}and的资源中得到一个错误${length(local.subnet_config_public_subnets)}

我无法弄清楚为什么会发生这种情况,尤其是当这些值不会对运行 , 或针对现有资源造成任何refresh问题planapply

非常感谢您提供有关如何解决此问题的帮助和/或建议。

4

0 回答 0