Как создать CRUD API на Amazon Lambda с помощью Micronaut - PullRequest
0 голосов
/ 18 февраля 2019

Я хочу создать CRUD API с использованием Micronaut и развернуть его на AWS Lambda, демонстрируя различные методы с помощью Amazon API Gateway.Я мог бы создавать разные проекты Kotlin для каждой конечной точки (GET, POST ...), один из которых включал бы одну функцию, но это довольно обременительно, поэтому я бы предпочел иметь один проект со всеми функциями CRUD.

Мой текущийПриложение содержит две функции: один поставщик (GET) и один потребитель (POST).

Приложение:

object Application {
        @JvmStatic
        fun main(args: Array<String>) {
            Micronaut.build()
                    .packages("micronaut.aws.poc")
                    .mainClass(Application.javaClass)
                    .start()
        }
}

Поставщик:

@FunctionBean("micronaut-aws-poc")
class MicronautAwsPocFunction : Supplier<String> {

    override fun get(): String {
        println("GET")
        return "micronaut-aws-poc"
    }
}

Потребитель:

@FunctionBean("micronaut-aws-poc-post")
class MicronautAwsPocPostFunction : Consumer<String> {

    override fun accept(t: String) {
        println("POST $t")
    }

}

Затем я создал ресурс в Amazon API Gateway с одним методом GET и одним методом POST.Проблема заключается в том, что независимо от того, какой из них я вызываю, всегда вызывается функция MicronautAwsPocFunction.

  1. Можно ли / рекомендуется встраивать множество функций в одну банку?
  2. Как сделатьВызовы POST вызывают функцию MicronautAwsPocPostFunction вместо функции MicronautAwsPocFunction?
  3. Если мне нужна дополнительная функция PUT, как я могу ее смоделировать?

1 Ответ

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

Я попробовал другой подход, вот как я его решил:

Вместо использования функций я изменил на Лямбда-функции с использованием AWS API Gateway Proxy .Также примите во внимание эту конкретную документацию aws lambda .

Я заново создал проект с помощью этой команды mn create-app micronaut-poc --features aws-api-gateway -l kotlin

Теперь у меня есть "нормальное" REST-приложение с двумя контроллерами:

@Controller("/")
class PingController {

    @Get("/")
    fun index(): String {
        return "{\"pong\":true}"
    }
}

@Controller("/")
class PongController {

    @Post("/")
    fun post(): String {
        println("PONG!!!!!!!")
        return "{\"ping\":true}"
    }
}

Волшебство происходит в конфигурации шлюза AWS API.Нам нужно настроить прокси-ресурс:

enter image description here

Наконец, мы можем вызвать лямбду из шлюза API, задав правильный метод HTTP. ВАЖНО: Установить заголовок хоста, в противном случае Micronaut выдаст nullpointerexception:

GET:

enter image description here

POST:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...