我有一个这样的Terraform模块:
module "helloworld" {
source = ../service"
}
和../service
包含:
resource "aws_cloudwatch_metric_alarm" "cpu_max" {
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "2"
... etc
}
如何覆盖模块中的service
变量comparison_operator
和evaluation_periods
?
E.g。将cpu_max
设置为4
是否与模块中的aws_cloudwatch_metric_alarm .cpu_max.evaluation_periods = 4
一样简单?
答案 0 :(得分:6)
您必须使用具有默认值的variable
。
variable "evaluation_periods" {
default = 4
}
resource "aws_cloudwatch_metric_alarm" "cpu_max" {
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "${var.evaluation_periods}"
}
在你的模块中
module "helloworld" {
source = ../service"
evaluation_periods = 2
}
答案 1 :(得分:2)
您必须在模块中定义变量。你的模块将是:
variable "eval_period" {default = 2} # this becomes the input parameter of the module
resource "aws_cloudwatch_metric_alarm" "cpu_max" {
comparison_operator = "GreaterThanOrEqualToThreshold"
evaluation_periods = "${var.eval_period}"
... etc
}
你可以像以下一样使用它:
module "helloworld" {
source = ../service"
eval_period = 4
}
答案 2 :(得分:2)
除了其他使用变量的答案:
如果您想覆盖整个资源或只是合并配置值,还可以使用Terraform中的覆盖行为:
使用此功能,您可以拥有一个名为service_override.tf
的文件,其内容为:
resource "aws_cloudwatch_metric_alarm" "cpu_max" {
comparison_operator = "LessThanThreshold"
evaluation_periods = "4"
... etc
}