根据 Terraform 中可用区域的足够容量过滤掉子网 ID

问题描述 投票:0回答:2

我正在尝试部署 EKS 集群,除了一个之外,一切似乎都很好!

外观模块看起来像这样:

module "eks" {
  source = "../../../../infrastructure_modules/eks"

  ## EKS ##
  create_eks      = var.create_eks
  cluster_version = var.cluster_version
  cluster_name    = local.cluster_name
  vpc_id          = data.aws_vpc.this.id
  subnets         = data.aws_subnet_ids.this.ids

  # note: either pass worker_groups or node_groups
  # this is for (EKSCTL API) unmanaged node group
  worker_groups = var.worker_groups

  # this is for (EKS API) managed node group
  node_groups = var.node_groups

  ## Common tag metadata ##
  env      = var.env
  app_name = var.app_name
  tags     = local.eks_tags
  region   = var.region
}

通过以下块检索VPC id

data "aws_vpc" "this" {
  tags = {
    Name = "tagName"
  }
}

然后用于检索 subnet_IDs,如下所示:

data "aws_subnet_ids" "this" {
  vpc_id = data.aws_vpc.this.id
}

尽管如此,部署此命令会导致错误,并指出:

错误:创建 EKS 集群(数据层-eks)时出错: UnsupportedAvailabilityZoneException:无法创建集群 'data-layer-eks' 因为 us-east-1e,目标可用区, 目前没有足够的容量来支持集群。

这是一个“众所周知的错误”,任何人都可能会遇到这个错误,甚至对于 EC2 也是如此。 我可以通过简单地对子网值进行硬编码来解决这个问题

,但这确实是不可取的并且很难维护。

所以问题是,如何根据容量足够的可用区过滤出subnet_ID?

首先,您需要收集子网及其所有属性:

amazon-web-services terraform terraform-provider-aws
2个回答
2
投票

data.aws_subnet.this
 现在是包含所有子网及其属性的 
map(object)

。您现在可以相应地按可用区域进行过滤:

subnets = [for subnet in data.aws_subnet.this : subnet.id if subnet.availability_zone != "us-east-1e"]
如果条件对您来说更容易,您还可以按真实条件进行过滤:

subnets = [for subnet in data.aws_subnet.this : subnet.id if contains(["us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d"], subnet.availability_zone)]

这取决于您的个人使用情况。


你可以尝试这样的事情:


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.