CloudFormation创建GatewayAuthorizer失败 报并发修改异常
问题原因
该并发修改报错是CloudFormation隐式依赖识别不全导致的资源创建时序问题:
- CloudFormation默认仅能识别通过
!Ref、!GetAtt显式引用的资源依赖,当前Authorizer配置仅显式关联了API Gateway、User Pool、User Pool Client三个资源,但Cognito User Pool的IDP绑定、Issuer端点初始化是异步完成的最终一致性操作。当CloudFormation判定User Pool、IDP资源创建完成、开始发起Authorizer创建请求时,Cognito侧的Issuer端点实际还未完成同步,API Gateway侧校验Issuer合法性时刚好撞上Cognito的后台状态变更,就会抛出ConflictException。 - 如果模板中同时为同一个API Gateway配置了路由、CORS规则、API映射等资源,CloudFormation会并行发起多个API修改请求,多请求同时操作同一个API实例也会触发同类并发冲突。
修复方案
按以下顺序排查调整即可:
- 给Authorizer资源添加显式依赖声明,强制等待所有关联资源完全就绪后再触发创建
在Authorizer资源块中新增DependsOn属性,将所有关联的Cognito资源(User Pool、User Pool Client、IDP、自定义User Pool域名)、同API下的其他配置资源(路由、CORS、阶段配置等)全部加入依赖列表,参考配置如下:
APIGatewayAuthorizer: Type: AWS::ApiGatewayV2::Authorizer DependsOn: - apiGateway - UserPool - UserPoolClient - CognitoIdp # 替换为你模板中IDP资源的实际逻辑ID # 如果单独定义了UserPool域名、API路由、CORS配置,也需要把对应资源逻辑ID加到这里 Properties: ApiId: !Ref apiGateway AuthorizerType: JWT IdentitySource: - "$request.header.Authorization" JwtConfiguration: Audience: - !Ref UserPoolClient Issuer: !Sub 'https://cognito-idp.${AWS::Region}:${AWS::AccountId}.amazonaws.com/${UserPool}' Name: JwtCognitoAuthorizer
- 若添加显式依赖后仍偶发报错,可以通过CreationPolicy配置30-60秒的创建等待窗口,给Cognito侧留出足够的状态同步时间,避免资源刚创建完成就立刻发起Authorizer校验。
- 检查同API下的其他资源配置,避免多个API Gateway资源无依赖并行创建,给路由、阶段、API映射等资源也加上对应的依赖链,保证同一时间只有一个修改请求操作目标API实例。
调整后重新执行栈创建/更新操作即可解决该问题,不会再出现资源长时间卡在CREATE_IN_PROGRESS最终抛出并发修改异常的情况。
内容的提问来源于stack exchange,提问作者jlan
相关产品推荐
相关产品推荐

