AWS CDK(.NET)创建Transit Gateway Attachment提示网关不存在如何解决
问题排查步骤
- 区域/账号匹配校验
确认CDK栈部署的AWS账号、区域,与手动创建的Transit Gateway(TGW)所属账号、区域完全一致。同账号不同区域、同区域不同账号都会触发「资源不存在」报错。 - 跨账号场景参数补全
如果TGW不属于CDK栈所属的AWS账号,你需要补充两个配置:- 提前通过AWS RAM将TGW共享给CDK栈所属账号,共享状态需为有效
- 在
CfnTransitGatewayAttachmentProps中新增TransitGatewayOwnerId参数,值为TGW所属账号的12位AWS账号ID,示例代码如下:
var transitGatewayAttachment = new CfnTransitGatewayAttachment(this, "TransitGatewayAttachment", new CfnTransitGatewayAttachmentProps { VpcId = Vpc.VpcId, TransitGatewayId = "tgw-xxxxxx", // 新增跨账号配置 TransitGatewayOwnerId = "TGW所属的12位账号ID", SubnetIds = Vpc.PrivateSubnets.Select(s => s.SubnetId).ToArray() }); - IAM权限校验
部分场景下AWS为了隐藏资源存在性,会将权限不足的请求返回「资源不存在」而非权限拒绝。你可以使用和CDK部署完全相同的AWS凭证,执行以下CLI命令验证资源可见性:
如果命令返回报错,说明问题出在凭证权限、账号/区域匹配上,与CDK代码无关。你需要先给CDK部署角色开放aws ec2 describe-transit-gateways --transit-gateway-ids tgw-xxxxxxec2:DescribeTransitGateways、ec2:CreateTransitGatewayVpcAttachment相关权限。 - 资源状态与ID校验
- 确认TGW当前状态为
available,deleted/deleting状态的TGW也会被判定为不存在 - 确认硬编码的TGW ID无多余空格、字符拼写错误,你可以在代码中打印
TransitGatewayId参数的实际传入值,和控制台的TGW ID做二次核对
- 确认TGW当前状态为
- 导入资源写法优化
建议先通过CDK提供的导入方法引入已存在的TGW资源,再调用ID创建附件,避免硬编码可能带来的问题:// 先导入现有TGW var importedTgw = TransitGateway.FromTransitGatewayId(this, "ImportedTgw", "tgw-xxxxxx"); // 创建附件时引用导入资源的ID var transitGatewayAttachment = new CfnTransitGatewayAttachment(this, "TransitGatewayAttachment", new CfnTransitGatewayAttachmentProps { VpcId = Vpc.VpcId, TransitGatewayId = importedTgw.TransitGatewayId, SubnetIds = Vpc.PrivateSubnets.Select(s => s.SubnetId).ToArray() });
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

