Amazon web services AWS-SAM:restapi没有';不包含任何方法

Amazon web services AWS-SAM:restapi没有';不包含任何方法,amazon-web-services,aws-lambda,amazon-cloudformation,aws-api-gateway,aws-sam,Amazon Web Services,Aws Lambda,Amazon Cloudformation,Aws Api Gateway,Aws Sam,我正在尝试使用AWS SAM部署一个简单的API。 当API很简单时(即,不显式指定API网关)。部署成功 但是,以下部署失败: AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: Sample API Parameters: Stage: Type: String AllowedValues: - dev - sat

我正在尝试使用AWS SAM部署一个简单的API。 当API很简单时(即,不显式指定API网关)。部署成功

但是,以下部署失败:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Sample API

Parameters: 
  Stage:
    Type: String
    AllowedValues: 
      - dev
      - sat
      - demo
      - staging
      - prod
    Description: Enter dev, sat, demo, staging or prod

Resources:

  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: !Ref Stage
      EndpointConfiguration: PRIVATE
      DefinitionBody:
        swagger: '2.0'
        x-amazon-apigateway-policy:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Principal: "*"
              Action: execute-api:Invoke
              Resource:
                - !Sub arn:aws:execute-api:*:*:*/${Stage}/*

  ThumbnailFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Runtime: nodejs8.10
      Handler: get-config.handler
      CodeUri: ./functions
      Events:
        ThumbnailApi:
          Type: Api
          Properties:
            RestApiId: !Ref MyApi
            Path: /thumbnail
            Method: GET
错误消息如下所示:

The REST API doesn't contain any methods (Service: AmazonApiGateway;
Status Code: 400; Error Code: BadRequestException
在Google上,我确实发现在手动指定部署(、或)时提到了这个错误。在我的例子中,部署是隐式的,因此我假设我的问题不同

我使用的代码基于SAM示例()。我挠头想弄明白我的堆栈出了什么问题


有没有指向解决方案的指针?

正如错误消息所说,您还没有定义任何方法。我想你的困惑就在这里:

在我的例子中,部署是隐式的,因此我假设我的问题不同

SAM确实从AWS::Serverless::Function resources上定义的Api事件的联合中创建AWS::Serverless::Api类型的隐式Api,但前提是这些事件没有引用(通过RestApiId属性)模板中显式定义的AWS::Serverless::Api资源。对你来说,确实如此

此外,您提到您的模板基于“api_swagger_cors”示例SAM模板,但实际上您的模板与该示例之间有一个关键区别,即:在该示例中,一个swagger YAML文件正在从S3存储桶中拉入;而在您的中,您的招摇过市是内联定义的,但它没有定义任何方法

有关更多信息:

  • 参见隐式v显式API的答案(我也写过)
  • 有关招摇过市的结构,请参见第页

谢谢你;令人失望的是,Swagger似乎是SAM中定义网关策略的唯一方法,同时它基本上需要定义两次函数事件。