4

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 を見ると、デプロイを手動で指定するときにこのエラーについて言及されていることがわかります ( here、またはhere )。私の場合、展開は暗黙的であるため、私の問題は異なると思います。

私が使用しているコードは、SAM の例 ( here ) に基づいています。スタックの何が問題なのかを理解するために頭を悩ませています。

解決策への指針はありますか?

4

1 に答える 1

8

エラー メッセージが示すように、Swagger でメソッドを定義していません。あなたの混乱はここにあると思います:

私の場合、展開は暗黙的であるため、私の問題は異なると思います。

SAM は、AWS::Serverless::Function リソースで定義された Api イベントの結合から AWS::Serverless::Api タイプの暗黙的な API を作成しますが、(RestApiId プロパティを介して) AWS::Serverless を参照しない場合に限ります。 ::テンプレートで明示的に定義した API リソース。そして、あなたの場合、そうです。

また、あなたのテンプレートは「api_swagger_cors」サンプル SAM テンプレートに基づいていると述べています、実際にはあなたのものとその例には重要な違いがあります。つまり、この例では、Swagger YAML ファイルが S3 から取り込まれています。バケツ; 一方、あなたの Swagger はインラインで定義されていますが、メソッドは定義されていません。

詳細については:

  • 暗黙的 v 明示的 API に関するこの回答を参照してください (私もそれを書きました)。
  • Swagger の構造については、このページを参照してください。
于 2019-03-09T09:18:54.690 に答える