AWS CloudFormation中SubnetRouteTableAssociation无法按时稳定致创建失败求助
我之前也碰到过这种间歇性的CloudFormation子网路由表关联超时问题,这种偶发故障确实让人头疼,下面是我总结的几个排查方向和亲测有效的解决办法:
明确资源依赖关系,避免并行创建冲突
CloudFormation的自动依赖解析有时候会有偏差,可能导致路由表或子网还没完全稳定,关联操作就已经开始执行。你可以在AWS::EC2::SubnetRouteTableAssociation资源里显式添加DependsOn属性,强制它等子网和路由表彻底创建完成后再启动:SubnetRouteTableAssociationMain: Type: AWS::EC2::SubnetRouteTableAssociation DependsOn: - YourTargetSubnet - YourMainRouteTable Properties: SubnetId: !Ref YourTargetSubnet RouteTableId: !Ref YourMainRouteTable检查路由表的前置资源状态
如果路由表关联了IGW、NAT网关这类资源,这些网关本身可能需要更长时间稳定。如果网关还没就绪就创建子网关联,很容易触发超时。你可以尝试手动在控制台创建这个关联,如果手动操作也偶尔失败,那大概率是网关类资源的问题——这时候可以给网关资源加上DependsOn或者用AWS::CloudFormation::WaitCondition来确保它完全就绪后再处理路由表关联。核查资源配额是否接近上限
别忽略了配额问题!如果你的账户在目标区域的子网路由表关联配额已经接近上限,创建操作可能会因为资源调度延迟而超时。你可以在AWS控制台的「Service Quotas」里找到EC2-VPC > Subnet route table associations,查看当前使用量和配额上限,要是接近的话直接申请提额就行。延长资源或栈的超时时间
CloudFormation默认的资源创建超时可能不足以应对复杂环境下的资源初始化。你可以给AWS::EC2::SubnetRouteTableAssociation单独设置更长的超时,比如:SubnetRouteTableAssociationMain: Type: AWS::EC2::SubnetRouteTableAssociation CreationPolicy: ResourceSignal: Timeout: PT10M # 调整为10分钟,可根据实际情况增减 Properties: SubnetId: !Ref YourTargetSubnet RouteTableId: !Ref YourMainRouteTable也可以在创建栈的时候,通过CLI或者控制台设置整个栈的超时时间,给所有资源足够的初始化窗口。
排查AWS区域临时服务波动
偶发的故障有时候就是AWS区域的临时服务波动导致的。你可以打开AWS控制台的「Health Dashboard」,查看故障发生时间点是否有对应的EC2或CloudFormation服务事件。如果是临时故障,重试创建栈通常就能解决问题。
内容的提问来源于stack exchange,提问作者studentneedshelp

