在 terraform 中获取元组的第一个元素
Get first element of a tuple in terraform
我正在尝试仅使用一个子网部署我的 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)
有什么想法吗?
非常感谢!
EKS 节点组 subnet_ids
参数需要一个元组。在原始示例 subnet_ids = aws_subnet.private.*.id
中,使用了 splat 运算符。 spear 运算符 (*
) 实质上创建了一个包含所有可用资源的元组,在我们的例子中是所有可用的子网。
如果我们只想传递所有可用子网中的一个子网,我们必须创建一个只有一个元素的元组。我们可以通过从所有现有元素中取出第一个元素来做到这一点,例如:
subnet_ids = [aws_subnet.private[0].id]
虽然这可能有效,但我个人并不真正认为这是一个优雅的解决方案。当然,实现相同结果的更好方法是修改 local.subnet_priv
元组以仅包含一个子网 ID。
我正在尝试仅使用一个子网部署我的 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)
有什么想法吗?
非常感谢!
EKS 节点组 subnet_ids
参数需要一个元组。在原始示例 subnet_ids = aws_subnet.private.*.id
中,使用了 splat 运算符。 spear 运算符 (*
) 实质上创建了一个包含所有可用资源的元组,在我们的例子中是所有可用的子网。
如果我们只想传递所有可用子网中的一个子网,我们必须创建一个只有一个元素的元组。我们可以通过从所有现有元素中取出第一个元素来做到这一点,例如:
subnet_ids = [aws_subnet.private[0].id]
虽然这可能有效,但我个人并不真正认为这是一个优雅的解决方案。当然,实现相同结果的更好方法是修改 local.subnet_priv
元组以仅包含一个子网 ID。