aws-lambda - 公开/部署多个处理程序(quarkus-lambda)

标签 aws-lambda quarkus

documentation显示公开的处理程序(通过打包应用程序中的 io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler::handleRequest)是通过设置 quarkus.lambda.handler 来配置的应用程序属性。但是,就我而言,我想从同一个项目部署多个处理程序。

有没有人知道从 quarkus-lambda 项目中公开多个处理程序的方法,或者是否有可能?

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

最佳答案

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

例如,如果您定义了多个处理程序:

    @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 模板构建单个项目并部署多个功能。

    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

关于aws-lambda - 公开/部署多个处理程序(quarkus-lambda),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61849837/

相关文章:

amazon-web-services - ServiceStack Redis 不在 AWS Lambda 上运行

java - 了解运行可用区的 AWS Lambda

node.js - 来自执行环境的 AWS Lambda 凭证没有执行角色的权限

mysql - Quarkus 响应式(Reactive)客户端 MySql 客户端未插入记录

java - 我如何在 Quarkus 中定义用于序列化的聊天集?

java - Quarkus:如何将复制的 SQL 数据库与读/写实例连接起来?

python - AWS Lambda 函数完成触发另一个 lambda 函数

amazon-web-services - AWS Lambda 的开发环境如何搭建?

java - 无法使用 Quarkus 找到请求目标的有效认证路径

java - Quarkus 应用程序属性作为 kubernetes/openshift 配置映射,用于 native 镜像部署