我试图添加新文物一合成监控器使用通用模块“监视器”,我们在terraform,其中我还想附加新的警报条件策略。如果我一个一个地创建资源,但是由于我想提交所有的更改,它会很好地工作,显示如下所示的错误。
Error: Invalid count argument
on .terraform/modules/monitor/modules/synthetics/syn_alert.tf line 11, in resource "newrelic_alert_policy" "policy":
11: count = var.policy_id != null ? 0 : var.create_alerts == true ? 1 : var.create_multilocation_alerts == true ? 1 : 0
The "count" value depends on resource attributes that cannot be determined
until apply, so Terraform cannot predict how many instances will be created.
To work around this, use the -target argument to first apply only the
resources that the count depends on.
我希望在我逐步尝试的过程中,这应该会准确地工作,甚至我也尝试过寻找作为资源依赖项的解决方案,所以我也添加了需要的depends_on资源,比如
depends_on = [newrelic_alert_policy.harvester_ping_failure_alert_policy,newrelic_alert_channel.slack_channel]
但还是没有像预期的那样起作用。
发布于 2022-11-03 23:07:12
此错误表明,您在这里包含的一个输入变量的值在应用步骤之前是不知道的:
var.policy_id
var.create_alerts
var.create_multilocation_alerts
您没有具体说明如何在调用module
块中定义这些变量,但我猜想policy_id
可能就是其中的一个问题,因为您可能已经从父模块中的托管资源实例中分配了一个属性,而与该资源实例对应的远程对象还没有创建,因此它的ID还不清楚。
如果是这样的话,您将需要以不同的方式定义这个对象,以便将是否声明该对象的选择作为独立于ID本身的值,然后确保是否声明的选择不是基于配置中任何其他托管资源的结果。
一种方法是这样做:
variable "project" {
type = object({
id = string
})
default = null
}
这意味着,关于是否设置此对象的决定可以由整个对象的“空”表示,即使非空对象中的id
属性可能是未知的。
module "monitor" {
# ...
project = {
id = whatever_resource_type.name.id
}
}
如果您在这里传递的ID本身就是一个具有id
属性的资源实例(正如我前面所示),那么您还可以通过立即分配整个对象来使其更简洁:
module "monitor" {
# ...
project = whatever_resource_type.name
}
Terraform将检查以确保whatever_resource_type.name
有一个id
属性,如果有,它将使用它填充模块中变量的id
属性。
https://stackoverflow.com/questions/74298892
复制相似问题