Получить первый элемент кортежа в terraform

#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. Исправлено, спасибо, что заметили это.