aws_route_table_association不适用于所有专用*子网-Terraform

时间:2018-07-05 21:40:18

标签: amazon-web-services amazon-ec2 automation devops terraform

我使用下面的资源块创建了两个子网。

this.todosRef.on('child_removed', snapshot => {
  const removedTodo = {
    key: snapshot.key,
    value: snapshot.val()
  }
  const index = this.state.todos.indexOf(removedTodo);

  let todos = this.state.todos.splice(index, removedTodo);
  todos.splice(index, 1);

  this.setState({
    todos: todos
  });
});

之后,我创建了eip,nat,私有路由表,将路由添加到私有路由表,最后,当我尝试将私有路由表与private *子网关联时,terraform部分起作用,即,在4个子网中只有2个私有子网与私有路由表关联。

resource "aws_subnet" "private" {
  count                   = "${length(var.private_subnet)}"
  vpc_id                  = "${aws_vpc.vpcname.id}"
  cidr_block              = "${var.private_subnet[count.index]}"
  availability_zone       = "${data.aws_availability_zones.available.names[count.index]}"
  map_public_ip_on_launch = false

  tags {
    Name        = "${var.private}-${format("%01d", count.index + 1)}"
    Environment = "${terraform.workspace}"
  }
} 

要将该关联应用于所有专用子网,我需要更改什么。

resource "aws_route_table_association" "private-subnet-association" {
  subnet_id      = "${element(aws_subnet.private.*.id, count.index)}"
  route_table_id = "${aws_vpc.vpcname.private_route_table.id}"
}

1 个答案:

答案 0 :(得分:2)

变量nat_gateway_eip来自哪里?您需要使用完整资源以TYPE.NAME.ATTR

格式进行引用

它应该看起来像这样……${element(aws_eip.RESOURCE_NAME.*.id, count.index)}

或者,您需要使正在创建nat_gateway的模块/文件输出eip_id值并从远程状态引用它。

编辑:随着问题的变化,更新答案。

您需要创建多个关联才能将此路由表关联到不同的子网。

您当前的子网关联块未进行任何迭代。语法RESOURCE.NAME.*.ATTR并不表示“通配符”,它用于包含count的资源。