我有一个 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
问题plan
时apply
。
非常感谢您提供有关如何解决此问题的帮助和/或建议。