【发布时间】:2017-11-02 05:45:48
【问题描述】:
假设我有两个不同的环境 AWS 和谷歌云(只是一个例子,可以是任何基础设施)。 两者都有很多种类的资源、变量等,可能用法和连接方式也会不同。
我想在同一个 Terraform 脚本中同时使用它们,这可能吗?还是每个景观都需要自己的脚本?
我是否可以添加一些代码(如果可以,支持哪种语言?)来识别环境并运行相关资源/提供者等?
提前致谢!
【问题讨论】:
假设我有两个不同的环境 AWS 和谷歌云(只是一个例子,可以是任何基础设施)。 两者都有很多种类的资源、变量等,可能用法和连接方式也会不同。
我想在同一个 Terraform 脚本中同时使用它们,这可能吗?还是每个景观都需要自己的脚本?
我是否可以添加一些代码(如果可以,支持哪种语言?)来识别环境并运行相关资源/提供者等?
提前致谢!
【问题讨论】:
您可以在 provider.tf 文件中定义多个提供程序。我没有在云提供商中尝试过,但这里是尝试的语法。
variable "aws_profile" {}
variable "region" {}
provider "aws" {
alias = "west"
profile = "${var.aws_profile}"
region = "${var.region}"
shared_credentials_file = "~/.aws/credentials"
}
provider "google" {
alias = "central"
credentials = "${file("account.json")}"
project = "my-gce-project"
region = "us-central1"
}
然后您可以指定该资源的提供者。
# West coast region
provider "aws" {
alias = "west"
region = "us-west-2"
}
如果未指定提供程序,则使用默认提供程序配置(未设置别名的提供程序配置)。 provider字段的值为TYPE.ALIAS,如上面的“aws.west”。
https://www.terraform.io/docs/configuration/providers.html
编辑:terraform 加载顺序无关紧要。
【讨论】: