首页 > 解决方案 > 如何在 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 个随机密码。我可以在随机密码中使用计数吗?

标签: terraformterraform-provider-aws

解决方案


您可以使用 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].resultrandom_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
}

推荐阅读