4

我已经设置了两个提供程序(2 个 aws 帐户),我想在每个帐户上启动一个 ec2 实例,而无需重复代码。

我尝试使用带有 count 和 for_each 的循环,但没有运气。

variable "providers" {
  default = [
    "aws.dev",
    "aws.qa"
  ]
}

resource "aws_instance" "test" {
  for_each      = toset(var.providers)
  ami           = "ami-0dc9a8d2479a3c7d7"
  instance_type = "t2.micro"
  provider      = each.value
}

我得到了下一个错误:

错误:provider.each:没有安装合适的版本版本要求:“(任何版本)”安装的版本:无

我尝试了类似的代码迭代其他值,如 ami、实例类型,它可以工作。

我不确定是否有我看不到的东西或不支持提供者的迭代。

对此有任何想法或解决方法吗?谢谢。

4

1 回答 1

1

Terraform 在其他处理之前将资源与提供者相关联(因为提供者选择会影响其含义,aws_instance从而影响内部有效的其他内容),因此provider参数必须是对提供者的字面引用。此处的错误消息是因为 Terraform 认为您正在为名为 "each" and 的提供者请求提供者配置alias = "value",因此它正在尝试安装该提供者。

在 Terraform 中表示多个环境的主要方式是为每个环境使用一个单独的根模块,其中包含该环境的后端和提供程序配置,然后将环境之间共享的公共元素分解为一个或多个共享模块。然后,您可以分别对每个环境应用更改,从而降低对一个环境的机会无意中影响另一个环境的风险。

于 2019-10-28T21:19:46.000 回答