AWS SAM创建AWS::WAFv2::WebACLAssociation报资源不存在错误如何解决
WAFv2 WebACLAssociation 404 NotFound错误排查方案
该错误和你已创建的IPSet资源无关,触发原因是WebACL关联时找不到指定的关联资源,可按以下顺序排查:
- 校验WebACL的Scope配置
你定义的IPSet使用了REGIONALscope,对应的WAFWebAcl资源的Scope属性必须也设置为REGIONAL,如果设为CLOUDFRONT则无法关联同区域的API Gateway资源,会直接报资源不存在。 - 校验API Gateway阶段ARN构造正确性
你当前使用的ARN表达式!Sub 'arn:aws:apigateway:${AWS::Region}::/restapis/${ApiGateway}/stages/${EnvType}'是最常见的出错点,需核对以下配置:- 确认
${ApiGateway}参数取值为正确的API Gateway ID,如果你使用SAM定义的AWS::Serverless::Api类型资源,通过!Ref 资源逻辑ID获取的值是正确的 - 确认
${EnvType}取值和API Gateway实际部署的阶段名完全一致,大小写不匹配也会触发报错 - 确认API Gateway阶段已完成部署:SAM的
AWS::Serverless::Api默认会生成隐式的部署资源,你可以在WAFApiAssociation的DependsOn中添加对应的隐式部署资源(命名规则为<API资源逻辑ID>Deployment,比如你的API逻辑ID是ApiGateway则添加ApiGatewayDeployment),避免关联时阶段还未创建完成。
- 确认
- 校验资源区域一致性
确认WAFv2 WebACL、API Gateway都部署在同一个AWS区域,跨区域关联会触发NotFound错误。 - 手动验证资源有效性
部署失败触发回滚前,可进入AWS控制台直接校验资源:- 复制WAF控制台中对应WebACL的ARN,和模板
!GetAtt WAFWebAcl.Arn的输出值对比是否一致 - 复制API Gateway对应阶段的ARN,使用AWS CLI手动执行关联命令验证是否正常:
如果CLI执行也报相同错误,直接排查ARN填写错误即可。aws wafv2 associate-web-acl --web-acl-arn <WAF_ARN> --resource-arn <API_STAGE_ARN> --region <REGION_CODE> - 复制WAF控制台中对应WebACL的ARN,和模板
内容的提问来源于stack exchange,提问作者Pontus Espe
相关产品推荐
相关产品推荐

