Подтвердить что ты не робот

Тестирование AWS Lambdas локально за конечными точками API Gateway

AWS noob здесь. Это немного "вопрос разработки лучшей практики", но я постараюсь быть конкретным:

Я знаю, что я могу тестировать Lambdas в node локально с помощью json файла для ввода, но я не уверен, что лучший способ "интеграционного теста" - это мое веб-приложение, которое будет работать на S3 и вызовет Lambdas в ответ к вызовам конечной точки шлюза API.

Было бы замечательно использовать мои фактические файлы конфигурации API-шлюза, чтобы я мог локально вызывать одни и те же методы и выполнять локальные локации Lambdas. В этой статье предполагается, что это невозможно, но нет локальной тестовой среды шлюза API: http://nickmchardy.com/blog/2015/09/my-thoughts-about-aws-api-gateway-working-with-aws-lambda

Возможно, это неясно, пример: если у меня есть пользователь/метод в Gateway API, с GET и POST, которые подключены к listUsers.js и createUser.js Lambdas соответственно в AWS; в развитии я бы хотел позвонить: http://localhost:0000/users GET/POST и запустить его Lambdas и дать правильные ответы, поэтому я могу запустить всю свою архитектуру локально.

Очевидно, что вызов вещи в URL-адресе не является особенно сложным, поэтому мой вопрос больше: что лучше всего подходит для этого, учитывая, что у меня будет моя конфигурация (Cloudfront!? JAWS!?) для того, как эти вещи соединяются вместе AWS, могу ли я использовать его для локального тестирования вообще?

Извините, если это либо не ясно, либо очень очевидно!

4b9b3361

Ответ 1

О. Ответ, по-видимому, "без сервера" (ранее JAWS): https://github.com/serverless/serverless. Нужно держать Гуглинг, извини! Не уверен, удалить ли этот вопрос сейчас?! Думаю, это может быть полезно для других? Тем более, что Serverless является новым?

Ответ 2

В настоящее время AWS API Gateway и AWS Lambda не имеют локальной версии тестирования, но мы рассмотрим как запрос функции.

Ответ 3

Наш пакет (Bespoken Tools) позволит вам сделать именно это. В этом руководстве объясняется, как: http://docs.bespoken.tools/en/latest/tutorials/tutorial_lambda_local/

Краткое резюме:
1) Установить бесплатные инструменты
  npm install bespoken-tools -g
2) Запустите прокси с помощью вашей Лямбды
  bst proxy lamdba index.js
3) Возьмите URL-адрес, который он распечатает, и используйте его в Gateway API. Настройте API-шлюз как интеграцию HTTP и используйте URL-адрес, который распечатывается при запуске прокси-сервера на шаге 2.

Надеюсь, что это поможет! После того, как вы настроите его, вызовы вашего API-шлюза придут непосредственно к Lambda, работающему локально на вашем ноутбуке.

Ответ 4

Невозможно запустить шлюз API локально, к сожалению.

Я не уверен, что есть лучшая практика, но мы делаем несколько копий одного API в шлюзе API: dev, staging и live API. Мы не решили использовать этапы, так как конечные точки были бы связаны с одной и той же лямбда-функцией, а управление версиями было действительно сложно (сейчас это немного лучше). Создавайте отдельные API-интерфейсы и отдельные функции лямбда-зон. Используя несколько сценариев оболочки, которые мы построили, мы можем развернуть их на любой этап.

Недостатком является то, что вы можете развиваться только в режиме онлайн, но для нас это не является недостатком.

Ответ 5

Недавно я использовал ClaudiaJS, чтобы помочь мне в разработке AWS Lambda. Создатель также создает эту библиотеку под названием claudia-api-builder, которая поможет вам построить AWS API Gateway, запускающий событие lambda. В рамках этой схемы вы можете протестировать конечную точку в своем тестовом классе или создать что-то вроде

var apiRequest = {
  context: {
    path: '/task',
    method: 'GET'
  },
  queryString: {
    name: 'mike'
  }
};
// This method will simulate your api gateway endpoint
api.router(apiRequest, {done: function(err, data){
  console.log(data);
}});

Несмотря на то, что этот способ не очень-то понятен, по крайней мере, это помогает мне тестировать модуль lambda api через Api-шлюз.

Ответ 6

Я предлагаю вам сделать следующее: 1. Когда вы пишете лямбда, убедитесь, что он не знает, что это называется (например, http), но он знает все, что ему нужно знать из события json.

2.Если вы сделали "1", используйте "grunt": https://www.npmjs.com/package/grunt-aws-lambda для тестирования вашей Lambda с пользовательскими "событиями". Это позволит вам объединить вашу Лямбду, отделенную от шлюза aws api.

3.use npm test для создания теста E2E с запросом http, чтобы проверить правильность выполнения вашего тела.

Ответ 7

Вы также можете использовать aws-sam-local Сначала вы должны установить докер. Затем выполните следующие действия:

$ npm install -g aws-sam-local
$ cd path/to/your/code
$ sam local start-api

CLI сопоставляет вашу функцию API с URL-адресом localhost. Теперь вы можете использовать cURL, Postman или ваш браузер, чтобы попасть в конечную точку API.