AWS-Terraform VPC difference between aws_route_table and aws_route
-
I'm struggling to understand the difference between the following Terraform Resources:
Example 1:
resource "aws_route_table" "public_1" { vpc_id = aws_vpc.test.id route { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.main.id } tags = { Name = "test-route" } } resource "aws_route_table_association" "test_pub_route" { subnet_id = aws_subnet.test_pub.id route_table_id = aws_route_table.public_1.id }
Correct me if I'm wrong but in this example I'm just creating a route and a route table with
public_1
resource.
In the second part I'm just associating the public_1 route table subnet called test_pub.Question 1: I don't understand what does the block route do in
public_1
The documentation https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route_table doesn't make much sense to me.Example 2:
resource "aws_route_table" "public" { vpc_id = aws_vpc.main.id } resource "aws_route" "public" { route_table_id = aws_route_table.public.id destination_cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.main.id } resource "aws_route_table_association" "public" { subnet_id = aws_subnet.test_pub.id route_table_id = aws_route_table.public.id }
Question 2(main) I'm trying to understand if these two examples are actually the same. And that the only difference is that in the first example we have route block which is equivalent to resource aws_route in the second example.
Even the required variables are the same just name is little bit different.
-
These are two ways of accomplishing the same thing with limitations.
Note that you cannot use both methods for the same table. In other words if you create routes in the
aws_route_table
you cannot associate routes created withaws_route
Terraform currently provides both a standalone Route resource and a Route Table resource with routes defined in-line. At this time you cannot use a Route Table with in-line routes in conjunction with any Route resources. Doing so will cause a conflict of rule settings and will overwrite rules.
Q1. The route block in
aws_route_table
is creating a route inside the routing table without the need to create a separate route usingaws_route
.Q2. Yes, they accomplish the same result.