Настройка API при интеграции Lambda с API через AWS SAM

проблема

Я пытаюсь запустить простую интеграцию между Lambda и API Gateway с AWS SAM. Я хочу настроить ввод для лямбды - примените несколько шаблонов запроса. Но те, кажется, игнорируются.

Действия по воспроизведению

Работает с:

sam local start-api
curl -v -XPOST -H "Content-type: application/json" -d '{"jarmil":"prdel"}' http://localhost:3000/

Выход:

START RequestId: 43594e8a-c3af-4f47-9d85-6c605131f02a Version: $LATEST
Processing event {'httpMethod': 'POST', 'body': '{"jarmil":"prdel"}', 'resource': '/', 'requestContext': {'resourcePath': '/', 'httpMethod': 'POST', 'stage': 'prod', 'identity': {'sourceIp': '127.0.0.1:53210'}}, 'queryStringParameters': {}, 'headers': {'Accept': '*/*', 'Content-Length': '18', 'Content-Type': 'application/json', 'User-Agent': 'curl/7.43.0'}, 'pathParameters': None, 'stageVariables': None, 'path': '/'}
END RequestId: 43594e8a-c3af-4f47-9d85-6c605131f02a

Кажется, он работает так, как будто API по умолчанию был создан. Я распечатал событие. Но, похоже, мое определение API полностью игнорируется. Я всегда получаю исходное событие без requestTemplates применяется Симптомы:

  • Что бы я ни включил в мое определение чванства, это не имеет никакого эффекта. изменения producesКладем там уродливое чванство
  • Когда я использую недействительным RestApiId (несуществующая ссылка) - без изменений
  • Когда я использую несуществующий type вместо AWS::Serverless::Api - нет эффекта

Среда

  • Сам версия: 0.2.4
  • ОС: X

Код

мой template.yml:

AWSTemplateFormatVersion : '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: POC
Resources:
  ScheduleFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Runtime: python3.6
      Handler: lambda_function2.lambda_handler
      Events:
        ApiRoot:
          Type: Api
          Properties:
            RestApiId: !Ref ScheduleApi
            Path: /
            Method: ANY
  ScheduleApi:
    Type: 'AWS::Serverless::Api'
    Properties:
      StageName: dev
      DefinitionUri: swagger.yml

мой swagger.yml:

swagger: 2.0
info:
  title: "Scheduling API"
consumes:
  - application/json
produces:
  - application/json
paths:
  /:
    post:
      x-amazon-apigateway-integration:
        httpMethod: post
        type: aws
        requestTemplates:
          application/json: "#input x"

И lambda_function2.py:

def lambda_handler(event, context):
    print("Processing event", event)
    return event

Другие ресурсы

Этот пример из репозитория sam выглядит примерно так же, как то, чего я хочу достичь. Тоже не работает

0 ответов

Другие вопросы по тегам