1

我正在尝试使用函数创建一个带有 micronaut 的 AWS Lambda 函数,即我创建了我的 poc 项目:

mn create-function-app --build=maven --jdk=11 micronaut-test

我可以非常轻松地构建并将其部署到 AWS,但我想知道是否有办法在本地运行它,以便我可以像运行常规 micronaut 应用程序一样快速测试更改

mvn mn:run

现在只是示例应用程序,重新提出我的问题;我可以在 BookRequestHandler 中触发执行方法而不将其上传到 AWS 吗?

提前致谢。

4

1 回答 1

-2

Maven 配置文件可用于选择运行时(在此示例中使用 netty)和主类:

    <profiles>
        <profile>
            <id>local</id>
            <properties>
                <exec.mainClass>micronaut.Application</exec.mainClass>
                <micronaut.runtime>netty</micronaut.runtime>
            </properties>
            <dependencies>
                <dependency>
                    <groupId>io.micronaut</groupId>
                    <artifactId>micronaut-http-server-netty</artifactId>
                    <scope>compile</scope>
                </dependency>
            </dependencies>
        </profile>
    </profiles>

使用带有调用函数的 Post 方法的控制器创建主类

package micronaut;

import io.micronaut.http.annotation.Body;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Post;
import io.micronaut.runtime.Micronaut;
import micronaut.test.Book;
import micronaut.test.BookRequestHandler;
import micronaut.test.BookSaved;

public class Application {

    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
    }

    @Controller()
    public static class LambdaController {

        private static final BookRequestHandler handler = new BookRequestHandler();

        @Post
        public BookSaved execute(@Body Book book) {
            return handler.execute(book);
        }
    }
}

并运行

mvnw mn:run -Plocal

现在你可以使用

curl --location --request POST 'http://localhost:8080/' \
--header 'Content-Type: application/json' \
--data-raw '{"name": "Test"}'

返回

{
    "name": "Test",
    "isbn": "2a163c3d-4bd6-444d-914d-58daf3e649b8"
}

这有点 hacky,要测试您的功能,您可以查看micronaut-test/src/test/java/micronaut/test/BookRequestHandlerTest.java类或查看测试 Lambda 处理程序官方文档。

注意:对于使用mn create-app -f aws-lambda ... 创建的应用程序,不需要 pom.xml 中的<exec.mainClass>,而是生成 Application.java。

于 2021-06-15T17:27:51.457 回答