【问题标题】:Terraform AWS - route table association - add multiple subnetTerraform AWS - 路由表关联 - 添加多个子网
【发布时间】:2021-02-25 08:05:24
【问题描述】:

我在我的 vpc 中创建了 4 个子网,其中 2 个是公共的,其中 2 个是私有的。 我需要将 2 个公共子网关联到一个路由表,将 2 个私有子网关联到另一个路由表。 查看文档,aws_route_table_association 似乎只接受一个subnet_id。

如何添加多个subnets,如图所示?

将路由表关联到子网

resource "aws_route_table_association" "public-test" {
  subnet_id =                                         -> I need to add 2 public subnets here
  route_table_id = aws_route_table.public-test.id
}

resource "aws_route_table_association" "private-test" {
  subnet_id =                                          -> I need to add 2 private subnets here
  route_table_id = aws_route_table.private-test.id
}

这是子网和路由:

创建子网

resource "aws_subnet" "public-test-a" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.0/28"
  map_public_ip_on_launch = true
  availability_zone = var.AZ[0]

  tags = {
    Name = "public-test-a"
  }
}

resource "aws_subnet" "public-test-b" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.16/28"
  map_public_ip_on_launch = true
  availability_zone = var.AZ[1]

  tags = {
    Name = "public-test-b"
  }
}

resource "aws_subnet" "private-test-a" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.32/28"
  availability_zone = var.AZ[0]

  tags = {
    Name = "private-test-a"
  }
}


resource "aws_subnet" "private-test-b" {
  vpc_id = aws_vpc.vpc-test-02.id
  cidr_block = "10.0.0.48/28"
  availability_zone = var.AZ[1]

  tags = {
    Name = "private-test-b"
  }
}

创建路由表

resource "aws_route_table" "public-test" {
  vpc_id = aws_vpc.vpc-test-02.id

  route {
    cidr_block = "10.0.0.0/26"
  }

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id =aws_internet_gateway.myIG-test-02.id
  }

  tags = {
    Name = "public-test"
  }
}

resource "aws_route_table" "private-test" {
  vpc_id = aws_vpc.vpc-test-02.id

  route {
    cidr_block = "10.0.0.0/26"
  }

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_nat_gateway.myNat-test-02.id
  }
}

【问题讨论】:

    标签: amazon-web-services terraform amazon-vpc


    【解决方案1】:

    你可以简单的声明两个路由表关联资源。

    
    resource "aws_subnet" "public_test_a" {
      vpc_id = aws_vpc.vpc-test-02.id
      cidr_block = "10.0.0.0/28"
      map_public_ip_on_launch = true
      availability_zone = var.AZ[0]
    
      tags = {
        Name = "public-test-a"
      }
    }
    
    resource "aws_subnet" "public-test-b" {
      vpc_id = aws_vpc.vpc-test-02.id
      cidr_block = "10.0.0.16/28"
      map_public_ip_on_launch = true
      availability_zone = var.AZ[1]
    
      tags = {
        Name = "public-test-b"
      }
    }
    
    
    resource "aws_route_table_association" "public-test-a" {
      subnet_id = aws_subnet.public-test-a.id # first subnet
      route_table_id = aws_route_table.public-test.id
    }
    
    resource "aws_route_table_association" "public-test-b" {
      subnet_id = aws_subnet.public-test-b.id # second subnet
      route_table_id = aws_route_table.public-test.id
    }
    
    resource "aws_route_table" "public-test" {
      vpc_id = aws_vpc.vpc-test-02.id
    
      route {
        cidr_block = "10.0.0.0/26"
      }
    
      route {
        cidr_block = "0.0.0.0/0"
        gateway_id =aws_internet_gateway.myIG-test-02.id
      }
    
      tags = {
        Name = "public-test"
      }
    }
    

    此外,遵循命名约定也是一种很好的做法。引用docs

    全部使用 _(下划线)而不是 -(破折号):资源名称、数据源名称、变量名称、输出。 请注意,实际的云资源在其命名约定中有许多隐藏的限制。有些不能包含破折号,有些必须是驼峰式的。这些约定指的是 Terraform 名称本身。 只能使用小写字母和数字。

    【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2019-01-15
    • 1970-01-01
    • 2020-03-04
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2019-01-21
    相关资源
    最近更新 更多