创建一组资源,也通过模块,在Terraform中使用for_?
我有一组我想在Terraform中创建的资源,一些是使用创建一组资源,也通过模块,在Terraform中使用for_?,terraform,Terraform,我有一组我想在Terraform中创建的资源,一些是使用resource本地创建的,另一些是通过调用module创建的。我需要几套那样的一套看起来像 module "my_secret_one" { source = "rhythmictech/secretsmanager-random-secret/aws" version = "1.2.0" length = 16 name
resource
本地创建的,另一些是通过调用module
创建的。我需要几套那样的一套看起来像
module "my_secret_one" {
source = "rhythmictech/secretsmanager-random-secret/aws"
version = "1.2.0"
length = 16
name = "my_secret_one"
description = "..."
}
resource "postgresql_role" "my_secret_one_role" {
name = "my_secret_one"
login = true
password = module.my_secret_one.secret
}
// and few other resources also dependent on "my_secret_one".
现在,我实际上有几个秘密,我的秘密一个,我的秘密二个,我的秘密三个…
我如何在terraform中声明为所有这些创建所有模块和资源,使用
for_each
?这里的第一步是定义一个描述要创建的对象的集合。在您的案例中,似乎只有名称和描述在不同的机密中有所不同,因此这可能是定义这些机密的变量的一个很好的候选:
variable "secrets" {
type = map(object({
description = string
}))
}
(如果您只打算在模块内部使用此选项,那么您也可以使用局部值而不是输入变量,但生成对象映射的原则仍然相同。)
然后,您可以将该映射用作模块的每个的,将模块用作Postgres角色的每个
的,以便Terraform可以查看这些对象之间的关系:
module "secret" {
source = "rhythmictech/secretsmanager-random-secret/aws"
version = "1.2.0"
for_each = var.secrets
name = each.key
description = each.value.description
length = 16
}
resource "postgresql_role" "secret" {
for_each = module.secret
login = true
password = each.value.secret # each.value here is an instance of module.secret
}
关于使用Terraform管理机密的常见警告适用于此:请注意,Terraform需要跟踪机密值作为状态快照的一部分,因此您应该确保此配置的状态快照存储在足够安全的位置。有关更多信息,请参阅Terraform文档中的。这里的第一步是定义一个描述要创建的对象的集合。在您的案例中,似乎只有名称和描述在不同的机密中有所不同,因此这可能是定义这些机密的变量的一个很好的候选:
variable "secrets" {
type = map(object({
description = string
}))
}
(如果您只打算在模块内部使用此选项,那么您也可以使用局部值而不是输入变量,但生成对象映射的原则仍然相同。)
然后,您可以将该映射用作模块的每个
的,将模块用作Postgres角色的每个
的,以便Terraform可以查看这些对象之间的关系:
module "secret" {
source = "rhythmictech/secretsmanager-random-secret/aws"
version = "1.2.0"
for_each = var.secrets
name = each.key
description = each.value.description
length = 16
}
resource "postgresql_role" "secret" {
for_each = module.secret
login = true
password = each.value.secret # each.value here is an instance of module.secret
}
关于使用Terraform管理机密的常见警告适用于此:请注意,Terraform需要跟踪机密值作为状态快照的一部分,因此您应该确保此配置的状态快照存储在足够安全的位置。有关更多信息,请参阅Terraform文档中的。Terraform>=0.13?Terraform>=0.13?