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

使用SAM部署AWS Lambda至Dev阶段:URL显示异常及权限问题

问题分析与解决方案

核心原因

  • SAM默认自动创建Prod阶段,仅修改Outputs的URL路径不会实际生成Dev阶段配置,访问Dev路径时因无对应阶段存在触发403错误
  • 重复的Outputs配置会干扰部署逻辑,导致阶段配置混乱
  • Lambda函数的调用权限仅关联了默认的Prod阶段,Dev阶段未获得调用权限

具体修复步骤

1. 在SAM模板中明确创建Dev阶段

SAM不会自动生成非默认阶段,需手动配置:

方式一:全局指定API阶段(推荐)

在模板顶部的Globals区块中统一设置API的默认阶段:

Globals:
  Api:
    StageName: Dev

方式二:单独定义ApiGateway Stage资源

如果需要同时保留多阶段,可添加独立的Stage资源:

Resources:
  DevApiStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      StageName: Dev
      RestApiId: !Ref ServerlessRestApi
      DeploymentId: !Ref ServerlessRestApiDeployment
      # 可按需开启日志等配置
      MethodSettings:
        - ResourcePath: "/*"
          HttpMethod: "*"
          LoggingLevel: INFO

2. 配置Dev阶段的Lambda调用权限

默认生成的权限只针对Prod阶段,需新增或修改权限规则:

Resources:
  TimedTextRecsnFunctionDevPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref TimedTextRecsnFunction
      Action: lambda:InvokeFunction
      Principal: apigateway.amazonaws.com
      SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${ServerlessRestApi}/Dev/*/*"

3. 修正Outputs配置

更新描述与路径,确保和实际阶段一致:

Outputs:
  TimedTextRecsnApi:
      Description: "API Gateway endpoint URL for Dev stage for Timed Text Recsn Function"
      Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Dev/"

4. 重新部署服务

执行部署命令生效配置:

sam deploy

(首次部署或需修改参数时用sam deploy --guided)

为什么改回Prod就正常?

因为SAM默认会自动创建Prod阶段,同时自动生成该阶段调用Lambda的权限配置,所以访问Prod路径时API Gateway能正确触发Lambda函数;而Dev阶段是你手动指定但未实际创建和配置权限的,自然会出现403禁止访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:57:56