首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >公开/部署多个处理程序(夸克-lambda)

问公开/部署多个处理程序(夸克-lambda)
EN

Stack Overflow用户
提问于 2020-05-17 09:47:25
回答 2查看 1.5K关注 0票数 3

文档显示公开的处理程序(通过打包的应用程序中的io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest )是通过在application.properties中设置quarkus.lambda.handler来配置的。但是,在我的例子中,我想从同一个项目中部署多个处理程序。

有没有人知道一种方法,或者是否有可能从夸克-lambda项目中暴露出不止一个处理程序?

编辑:在阅读了https://github.com/quarkusio/quarkus/blob/master/extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java#L89之后,现在看来这是不可能的,对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-25 01:11:59

现在可以通过为每个lambda函数设置QUARKUS_LAMBDA_HANDLER环境变量来实现这一点。此环境变量将覆盖quarkus.lambda.handler中的application.properties。

例如,如果将多个处理程序定义为:

代码语言:javascript
复制
    @Named("Test")
    public class TestLambda implements RequestHandler<InputObject, OutputObject> {

        @Inject
        ProcessingService service;

        @Override
        public OutputObject handleRequest(InputObject input, Context context) {
            return new OutputObject().setRequestId("1").setResult("Test");
        }

    }

    @Named("Sample")
    public class SampleLambda implements RequestHandler<InputObject, OutputObject> {

        @Inject
        ProcessingService service;

        @Override
        public OutputObject handleRequest(InputObject input, Context context) {
            return new OutputObject().setRequestId("2").setResult("Sample");
        }
    }

您可以使用以下SAM模板构建单个项目并部署多个函数。

代码语言:javascript
复制
    AWSTemplateFormatVersion: '2010-09-09'
    Transform: AWS::Serverless-2016-10-31
    Description: AWS Serverless Quarkus - quarkus-amazon-lambda-common-deployment
    Globals:
      Api:
        EndpointConfiguration: REGIONAL
        BinaryMediaTypes:
          - "*/*"

    Resources:

      TestFunction:
        Type: AWS::Serverless::Function
        Properties:
          Handler: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest
          Runtime: java11
          CodeUri: target/function.zip
          MemorySize: 256
          Timeout: 15
          Policies: AWSLambdaBasicExecutionRole
          Environment:
            Variables:
              QUARKUS_LAMBDA_HANDLER: Test
          Events:
            TestFunction:
              Type: Api
              Properties:
                Path: /test
                Method: get


      SampleFunction:
        Type: AWS::Serverless::Function
        Properties:
          Handler: io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest
          Runtime: java11
          CodeUri: target/function.zip
          MemorySize: 256
          Timeout: 15
          Policies: AWSLambdaBasicExecutionRole
          Environment:
            Variables:
              QUARKUS_LAMBDA_HANDLER: Sample
          Events:
            HelloWorld:
              Type: Api
              Properties:
                Path: /sample
                Method: get
票数 3
EN

Stack Overflow用户

发布于 2020-05-23 17:20:13

您应该编写一个RestEasy资源,然后按照这里编写的步骤执行:

https://quarkus.io/guides/amazon-lambda-http

有关RestEasy & DynamoDB的完整示例,请阅读以下内容:

基本上,您只需在Quarkus中编写Rest资源,Quarkus通过SAM将所有资源端点部署并配置为AWS中的AWS和Lambda&处理程序。

确保您的类路径中有这两个依赖项:

代码语言:javascript
复制
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>url-connection-client</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-amazon-lambda-http</artifactId>
    </dependency>

然后跑:

代码语言:javascript
复制
mvn clean install

以确保在/target文件夹中创建了必要的工件。

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

https://stackoverflow.com/questions/61849837

复制
相关文章

相似问题

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