Ошибка развертывания кластера Terraform AWS EKS

#amazon-web-services #terraform #terraform-provider-aws #amazon-eks

#amazon-web-services #terraform #terraform-provider-aws #amazon-eks

Вопрос:

Я пытался развернуть кластер EKS в регионе us-east-1 и вижу, что одна из зон доступности us-east-1e не поддерживает настройку, из-за которой не удается создать мой кластер.

Пожалуйста, ознакомьтесь с приведенной ниже ошибкой и дайте мне знать, есть ли способ пропустить us-east-1e AZ при развертывании terraform.

План: 26 для добавления, 0 для изменения, 0 для уничтожения.


Этот план был сохранен в: development.tfplan

Чтобы выполнить именно эти действия, выполните следующую команду для применения: terraform применить «development.tfplan»

(базовый) _C0DL: deploy-eks-cluster-using-terraform-master snadella001$ terraform применить данные «development.tfplan».aws_availability_zones.available_azs: Чтение… [id= 2020-12-04 22:10:40,079079 0000 UTC] data.aws_availability_zones.availability_azs: чтение завершено через 0 секунд [id=2020-12-04 22:10:47.208548 0000 UTC] module.eks-cluster.aws_eks_cluster.this[0]: Создание…

Ошибка: ошибка при создании кластера EKS (eks-ha): исключение UnsupportedAvailabilityZoneException: не удается создать кластер ‘eks-hia’, поскольку us-east-1e, целевая зона доступности, в настоящее время не обладает достаточной пропускной способностью для поддержки кластера. Повторите попытку и выберите одну из следующих зон доступности: us-east-1a, us-east-1b, us-east-1c, us-east-1d, us-east-1f { RespMetadata: { StatusCode: 400, RequestID: «0f2ddbd1-107f-490e-b45f-6985e1c7f1f8» },Имя кластера: «eks-ha», Message_: «Не удается создать кластер «eks-hia», поскольку us-east-1e, целевая зона доступности, в настоящее время не обладает достаточной пропускной способностью для поддержки кластера. Повторите попытку и выберите одну из следующих зон доступности: us-east-1a, us-east-1b, us-east-1c, us-east-1d, us-east-1f», допустимые зоны: [ «us-east-1a», «us-east-1b», «us-east-1c», «us-east-1d», «us-east-1f» ] }

в .terraform/modules/eks-cluster/cluster.tf строка 9, в ресурсе «aws_eks_cluster» «this»: 9: ресурс «aws_eks_cluster» «this» {

Пожалуйста, найдите кластер EKS, указанный ниже:

 # create EKS cluster
module "eks-cluster" {
  source           = "terraform-aws-modules/eks/aws"
  version          = "12.1.0"
  cluster_name     = var.cluster_name
  cluster_version  = "1.17"
  write_kubeconfig = false
  availability-zones  = ["us-east-1a", "us-east-1b", "us-east-1c"]## tried but does not work
  
  subnets = module.vpc.private_subnets
  vpc_id  = module.vpc.vpc_id

  worker_groups_launch_template = local.worker_groups_launch_template

  # map developer amp; admin ARNs as kubernetes Users
  map_users = concat(local.admin_user_map_users, local.developer_user_map_users)
}

# get EKS cluster info to configure Kubernetes and Helm providers
data "aws_eks_cluster" "cluster" {
  name = module.eks-cluster.cluster_id
}
data "aws_eks_cluster_auth" "cluster" {
  name = module.eks-cluster.cluster_id
}

#################
# Private subnet
#################
resource "aws_subnet" "private" {
  count = var.create_vpc amp;amp; length(var.private_subnets) > 0 ? length(var.private_subnets) : 0

  vpc_id                          = local.vpc_id
  cidr_block                      = var.private_subnets[count.index]
  # availability_zone  = ["us-east-1a", "us-east-1b", "us-east-1c"]
  availability_zone               = length(regexall("^[a-z]{2}-", element(var.azs, count.index))) > 0 ? element(var.azs, count.index) : null
  availability_zone_id            = length(regexall("^[a-z]{2}-", element(var.azs, count.index))) == 0 ? element(var.azs, count.index) : null
  assign_ipv6_address_on_creation = var.private_subnet_assign_ipv6_address_on_creation == null ? var.assign_ipv6_address_on_creation : var.private_subnet_assign_ipv6_address_on_creation

  ipv6_cidr_block = var.enable_ipv6 amp;amp; length(var.private_subnet_ipv6_prefixes) > 0 ? cidrsubnet(aws_vpc.this[0].ipv6_cidr_block, 8, var.private_subnet_ipv6_prefixes[count.index]) : null

  tags = merge(
    {
      "Name" = format(
        "%s-${var.private_subnet_suffix}-%s",
        var.name,
        element(var.azs, count.index),
      )
    },
    var.tags,
    var.private_subnet_tags,
  )
}

variable "azs" {
  description = "A list of availability zones names or ids in the region"
  type        = list(string)
  default     = []
  #default     = ["us-east-1a", "us-east-1b","us-east-1c","us-east-1d"]
}
 

Комментарии:

1. Где ваш код terraform? Как вы назначаете подсети?

2. Извините. Обновлен код в вопросе, опубликованном выше.

3. @jordanm, пожалуйста, дайте мне знать, если у вас была возможность проверить код

4. Это подсети, в которые входит us-east-1e. module.vpc.private_subnets включает подсеть в регионе us-east-1e. Это то, что вам нужно исправить.

5. @jordanm, спасибо!! Добавлен блок кода подсетей. Я пытался предоставить AZS «us-east-1a», «us-east-1b», «us-east-1c», но это не сработало. Не совсем уверен, что я упускаю что-то очень простое, но любая помощь была бы очень признательна.

Ответ №1:

 module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "2.44.0"

  name = "${var.name_prefix}-vpc"
  cidr = var.main_network_block
  # azs  = data.aws_availability_zones.available_azs.names
  azs  = ["us-east-1a", "us-east-1b", "us-east-1c"]

  private_subnets = [
    # this loop will create a one-line list as ["10.0.0.0/20", "10.0.16.0/20", "10.0.32.0/20", ...]
    # with a length depending on how many Zones are available
    for zone_id in data.aws_availability_zones.available_azs.zone_ids :
    cidrsubnet(var.main_network_block, var.subnet_prefix_extension, tonumber(substr(zone_id, length(zone_id) - 1, 1)) - 1)
  ]