【问题标题】:How to create a CRUD API on Amazon Lambda using Micronaut如何使用 Micronaut 在 Amazon Lambda 上创建 CRUD API
【发布时间】:2019-07-11 20:00:40
【问题描述】:

我想使用 Micronaut 创建一个 CRUD API 并将其部署在 AWS Lambda 上,使用 Amazon API Gateway 公开不同的方法。我可以为每个端点(GET、POST...)创建不同的 Kotlin 项目,一个包括一个函数,但这有点麻烦,所以我宁愿有一个包含所有 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")
    }

}

然后,我使用一种 GET 和一种 POST 方法在 Amazon API Gateway 中创建了一个资源。问题是,无论我调用哪一个,MicronautAwsPocFunction 总是被调用。

  1. 是否可以/建议在一个 jar 中嵌入许多功能?
  2. 如何让 POST 调用调用 MicronautAwsPocPostFunction 而不是 MicronautAwsPocFunction?
  3. 如果我想要一个额外的 PUT 函数,我该如何建模?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway micronaut


    【解决方案1】:

    我尝试了一种不同的方法,这就是我解决它的方法:

    我没有使用函数,而是改为Lambda Functions Using AWS API Gateway Proxy。还要考虑this specific aws lambda documentation

    我用这个命令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 Gateway 配置中。我们必须配置一个代理资源:

    最后,我们可以从 API Gateway 调用 lambda,设置正确的 HTTP 方法。 重要提示:设置主机头,否则 Micronaut 会抛出空指针异常:

    获取:

    发布:

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多