在terraform中引用多个aws_instance进行模板输出。

问题描述 投票:0回答:1

我们想把服务部署到几个区域.看起来是因为有了 aws 提供者,我们不能只用 countfor_each,因为提供者不能被插值。因此,我需要手动设置。

resource "aws_instance" "app-us-west-1" {
   provider = aws.us-west-1
   #other stuff
}

resource "aws_instance" "app-us-east-1" {
  provider = aws.us-east-1
  #other stuff
}

我想在运行这个的时候,创建一个文件,其中包含所有创建的IP(对于一个sible清单)。

我在看这个答案。https:/stackoverflow.coma61788089169252。

并试图根据我的情况进行调整。

resource "local_file" "app-hosts" {
   content = templatefile("${path.module}/templates/app_hosts.tpl",
     {
        hosts = aws_instance[*].public_ip
     }
   )
   filename = "app-hosts.cfg"
}

然后设置相应的模板

但是这样就失败了。

Error: Invalid reference

  on app.tf line 144, in resource "local_file" "app-hosts":
 122:        hosts = aws_instance[*].public_ip

A reference to a resource type must be followed by at least one attribute
access, specifying the resource name

我怀疑我不能只引用所有的... ... aws_instance 像上面这样定义。也许是指所有 aws_instance 在这个文件中,我需要使用不同的语法。

或者也许我需要使用一个模块。谁能确认一下?

使用terraform v0.12.24

EDIT:提供者的定义使用别名,而且都是在同一个 app.tf我天真地以为可以一次性应用于与 terraform apply (我有没有说过,我是一个初学者,我是一个初学者。terraform?):

  provider "aws" {
     alias  = "us-east-1"
     region = "us-east-1"
   }

  provider "aws" {
    alias  = "us-west-1"
    region = "us-west-1"
  }
terraform
1个回答
0
投票

我目前的解决方法是不做一个 join 但只是将它们一一列举出来。

 {
   host1 = aws_instance.app-us-west-1.public_ip
   host2 = aws_instance.app-us-east-1.public_ip
   # more hosts
 }
© www.soinside.com 2019 - 2024. All rights reserved.