![](/img/trans.png)
[英]How to create an EKS cluster with public and private subnets using terraform?
[英]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.