(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年前2192ビュー
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年前

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ