【问题标题】:Get first element of a tuple in terraform在terraform中获取元组的第一个元素
【发布时间】:2021-11-12 02:33:18
【问题描述】:

我正在尝试仅使用一个子网部署我的 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)

有什么想法吗?

非常感谢!

【问题讨论】:

  • 可能是subnet_ids = [aws_subnet.private[0].id]
  • @ErvinSzilagyi 您应该考虑更完整地写出来作为答案,因为我认为这正是 OP 所缺少的。 Hache,如果您分享从您尝试过的事情中得到的错误(也包括周围的上下文),那么得到答案会更容易。
  • @ydaetskcoR 根据您的建议,我添加了一个带有解释的答案。

标签: amazon-web-services kubernetes terraform amazon-eks


【解决方案1】:

EKS 节点组 subnet_ids 参数需要一个元组。在原始示例 subnet_ids = aws_subnet.private.*.id 中,使用了 splat 运算符。 spear 运算符 (*) 本质上创建了一个包含所有可用资源的元组,在我们的例子中是所有可用的子网。

如果我们只想传递所有可用子网中的一个子网,我们必须创建一个包含单个元素的元组。我们可以通过从所有现有元素中获取第一个元素来做到这一点,例如:

subnet_ids = [aws_subnet.private[0].id]

虽然这可能可行,但我个人并不认为这是一个优雅的解决方案。当然,实现相同结果的更好方法是将local.subnet_priv 元组修改为仅包含一个子网ID。

【讨论】:

猜你喜欢
  • 2019-04-19
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多