如何在terraform脚本中多次使用随机密码

如何在terraform脚本中多次使用随机密码,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,如何在terraform脚本中多次使用随机密码。例如: 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" user

如何在terraform脚本中多次使用随机密码。例如:

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吗?

您可以使用count或for\u 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\u password.password[0]。result
random\u password.password[1]。result
用于您的结果值(
random\u password.password
无索引,当for\u each或count用于递归时,与terraform中的任何其他地图一样处理)。在本例中,我将计数设置为2,但这可以是任意整数。

aws_db_实例。示例[0]
aws_db_实例。示例[1]
,由
for_每个
循环根据
随机密码.密码
对象的数量创建。在循环中,您将资源引用为
each.value
(因此,
each.value.result
将等同于
random\u password.password.result

有关每个_的
的详细信息

编辑:重要提示…这只是一个如何计数/for_的例子。如果根据您创建的密码数量来计算实例的数量,那将非常尴尬(想想吧…)。你会想拍一张更大的图片,并考虑你实际上是想放大你的项目,然后把你的计数/ FROX每个逻辑建立在这个基础上。 EDIT2(因为我没有足够的业力来评论):没有理由输出不起作用。您使用的是什么版本的tf?)

此外,要获得结果列表,您可以执行以下操作:

output "passwords" {
  value = random_password.password[*].result
}

如果生成的每个密码(可能是您的情况)的密码要求相同,请使用
count

resource "random_password" "passwords" {
  count = 2
  length = 16
  special = true
}

resource "aws_db_instance" "db_instance_1" {
  ...
  password = random_password.passwords[0].result
}

resource "aws_db_instance" "db_instance_2" {
  ...
  password = random_password.passwords[1].result
}

output "db_instance_1_password" {
  value = random_password.passwords[0].result
}

output "db_instance_2_password" {
  value = random_password.passwords[1].result
}

如果密码要求不同,请定义多个
随机密码
资源:

resource "random_password" "password_1" {
  length = 16
  special = true
}

resource "random_password" "password_2" {
  length = 16
  special = false
  min_upper = 1
  min_lower = 1
  min_numeric = 1
}

resource "aws_db_instance" "db_instance_1" {
  ...
  password = random_password.password_1.result
}

resource "aws_db_instance" "db_instance_2" {
  ...
  password = random_password.password_2.result
}

output "db_instance_1_password" {
  value = random_password.password_1.result
}

output "db_instance_2_password" {
  value = random_password.password_2.result
}

在这两种情况下,考虑在输出中设置以隐藏来自TrrFrm命令输出的原始密码。我不能分别使用for_,因为每个aws_db_实例的用户名和实例类都不同。我基本上渴望知道如何在不同的块中使用随机密码。即使这样也不起作用。如何输出生成的密码输出“password0”{value=“${random_password.password[0].result}”