amazon-web-services - Terraform:如何提供使用一个资源 block 创建的资源的属性?

标签 amazon-web-services terraform terraform-provider-aws

如何为 subnet_ids 属性提供多个值,如下所示?

resource "aws_subnet" "db_subnet" {
  for_each = var.db_subnet_cidrs

  vpc_id            = aws_vpc.default.id
  availability_zone = each.key
  cidr_block        = each.value
}

resource "aws_db_subnet_group" "default" {
  name       = "default-subnet-group"
  subnet_ids = ["aws_subnet.db_subnet.*.id"]

  tags = {
    Name = "database-subnet-group"
  }
}

子网已正确创建,但子网组未正确创建。当我应用这个时,我收到以下错误:

Error: Error creating DB Subnet Group: InvalidParameterValue: Some input subnets in :[aws_subnet.db_subnet.*.id] are invalid.
        status code: 400, request id: 0b68518f-e229-4f57-bf68-4ba46c1c75c2

最佳答案

您当前的代码正在尝试将数据库子网组的子网 ID 设置为等于 aws_subnet.db_subnet.*.id 的字符串文字,这显然不是有效的子网标识符。通常,Terraform 会警告您它与子网 ID 格式不匹配(例如 subnet-1234abcd),但它看起来像 aws_db_subnet_group resource doesn't currently validate this .

其次,您尝试使用 for_each 循环资源的输出的方式也行不通。如果您使用 count 循环您正在创建的子网,那么您将得到如下所示的内容:

resource "aws_subnet" "db_subnet" {
  count = length(var.db_subnet_cidrs)

  vpc_id            = aws_vpc.default.id
  availability_zone = count.index
  cidr_block        = var.db_subnet_cidrs[count.index]
}

resource "aws_db_subnet_group" "default" {
  name       = "default-subnet-group"
  subnet_ids = aws_subnet.db_subnet.*.id

  tags = {
    Name = "database-subnet-group"
  }
}

count 个循环资源有 splat operator输出已将所有输出作为列表,因此您可以将其直接传递到 aws_db_subnet_group 资源。

但是,如果您想使用 for_each 来循环,那么您当前需要使用稍微不同的语法来获取循环资源中的值:

resource "aws_subnet" "db_subnet" {
  for_each = var.db_subnet_cidrs

  vpc_id            = aws_vpc.default.id
  availability_zone = each.key
  cidr_block        = each.value
}

resource "aws_db_subnet_group" "default" {
  name       = "default-subnet-group"
  subnet_ids = values(aws_subnet.db_subnet)[*].id

  tags = {
    Name = "database-subnet-group"
  }
}

这将提取循环的 aws_subnet 资源的值,获取所有这些值,然后仅使用资源中的 id 属性。使用 splat 运算符再次创建一个列表,您可以将其直接传递到 aws_db_subnet 资源中的 subnet_ids 参数。

关于amazon-web-services - Terraform:如何提供使用一个资源 block 创建的资源的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097391/

相关文章:

terraform - 是否可以将 terraform 工作区链接到 AWS 账户

amazon-web-services - 如何通过cloudformation删除包含图像的aws ECR存储库?

kubernetes - 如何从 Terraform 中的不同目录访问文件和变量?

Terraform 文件夹结构

terraform - 以编程方式更新 .tfvars 文件中的变量值?

terraform - Terraform 中使用多个 user_data 文件

amazon-web-services - AWS EMR - 因错误而终止 在主实例上应用程序配置失败

ios - 无法调用非函数类型的值 'AWSSNS'

amazon-web-services - 是否可以仅使用 AWS 控制台通过 EKS 部署现有容器?

amazon-web-services - AWS 服务的 AWS 私有(private)子网安全组导出白名单?