You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS SAM如何为现有API Gateway添加Lambda Authorizer

核心原因

你遇到的新API生成、手动配置丢失问题来自两个常见配置误区:

  • 模板中新增AWS::Serverless::HttpApi资源块时,SAM默认会创建全新的HTTP API实例,不会自动复用存量API,直接部署就会出现原有路由丢失、访问URL变更的问题。
  • 控制台手动添加的授权器、集成配置自动消失,属于IaC配置漂移现象:被SAM/CloudFormation纳管的资源,所有未写入模板的手动变更,都会在下次部署时被模板中的存量配置覆盖,不存在"自动消失",是被部署流程回滚了。
现有API添加Lambda Authorizer的正确配置

分两种场景适配:

场景1:现有API本身就是当前SAM栈创建的HttpApi资源

不要新建HttpApi资源,直接在原有HttpApi的资源块上追加授权器配置,同时给需要鉴权的路由单独绑定授权器即可,参考配置:

# 这是你模板中已经存在的HttpApi资源,不要新增同类型资源
MyExistingHttpApi:
  Type: AWS::Serverless::HttpApi
  Properties:
    # 保留原有所有配置(CORS、阶段设置、访问日志等),不要删除
    CorsConfiguration:
      AllowOrigins:
        - "https://your-domain.com"
      AllowMethods:
        - GET
        - POST
        - OPTIONS
    StageName: prod
    # 追加授权器配置
    Auth:
      DefaultAuthorizer: NONE # 全局默认关闭鉴权,不影响原有公开路由
      Authorizers:
        CustomLambdaAuthorizer:
          AuthorizerPayloadFormatVersion: "2.0"
          FunctionArn: !GetAtt AuthLambda.Arn # 替换为你的授权器Lambda ARN
          FunctionInvokeRole: !GetAtt LambdaAuthInvokeRole.Arn # 替换为Lambda调用角色ARN
          Identity:
            Headers:
              - Authorization
            ReauthorizeEvery: 300 # 鉴权结果缓存时间,单位秒,可按需调整

给需要保护的路由绑定授权器时,在对应Lambda函数的HttpApi事件中补充Auth配置即可:

ProtectedBizFunction:
  Type: AWS::Serverless::Function
  Properties:
    CodeUri: src/protected-biz/
    Handler: index.handler
    Runtime: nodejs20.x
    Events:
      ProtectedRoute:
        Type: HttpApi
        Properties:
          ApiId: !Ref MyExistingHttpApi # 关联原有API
          Path: /api/user/info
          Method: GET
          Auth:
            Authorizer: CustomLambdaAuthorizer # 绑定刚才定义的授权器

场景2:现有API是在控制台/其他工具创建的,不属于当前SAM栈

不要使用AWS::Serverless::HttpApi资源新建API,改用AWS::ApiGatewayV2::Authorizer资源直接挂载到存量API上,参考配置:

# 为存量API创建Lambda授权器
ImportedApiAuthorizer:
  Type: AWS::ApiGatewayV2::Authorizer
  Properties:
    ApiId: "替换为你的存量API ID" # 可通过SSM参数/模板变量传入
    AuthorizerType: REQUEST
    Name: LambdaAuth
    AuthorizerUri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${AuthLambda.Arn}/invocations
    AuthorizerPayloadFormatVersion: "2.0"
    IdentitySource:
      - $request.header.Authorization
    EnableSimpleResponses: true
    AuthorizerCredentialsArn: !GetAtt LambdaAuthInvokeRole.Arn

后续新增路由、集成配置时,直接引用该存量API ID和新建的授权器ID即可,部署过程不会重建API。

避免手动配置丢失的方案
  • 所有API Gateway相关配置(授权器、路由、集成、CORS、限流规则等)全部写入template.yaml,统一通过sam deploy完成变更,不要在控制台直接修改被SAM/CloudFormation纳管的资源。
  • 部署前执行sam deploy --no-execute-changeset生成变更集,确认不存在重建API、删除存量路由/集成的操作后再执行部署,避免误操作。
  • 不要混用控制台、AWS CLI、SAM、其他IaC工具管理同一个API实例,统一基础设施管理入口。
  • 如果确实需要临时手动调整配置,调整后第一时间将对应配置同步到模板中,避免下次部署被覆盖。

内容的提问来源于stack exchange,提问作者Riddick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:21:26