首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建和部署Micronaut本地图像CRUD应用程序,通过委托控制器处理APIGatewayV2HttpEvent

创建和部署Micronaut本地图像CRUD应用程序,通过委托控制器处理APIGatewayV2HttpEvent
EN

Stack Overflow用户
提问于 2022-04-24 14:09:12
回答 1查看 373关注 0票数 0

我正在尝试(通过Docker)部署一个CRUD Micronaut AWS Lambda (功能/应用程序?)这应该处理APIGatewayV2HTTPEvent请求,并应该编译成本地映像,但无法找到简洁的指南来实现这一点,所以我试图从不同的来源收集信息,并将它们混合在一起以实现我想要的。

其想法是有一个类似于这个处理程序的处理程序:

代码语言:javascript
复制
@Introspected
public class BookRequestHandler extends MicronautRequestHandler<Book, BookSaved> {

    @Override
    public BookSaved execute(Book input) {
        BookSaved bookSaved = new BookSaved();
        bookSaved.setName(input.getName());
        bookSaved.setIsbn(UUID.randomUUID().toString());
        return bookSaved;
    }
}

通过将一个APIGatewayV2HttpEvent委托给BookController来处理它,而不是让多个BookRequestHandler (ergo )处理每种端点类型。

我通过以下命令创建了样板应用程序:

代码语言:javascript
复制
mn create-app example.micronaut.micronautguide --features=graalvm,aws-lambda --build=maven --lang=java

我看到pom.xml中指定的应用程序的入口点是:

代码语言:javascript
复制
<exec.mainClass>io.micronaut.function.aws.runtime.MicronautLambdaRuntime</exec.mainClass>

我在Terraform的Lambda定义中指定了相同的入口点。

当我构建dockerfile并尝试运行

代码语言:javascript
复制
RUN /usr/lib/graalvm/bin/native-image --no-server -cp target/api-*.jar

我得到:

代码语言:javascript
复制
│ Error: Main entry point class
│ 'io.micronaut.function.aws.runtime.MicronautLambdaRuntime' not found.

这很有意义,因为类不在target文件夹中

Dockerfile:

代码语言:javascript
复制
FROM maven:3.6.3-openjdk-11 as builder
COPY . /home/application
WORKDIR /home/application
RUN mvn -e package
FROM amazonlinux:2018.03.0.20191014.0 as graalvm

ENV LANG=en_US.UTF-8

RUN yum install -y gcc gcc-c++ libc6-dev  zlib1g-dev curl bash zlib zlib-devel zip

ENV GRAAL_VERSION 20.1.0
ENV JDK_VERSION java11
ENV GRAAL_FILENAME graalvm-ce-${JDK_VERSION}-linux-amd64-${GRAAL_VERSION}.tar.gz

RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-${GRAAL_VERSION}/${GRAAL_FILENAME} -o /tmp/${GRAAL_FILENAME}

RUN tar -zxvf /tmp/${GRAAL_FILENAME} -C /tmp \
    && mv /tmp/graalvm-ce-${JDK_VERSION}-${GRAAL_VERSION} /usr/lib/graalvm

RUN rm -rf /tmp/*
CMD ["/usr/lib/graalvm/bin/native-image"]

FROM graalvm
COPY --from=builder /home/application/ /home/application/
WORKDIR /home/application
RUN /usr/lib/graalvm/bin/gu install native-image
RUN /usr/lib/graalvm/bin/native-image --no-server -cp target/api-*.jar
RUN chmod 777 bootstrap
RUN chmod 777 api
RUN zip -j function.zip bootstrap api
EXPOSE 8080
ENTRYPOINT ["/home/application/api"]

因此,广泛的问题是:是否有可能创建本地映像CRUD函数,该函数充当后端服务器,通过将APIGatewayV2HttpEvent请求委托给控制器来处理它们(基本上只有一个API处理程序委托给控制器)?

代码语言:javascript
复制
Micronaut version: 3.4.2
Lambda runtime: "provided.al2"

很抱歉提出这个问题,非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2022-08-09 08:54:08

如果您使用的是MicronautRequestHandler,我认为您应该使用代理lambda应用程序(而不是使用apiGateway )。

您只需声明一个应用程序和一些控制器。

请参阅:https://guides.micronaut.io/latest/mn-application-aws-lambda-graalvm-maven-java.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71989208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档