terraform - 如何在 terraform 脚本中多次使用 random_password
问题描述
如何在 terraform 脚本中多次使用 random_password。例如:
resource "random_password" "password" {
length = 16
special = true
override_special = "_%@"
}
resource "aws_db_instance" "example" {
instance_class = "db.t3.micro"
allocated_storage = 64
engine = "mysql"
username = "someone"
password = random_password.password.result
}
这将工作一次。如果我需要创建
resource "random_password" "password" {
length = 16
special = true
override_special = "_%@"
}
resource "aws_db_instance" "example1" {
instance_class = "db.t3.micro"
allocated_storage = 64
engine = "mysql"
username = "someone"
password = random_password.password.result
}
resource "aws_db_instance" "example2" {
instance_class = "db.t2.small"
allocated_storage = 64
engine = "mysql"
username = "anyone"
password = random_password.password.result
}
现在我需要创建 2 个随机密码。我可以在随机密码中使用计数吗?
解决方案
您可以使用 count 或 for_each 循环。
resource "random_password" "password" {
count = 2
length = 16
special = true
override_special = "_%@"
}
resource "aws_db_instance" "example" {
for_each = random_password.password
instance_class = "db.t3.micro"
allocated_storage = 64
engine = "mysql"
username = "someone"
password = each.value.result
}
这将导致结果值
random_password.password[0].result
和random_password.password[1].result
结果值(random_password.password
当 for_each 或 count 用于递归时,没有索引被视为 terraform 中的任何其他地图)。我在示例中将计数设置为 2,但这可以是任何 int。
和
aws_db_instance.example[0]
,aws_db_instance.example[1]
由for_each
循环根据random_password.password
对象的数量创建。在循环中,您将资源引用为each.value
(因此,each.value.result
将等同于random_password.password.result
)
更多关于for_each
这里
编辑:重要说明......这只是 count/for_each 如何工作的一个例子。根据您创建的密码数量来确定您的实例数量真的很尴尬(考虑一下......)。您将需要更全面地查看并考虑您实际希望如何扩展您的项目,然后将您的 count/for_each 逻辑基于此。
EDIT2(因为我没有足够的业力来评论):没有理由输出不应该工作。您使用的是什么版本的 tf?)。
此外,要获取您可以执行的结果列表:
output "passwords" {
value = random_password.password[*].result
}
推荐阅读
- azure-mysql-database - 未找到 Azure 服务器名称
- java - 在hostinger.com上调用JSON时出现意外的响应代码503错误
- azure - Azure 流分析 - 使用参考数据时没有输入事件
- excel - 我们可以像这样改变形状或对象组的边框颜色吗?
- time - 将模拟读数转换为时间范围
- xamarin.forms - Xamarin.Forms:以编程方式设置 Rowspan
- amazon-web-services - 如何降低(开放)Vpn 服务器的带宽成本?
- python - Django:使用名为“id”的 URL 关键字参数调用预期的视图 likeList
- ios - 如何支持相同应用但不同环境的通用链接?
- javascript - 如何添加依赖来响应?