(CDK) How to change subnets' routetables

0

I'm trying to define custom CfnRouteTable for subnets in the VPC to use, because it's redundant and inefficient for each subnet to have its own RouteTable.

However, it appears the RouteTable property for ISubnet is read-only. How is it supposed to be done?

Edited by: icelava on Jul 27, 2021 12:29 AM

icelava
已提問 3 年前檢視次數 2180 次
1 個回答
0

Don't know if this is the proper way or not, but had to go through quite a convoluted way to re-associate the subnets to another routetable.

Sample procedure.

// Custom route table and routes.
var customRtName = "CustomRouteTable";
var elbRouteTable = new CfnRouteTable(vpc, customRtName,
new CfnRouteTableProps
{
VpcId = vpc.VpcId,
});
elbRouteTable.Node.AddDependency(vpc.PublicSubnets);
elbRouteTable.Node.AddDependency(vpc.IsolatedSubnets);

// Looks like the ultimate name given to the custom RouteTable won't have "CustomRouteTable" in the output template;  
// only goes as far as its parent scope "Ec2SetupStack/cdk_ec2_vpc"; it has to be manually revised.  
var revisedName = vpc.Stack.StackName _ "/" _ vpc.Node.Id _ "/" _ customRtName;  
Amazon.CDK.Tags.Of(elbRouteTable).Add("Name", revisedName);  

var internetRoute = new CfnRoute(elbRouteTable, "InternetRoute",  
new CfnRouteProps  
{  
    RouteTableId = elbRouteTable.Ref,  
    DestinationCidrBlock = internetCidr,  
    GatewayId = vpc.InternetGatewayId  
});  
internetRoute.Node.AddDependency(elbRouteTable);  

this.ReAssociateRouteTable(vpc, vpc.PublicSubnets, elbRouteTable);  
this.ReAssociateRouteTable(vpc, vpc.IsolatedSubnets, elbRouteTable);  

}

private void ReAssociateRouteTable(Construct scope, ISubnet[] subnets, CfnRouteTable routeTable)
{
foreach (var subnet in subnets)
{
var routeTableAssoc = new CfnSubnetRouteTableAssociation(scope, subnet.Node.Id _ "_" _ routeTable.Node.Id,
new CfnSubnetRouteTableAssociationProps
{
SubnetId = subnet.SubnetId,
RouteTableId = routeTable.Ref
});
}
}

Edited by: icelava on Jul 27, 2021 2:29 AM - add routetable dependency on subnets to avoid association conflict on deploying brand new stack.

icelava
已回答 3 年前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南