#amazon-web-services #kubernetes #terraform #amazon-eks
Вопрос:
Я пытаюсь развернуть свои узлы EKS только с одной подсетью, но я не знаю, как предоставить ресурсу только одну. Я покажу тебе свой код:
resource "aws_eks_node_group" "managed_workers" {
for_each = var.nodegroups[terraform.workspace]
cluster_name = aws_eks_cluster.cluster.name
node_group_name = each.value.Name
node_role_arn = aws_iam_role.managed_workers.arn
subnet_ids = aws_subnet.private.*.id
С другой стороны, у меня есть обычная задача-создать подсети и предоставить доступ ко всему моему коду:
resource "aws_subnet" "private" {
count = length(local.subnet_priv)
vpc_id = var.vpc_id[terraform.workspace]
cidr_block = local.subnet_priv[count.index]
availability_zone = element(lookup(var.availability_zones, terraform.workspace), count.index)
map_public_ip_on_launch = false
Итак … я не знаю, как получить из моего аргумента subnet_ids только первую подсеть кортежа. Теперь, как вы можете видеть, я получаю их все, но я пробовал разные способы, но безуспешно (aws_subnet.private[0].*.id , aws_subnet.private[0].id, etc)
Есть идеи?
Большое спасибо!
Комментарии:
1. Возможно
subnet_ids = [aws_subnet.private[0].id]
.2. @ErvinSzilagyi вам следует подумать о том, чтобы написать это более подробно в качестве ответа, потому что я думаю, что это именно то, чего не хватало оператору. Хеш, может быть проще получить ответ, если вы поделитесь ошибками (также с окружающим контекстом), которые вы получили от того, что вы пробовали.
3. @ydaetskcoR К вашей рекомендации я добавил ответ с объяснением.
Ответ №1:
Аргументы группы узлов EKS subnet_ids
ожидают кортеж. В исходном примере subnet_ids = aws_subnet.private.*.id
используется оператор splat. Оператор spear ( *
) по существу создает кортеж со всеми доступными ресурсами, в нашем случае со всеми доступными подсетями.
Если мы хотим передать только одну подсеть из всех доступных, мы должны создать кортеж с одним элементом. Мы могли бы сделать это, взяв первый элемент из всех существующих, например:
subnet_ids = [aws_subnet.private[0].id]
Хотя это может сработать, лично я не считаю это элегантным решением. Безусловно, лучший способ достичь того же результата-изменить local.subnet_priv
кортеж, чтобы он содержал только один идентификатор подсети.
Комментарии:
1. Нит:
*
это дляsplat
выражений .spread
Оператор (...
), с другой стороны, предназначен для группировки выражений2. Исправлено, спасибо, что заметили это.