gyr*_*yre 5 terraform terraform-provider-aws
我有一个用例,我需要两个 AWS 提供商来提供不同的资源。默认aws提供程序在主模块中配置,该模块使用另一个定义附加aws提供程序的模块。
默认情况下,我希望两个提供商使用相同的 AWS 凭证,除非明确覆盖。
我想我可以做这样的事情。在主模块中:
locals {
foo_cloud_access_key = aws.access_key
foo_cloud_secret_key = aws.secret_key
}
variable "foo_cloud_access_key" {
type = string
default = local.foo_cloud_access_key
}
variable "foo_cloud_secret_key" {
type = string
default = local.foo_cloud_secret_key
}
Run Code Online (Sandbox Code Playgroud)
其中variablesfoo_cloud_secret_key和foo_cloud_access_key然后将被传递到子模块,如下所示:
module foobar {
...
foobar_access_key = var.foo_cloud_access_key
foobar_secret_key = var.foo_cloud_secret_key
...
}
Run Code Online (Sandbox Code Playgroud)
然后在哪里module foobar配置其附加内容并提供以下变量:
provider "aws" {
alias = "foobar_aws"
access_key = var.foobar_access_key
secret_key = var.foobar_secret_key
}
Run Code Online (Sandbox Code Playgroud)
当我运行 init 时,terraform会出现此错误(对于两个变量):
Error: Variables not allowed
on variables.tf line 66, in variable "foo_cloud_access_key":
66: default = local.foo_cloud_access_key
Variables may not be used here.
Run Code Online (Sandbox Code Playgroud)
是否有可能实现这样的目标,terraform或者还有其他方法可以实现这一目标吗?
拥有复杂的、计算出的变量默认值是可能的,但只有一种解决方法:
nullvariable "something" {
default = null
}
locals {
some_computation = ... # based on whatever data you want
something = var.something == null ? local.some_computation : var.something
}
Run Code Online (Sandbox Code Playgroud)
然后只使用local.something而不是var.something在其余的 terraform 文件中使用。
| 归档时间: |
|
| 查看次数: |
2600 次 |
| 最近记录: |