繁体   English   中英

为使用 Terraform 创建的 EKS 集群指定 su.nets

[英]Specify subnets for EKS cluster created with Terraform

我正在 Terraform 中创建一个 EKS 集群。在我的 EKS terraform 资源中,我指定了同样使用 Terraform 创建的 su.net ID。以下是我拥有的 su.net 资源:

resource “aws_subnet” “public” {
  count = length(local.availability_zone_names)
  vpc_id = aws_vpc.eks_vpc.id
  cidr_block = cidrsubnet(var.vpc_cidr, 12, count.index + 1)
  availability_zone = local.availability_zone_names[count.index]
  map_public_ip_on_launch = true

  tags = {
    Name = “${var.application}-${terraform.workspace}-PublicSubnet${count.index + 1}”
  }
}

resource “aws_subnet” “private” {
  count = length(local.availability_zone_names)
  vpc_id = aws_vpc.eks_vpc.id
  cidr_block = cidrsubnet(var.vpc_cidr, 12, count.index + 4)
  availability_zone = local.availability_zone_names[count.index]
  map_public_ip_on_launch = false

  tags = {
    Name = “${var.application}-${terraform.workspace}-PrivateSubnet${count.index + 1}”
  }
}

以下是我为 EKS 集群提供的资源:

resource “aws_eks_cluster” “eks_cluster” {
  name = “${var.application}-${terraform.workspace}”
  role_arn = aws_iam_role.eks_role.arn

  vpc_config {
    security_group_ids = [
      aws_security_group.eks_control_plane_sg.id,
      aws_security_group.eks_cluster_sg.id
    ]

    subnet_ids = [
      local.private_subnet_ids[count.index],
      local.public_subnet_ids[count.index]
    ]
  }
}

下面是我设置的局部变量:

locals {
  availability_zone_names = data.aws_availability_zones.availability_zones.names
  public_subnet_ids = aws_subnet.public.*.id
  private_subnet_ids = aws_subnet.private.*.id
}

我收到的错误涉及对“计数”object 的引用。由于我使用计数 object 创建这些 su.net,因此我无法在 eks 集群的资源中使用“count.index”。 下面是错误。 关于如何克服这个问题的任何建议都会有所帮助。

Error: Reference to “count in non-counted context

on eks.tf line 17, in resource “aws_eks_cluster” “eks_cluster”:
17: local.public_subnet_ids[count.index]

The “count” object can only be used in “module”, “resource”, and “data” blocks, and only when the “count” argument is set.

我没有在 eks 集群资源中使用计数 object,因为我只想创建 1 个集群。 关于如何在此 eks 集群资源中指定 su.net 的任何建议都会有所帮助。

您可以使用concat构造su.net_ids

resource “aws_eks_cluster” “eks_cluster” {
  name = “${var.application}-${terraform.workspace}”
  role_arn = aws_iam_role.eks_role.arn

  vpc_config {
    security_group_ids = [
      aws_security_group.eks_control_plane_sg.id,
      aws_security_group.eks_cluster_sg.id
    ]

    subnet_ids = concat(local.private_subnet_ids,  local.public_subnet_ids)
    ]
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM