Файл Swagger с расширениями AWS, хранящийся в S3 Bucket для создания API с помощью Cloudformation - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь создать API-шлюз, используя шаблон Cloudformation, например:

Resources:
 InvoiceApi:
  Type: AWS::ApiGateway::RestApi
  Properties:
    Description: an Api for our Invoicegen App
    Name: !Ref ApiName
    ApiKeySourceType: !Ref ApiKeySourceType
    BinaryMediaTypes:
    - !Ref binaryMediaType1
    - !Ref binaryMediaType2
    BodyS3Location:
     Bucket:
       Fn::ImportValue: !Sub ${EnvironmentName}-SwaggerApiBucket-Name
     Key: swaggertest.yaml
     ETag: !Ref ETag
     EndpointConfiguration:
     Types:
      - REGIONAL
     FailOnWarnings: true
     MinimumCompressionSize: !Ref minimumCompressionSize

файл Swagger-yaml в S3 Bucket выглядит следующим образом:

  swagger: '2.0'
  info:
    version: '2016-08-17T18:08:34Z'
    title: InvoicegenAPI
  basePath: "/LATEST"
  schemes:
   - https
  paths:
    /greeting:
       get:
         summary: Get Greeting
         parameters:
          - name: name
            in: query
            required: false
            type: string
        produces:
          - application/json
        responses:
          '200':
            description: 200 response
        x-amazon-apigateway-integration:
          requestTemplates:
            application/json: '{"name": "$input.params(''name'')"}'
          uri:
            Fn::Join:
             - ''
             - - 'arn:aws:apigateway:'
               - Ref: AWS::Region
               - ":lambda:path/2015-03-31/functions/"
               - Fn::GetAtt:
                 - InvoiceLambda
                 - Arn
               - "/invocations"
         responses:
           default:
             statusCode: '200'
         httpMethod: POST
         type: aws

к сожалению, это выдает ошибку вроде этого:

Unable to parse API definition because of a malformed integration at path /greeting. (Service: AmazonApiGateway; Status Code: 400; Error Code: BadRequestException; Request ID: 2cf08a97-e66f-11e8-afee-fb6b03568b64)

Я дважды проверил файл Swagger, все отступы кажутся нормальными.Чего мне не хватает?

Существует поток, который уже занимается этой проблемой, но пока не нашел решения.

Передача ссылки ARN из CloudFormation в Swagger

Мерси заранее

A

1 Ответ

0 голосов
/ 18 ноября 2018

Я думаю, что ваша проблема заключается в использовании свойства BodyS3Location для ссылочного файла S3, который, вероятно, не выполняет синтаксический анализ файла YAML, поэтому не разрешает ваши инстанциальные функции.

Мое предложение состоит в том, чтобы вы изменили наBody + AWS :: Include Transform, аналогично тому, что было предложено для Передача ссылки ARN из CloudFormation в Swagger .Попробуйте это как ваш ресурс:

Resources:
 InvoiceApi:
  Type: AWS::ApiGateway::RestApi
  Properties:
    Description: an Api for our Invoicegen App
    Name: !Ref ApiName
    ApiKeySourceType: !Ref ApiKeySourceType
    BinaryMediaTypes:
    - !Ref binaryMediaType1
    - !Ref binaryMediaType2
    Body:
      Fn::Transform:
        Name: AWS::Include
        Parameters:
          Location: !Sub 's3://${EnvironmentName}-SwaggerApiBucket-Name/swaggertest.yaml'
    EndpointConfiguration:
    Types:
    - REGIONAL
    FailOnWarnings: true
    MinimumCompressionSize: !Ref minimumCompressionSize
...