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

发布SAM应用至AWS SAR时遇Invalid OpenApi document错误求助

问题诊断与解决步骤

核心原因

你遇到的问题是因为AWS Serverless Application Repository(SAR)对SAM模板的校验比sam deploy更严格,尤其是针对HTTP API的OpenAPI定义部分。本地部署时SAM允许通过Uri引用外部OpenAPI文件,但发布到SAR时,必须让OpenAPI定义能被SAR直接识别——要么嵌入模板,要么指向S3中的有效文件,否则会触发结构校验失败。

你的操作问题

从你的仓库模板来看,LambdaOpenAPITestAPI资源使用了DefinitionUri引用本地openapi.yaml文件,而非将OpenAPI内容直接嵌入DefinitionBody。sam deploy可以解析本地文件路径,但sam publish时SAR无法访问你的本地文件,且默认打包流程不会自动包含外部OpenAPI文件,导致校验时找不到合法的OpenAPI结构,进而报错。

解决方法

方法1:将OpenAPI定义直接嵌入模板

修改lambda-openapi3-test-http-api.yaml里的LambdaOpenAPITestAPI资源,把openapi.yaml的内容复制到DefinitionBody下:

LambdaOpenAPITestAPI:
  Type: AWS::Serverless::HttpApi
  Properties:
    DefinitionBody:
      openapi: 3.0.1
      info:
        title: LambdaOpenAPITestAPI
        version: '1.0'
      paths:
        /hello:
          get:
            responses:
              '200':
                description: OK
            x-amazon-apigateway-integration:
              type: aws_proxy
              httpMethod: POST
              uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaOpenAPITestFunction.Arn}/invocations

方法2:确保外部OpenAPI文件被打包到S3

如果不想嵌入内容,需要调整打包流程,让外部OpenAPI文件上传至S3并被模板正确引用:

  1. 打包时指定S3桶,确保openapi.yaml被上传:
sam package --template-file lambda-openapi3-test-http-api.yaml --output-template-file packaged.yaml --s3-bucket 你的S3桶名称 --s3-prefix openapi
  1. 修改模板中的DefinitionUri为S3路径:
DefinitionUri: s3://你的S3桶名称/openapi/openapi.yaml

验证操作

修改后重新执行打包+发布命令:

sam package -t lambda-openapi3-test-http-api.yaml --output-template-file packaged.yaml --resolve-s3 && sam publish --template packaged.yaml

关于API定义的必要性

是的,发布到SAR的SAM模板如果包含AWS::Serverless::HttpApi资源,必须提供合法的OpenAPI定义(要么DefinitionBody嵌入完整结构,要么DefinitionUri指向有效文件)。SAR会强制校验OpenAPI文档的核心结构,确保包含openapi版本字段和paths节点,这是发布的硬性要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 22:32:35