我正在尝试(通过Docker)部署一个CRUD Micronaut AWS Lambda (功能/应用程序?)这应该处理APIGatewayV2HTTPEvent请求,并应该编译成本地映像,但无法找到简洁的指南来实现这一点,所以我试图从不同的来源收集信息,并将它们混合在一起以实现我想要的。
其想法是有一个类似于这个处理程序的处理程序:
@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 )处理每种端点类型。
我通过以下命令创建了样板应用程序:
mn create-app example.micronaut.micronautguide --features=graalvm,aws-lambda --build=maven --lang=java我看到pom.xml中指定的应用程序的入口点是:
<exec.mainClass>io.micronaut.function.aws.runtime.MicronautLambdaRuntime</exec.mainClass>我在Terraform的Lambda定义中指定了相同的入口点。
当我构建dockerfile并尝试运行
RUN /usr/lib/graalvm/bin/native-image --no-server -cp target/api-*.jar我得到:
│ Error: Main entry point class
│ 'io.micronaut.function.aws.runtime.MicronautLambdaRuntime' not found.这很有意义,因为类不在target文件夹中
Dockerfile:
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处理程序委托给控制器)?
Micronaut version: 3.4.2
Lambda runtime: "provided.al2"很抱歉提出这个问题,非常感谢!
发布于 2022-08-09 08:54:08
如果您使用的是MicronautRequestHandler,我认为您应该使用代理lambda应用程序(而不是使用apiGateway )。
您只需声明一个应用程序和一些控制器。
请参阅:https://guides.micronaut.io/latest/mn-application-aws-lambda-graalvm-maven-java.html
https://stackoverflow.com/questions/71989208
复制相似问题