简体   繁体   中英

Terraform AWS EKS Cluster Deployment Error

I have been trying to deploy an EKS cluster within us-east-1 region and I see that one of the availability zone us-east-1e does not support the setup due to which my cluster fails to create.

Please see the error below and let me know if there is a way to skip us-east-1e AZ within terraform deployment.

Plan: 26 to add, 0 to change, 0 to destroy.


This plan was saved to: development.tfplan

To perform exactly these actions, run the following command to apply: terraform apply "development.tfplan"

(base) _C0DL:deploy-eks-cluster-using-terraform-master snadella001$ terraform apply "development.tfplan"data.aws_availability_zones.available_azs: Reading... [id=2020-12-04 22:10:40.079079 +0000 UTC] data.aws_availability_zones.available_azs: Read complete after 0s [id=2020-12-04 22:10:47.208548 +0000 UTC] module.eks-cluster.aws_eks_cluster.this[0]: Creating...

Error: error creating EKS Cluster (eks-ha): UnsupportedAvailabilityZoneException: Cannot create cluster 'eks-hia' because us-east-1e, the targeted availability zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these availability zones: us-east-1a, us-east-1b, us-east-1c, us-east-1d, us-east-1f { RespMetadata: { StatusCode: 400, RequestID: "0f2ddbd1-107f-490e-b45f-6985e1c7f1f8" }, ClusterName: "eks-ha", Message_: "Cannot create cluster 'eks-hia' because us-east-1e, the targeted availability zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these availability zones: us-east-1a, us-east-1b, us-east-1c, us-east-1d, us-east-1f", ValidZones: [ "us-east-1a", "us-east-1b", "us-east-1c", "us-east-1d", "us-east-1f" ] }

on.terraform/modules/eks-cluster/cluster.tf line 9, in resource "aws_eks_cluster" "this": 9: resource "aws_eks_cluster" "this" {

Please find the EKS cluster listed below:

# 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 & 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 && 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 && 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"]
}
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)
  ]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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