【问题标题】:From Java Service to AWS Lambda and AWS Gateway API从 Java 服务到 AWS Lambda 和 AWS Gateway API
【发布时间】:2017-06-09 20:51:24
【问题描述】:

我有一个Java的基础服务,例如:

public interface FolderService {
   void deleteFolder(String path);
   void createFolder(String path, String folderName);
   void moveFolder(String oldPath, String newPath);
}

它有多种实现。如何在 AWS Lambda 和 API Gateway 上映射此服务?

我希望 API 具有格式

POST {some_url}/folderService/createFolder

GET {some_url}/folderService/createFolder?path=/home/user&folderName=test

【问题讨论】:

  • 我所做的是在 API Gateway 中为每个方法手动创建方法和资源,并为每个方法分配一个新的 Lambda 函数(它重用相同的 jar,但具有不同的处理程序)。我正在寻找一种更自动化的方法。

标签: java amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

首先,设计将每个 HTTP 方法映射到 Java 方法的 API。

  • DELETE /{path}
  • POST /{path}/{folderName}
  • PUT /{oldPath}?to={newPath}PUT /{newPath}?from={oldPath}

其次,创建 API 网关映射。每个 HTTP 方法都有自己的映射。使用方法的名称定义一个常量值。例如。

"action" : "deleteFolder"

创建三个 lambda 函数。函数处理程序中的每个函数都读取“action”属性并调用正确的方法。

创建一个单独的 lambda 函数来读取操作并调用相应的 Java 方法。

您已经有使用 AWS Lambda 的经验?映射部分可能很棘手。欢迎询问更多详情。

【讨论】:

  • 如果我为多个 java 方法创建一个 lambda 函数,那么我无法处理输入 json(每个方法调用都不同)。如何为 lambda 提供动态输入/输出 json 模式?谢谢
  • 映射是免费的。因此,例如,您可以定义一个 responseBody 属性,该属性独立于执行的方法接收您的数据。例如: { $inputRoot.responseBody } 或 { "data": $inputRoot.myResponse } 在这种情况下,处理程序必须在响应对象中包含一个 "responseBody" 或 "myResponse",在映射中称为 $ 变量。
猜你喜欢
  • 2019-07-08
  • 2017-06-26
  • 2019-12-21
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多