AWS SAM / Cloudformation "Ошибка неправильной интеграции на пути" - PullRequest
0 голосов
/ 23 июня 2018

При попытке развернуть конфигурацию лямбда-шлюза и шлюза API появляется следующая ошибка

"неправильная интеграция в пути / профиле / v1. (Сервис: AmazonApiGateway; Код статуса: 400; Код ошибки: BadRequestException "

Что может вызвать эту ошибку и как ее можно устранить.


swagger: '2.0'
info:
  version: v1
  title: ProfileAPI
paths:
  "/profile/v1":
    get:
      tags:
      - Values
      operationId: ProfileV1Get
      consumes: []
      produces:
      - text/plain
      - application/json
      - text/json
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            type: array
            items:
              type: string
      x-amazon-apigateway-integration:
        httpMethod: post
        type: aws_proxy
        uri:
          Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ProfileFunction.Arn}/invocations
definitions: {}

1 Ответ

0 голосов
/ 21 февраля 2019

Получил окончательную рабочую настройку для работы с поддержкой AWS, которая может вас заинтересовать:

Когда мы ссылаемся на детали ресурса облачной информации в шаблоне внешнего чванства, мы не получаем детали ресурса и, следовательно, получаем вышеупомянутую ошибку. Например: «Fn :: Sub: arn: aws: apigateway: $ {AWS :: Region}: lambda: path / 2015-03-31 / functions / $ {LambdaFunction.Arn} / invocations» не будет работать при попытке создать конечную точку интеграции шлюза API в определении swagger с использованием ресурса: «LambdaFunction.Arn» (который является ресурсом CloudFormation).

Для решения этих проблем я внес следующие изменения в шаблон облачной информации:

Чтобы сослаться на файл swagger в шаблоне облачной информации, я загрузил шаблон swagger в корзину s3, а затем использовал приведенное ниже определение. Я использовал:

    ZazzoAPI:
        Type: AWS::Serverless::Api
        Properties:
            StageName: Prod
            Variables:
                LambdaFunctionName: !Ref LambdaFunction
            #Configure API settings and options
            MethodSettings: [{
                LoggingLevel: "INFO",
                MetricsEnabled: True ,
                HttpMethod: "GET",
                ResourcePath: "/"
            }]
            DefinitionBody:
                'Fn::Transform':
                  Name: 'AWS::Include'
                  Parameters:
                        Location: "s3://s3.code-deploy/swagger_SAM.yaml"

Преобразование AWS :: Include позволяет создавать ссылку на фрагмент преобразования в корзине Amazon S3. Это позволяет ссылаться на детали ресурса облачной информации во внешнем файле чванства. Вы можете обратиться к документации на [1] для более подробной информации о преобразовании «AWS :: Include».

Затем я проверил шаблон swagger и увидел, что вы используете сокращенные записи для указания URI интеграции. Однако «AWS :: Include» в настоящее время не поддерживает использование сокращенных обозначений для фрагментов YAML, как указано в документации [2]. Поэтому я использовал встроенную функцию «Fn :: Sub» и смог ссылаться на требуемые параметры облачной информации в чванливый шаблон.


Предыдущее определение:

uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations”

Новое определение:

uri: 
      Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations"

Ссылки

  1. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html
  2. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/create-reusable-transform-function-snippets-and-add-to-your-template-with-aws-include-transform.html#aws-include-transform-remarks
  3. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-stage-methodsetting.html
...