Интеграция Serverless Framework Lamba - проверка схемы запроса - PullRequest
0 голосов
/ 19 июня 2020

Я просмотрел несколько ответов, которые смог найти здесь, на SO, но мне все еще не повезло. Я использую Serverless и пытаюсь выполнить проверку тела запроса для лямбда-функции, используя лямбда-интеграцию шлюза API. После запуска sls offline и выполнения запроса POST с помощью почтальона, независимо от тела, запрос завершается успешно. Проверка, похоже, вообще не происходит.

Вот что у меня есть ...

serverless.yml:

service: onboard

# plugins
plugins:
  - serverless-offline

provider:
  name: aws
  runtime: nodejs12.x
  stage: dev
  region: us-east-1

functions:
  onboard:
    handler: api/onboard.onboard
    events:
      - http:
          path: onboard
          method: post
          integration: lambda
          request:
            passThrough: NEVER
            schema:
              application/json: ${file(models/onboard.schema.json)}
            template:
              application/json: '{ "body" : "$input.body" }'

api / onboard. js

const onboard = async (event) => {
  const response = {
    message: event
  };

  return response;
};

exports.onboard = onboard;

модели / onboard.schema. json:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "https://path.to/onboard",
  "title": "title",
  "description": "description",
  "type": "object",
  "properties": {
    "environment": { "type": "string" },
    "git": { 
      "type": "object",
      "properties": {
        "repo": {
          "type": "string",
          "format": "uri",
          "pattern": ".git$"
        },
        "token": { "type": "string" }
      },
      "required": ["repo", "token"],
      "maxProperties": 2
    },
    "name": {  "type": "string" },
    "team": {
      "type": "string",
      "pattern": "(?i)(^red$|^blue$|^green$|^yellow$|^black$|^white$)"
    }
  },
  "additionalProperties": false,
  "required": ["name", "team"]
}

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Serverless-offline не поддерживает проверку запроса https://github.com/dherault/serverless-offline/issues/369

Лучше протестируйте его отдельно на apigateway, определив фиктивный ответ. Это гарантирует, что лямбда-ответ (в случае неправильного, зависящего от типа интеграции) не приведет к ошибкам.

1 голос
/ 19 июня 2020

Здесь есть несколько вещей, на которые следует обратить внимание:

  1. Ваш тестовый запрос должен передавать Content-Type, который соответствует тому, что вы настроили, иначе проверка игнорируется. Единственный способ принудительно использовать Content-Type, насколько я видел, - это добавить эту минимальную проверку к вашей функции Lambda.
  2. serverless-offline может не учитывать проверку запроса. Лучше тестировать в облаке. Лично я избегаю подобных тестов локально и стараюсь как можно больше тестировать в облаке. Благодаря новой функции под названием Studio, выпущенной Serverless Framework, она значительно упрощает эту задачу, обеспечивая быстрое время для внесения изменений, отправку в облако за секунды и предоставляя вам интерфейс, похожий на почтальон, для отправки тестов в вашу инфраструктуру в облако делает тестирование намного проще.
...