Невозможно указать URI интеграции x-amazon-apigateway с функцией Sub - PullRequest
0 голосов
/ 30 августа 2018

У меня есть файл swagger.yaml со следующим:

paths:
  /path/endpoint:
    post:
      ...
      x-amazon-apigateway-integration:
        uri: !Sub "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${MyFunction.Arn}/invocations"

Когда я пытаюсь развернуть его с помощью sam cli, в CloudFormation появляется ошибка «АРС ARN для интеграции должен содержать путь или действие».

Однако, если я жестко закодировал значение AWS :: Region и MyFunction.Arn, я не получу сообщение об ошибке.

Кто-нибудь знает, почему функция Sub не работает для URI?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Шраван упомянул половину проблемы. Другая вещь, которую вам нужно сделать, это использовать «DefinitionBody» и «Fn :: Transform», как показано ниже, при добавлении вашего файла swagger в ваш шаблон или переменные в вашем файле swagger не будут заменены.

Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: my-api
      StageName: dev
      DefinitionBody:
        'Fn::Transform':
          Name: 'AWS::Include'
          Parameters:
            Location: s3://my-api/swagger.yaml

Простое использование «DefinitionUri» для указания файла чванства не будет работать.

# This will cause the variables in your swagger file to not be substituted. You must use the format above to get variables to work in your swagger file.
Resources:
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: my-api
      StageName: dev
      DefinitionUri: swagger.yaml

К сожалению, это также означает, что вам необходимо указать полный путь s3 к файлу swagger и загрузить его на S3 перед развертыванием SAM. Смотри: https://github.com/awslabs/serverless-application-model/issues/305

0 голосов
/ 06 сентября 2018

Да, вам нужно отформатировать путь интеграции следующим образом при использовании формата yaml для swagger yaml:

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

Короткая форма (для подпункта "! Sub"), которую вы используете, создаст вам проблемы. Вам нужно использовать длинную форму, Fn :: Sub. Если вы работаете с SAM, я также рекомендую вам ознакомиться с документацией AWS по встроенным функциям, особенно с использованием Sub в сочетании с Imports. Надеюсь, это поможет.

...