#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)
]