【问题标题】:How To Convert Java Lambda from AWS API Gateway to Load Balancer如何将 Java Lambda 从 AWS API Gateway 转换为负载均衡器
【发布时间】:2020-04-23 19:21:21
【问题描述】:

我有一个由 AWS Api Gateway 调用的 Java Lambda 函数。 Lambda 函数在请求正文中接受 PolicyNo 并返回相同的 PolicyNo 作为响应。下面是 Lambda 代码。

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;

public class AssuranceDataRequestHandler implements RequestHandler<APIGatewayProxyRequestEvent, APIGatewayProxyResponseEvent> {

    public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent apiGatewayProxyRequestEvent, Context context) {
        APIGatewayProxyResponseEvent apiGatewayProxyResponseEvent = new APIGatewayProxyResponseEvent();
        try {
            LambdaLogger logger = context.getLogger();
            final AmazonCloudWatch cw = AmazonCloudWatchClientBuilder.defaultClient();
            apiGatewayProxyRequestEvent.getPathParameters();
            String requestString = apiGatewayProxyRequestEvent.getBody();
            logger.log("API Gateway requestString : " + requestString);
            JSONParser parser = new JSONParser();
            JSONObject requestJsonObject = (JSONObject) parser.parse(requestString);
            String policyNo = null;

            if (requestJsonObject != null) {
                if (requestJsonObject.get("policyNo") != null) {
                    policyNo = requestJsonObject.get("policyNo").toString();
                }        
            }
            PolicyNo policyNoBo = new PolicyNo();
            policyNoBo.setPolicyNo();
            ObjectMapper mapper = new ObjectMapper();
            try {
                responseMessage = mapper.writeValueAsString(policyNoBo);
             /// responseMessage = new JSONObject(salesVideoResponse).toJSONString();
              System.out.println("ResultingJSONstring = " + responseMessage);
              //System.out.println(json);
            } catch (JsonProcessingException e) {
               e.printStackTrace();
            }
            generateResponse(apiGatewayProxyResponseEvent, responseMessage);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return apiGatewayProxyResponseEvent;
    }


    private void generateResponse(APIGatewayProxyResponseEvent apiGatewayProxyResponseEvent, String requestMessage) {
        apiGatewayProxyResponseEvent.setHeaders(Collections.singletonMap("timeStamp", String.valueOf(System.currentTimeMillis())));
        apiGatewayProxyResponseEvent.setStatusCode(200);
        apiGatewayProxyResponseEvent.setBody(requestMessage);
    }
}

我需要将此实现更改为负载均衡器,下面是 URL,我需要从 url 中获取 PolicyNo。

https://XXXXXXX/api/hk/health/policy/v1/policies/{policyNo}/coverage/benefit/

总之,我需要将我的 Lambda 函数转换为从负载均衡器调用。

【问题讨论】:

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


    【解决方案1】:

    您可以添加应用程序负载均衡器作为 lambda 函数的触发器,这与添加 API 网关触发器的方式类似。 在创建目标组时要小心...您必须选择 Lambda 函数而不是 ec2-instance。(参考屏幕截图) 无需更改代码,如果您的 Lambda 使用 API 网关接口,它应该可以很好地使用 ALB。

    更多帮助可以参考: https://aws.amazon.com/blogs/networking-and-content-delivery/lambda-functions-as-targets-for-application-load-balancers/

    如果您在实施时遇到任何问题,请告诉我。

    【讨论】:

    • 感谢@Vikas,这解决了我的大部分疑问。但是仍然存在一个问题,即如何在 Api 网关调用中获取路径参数。现在我已经使用Split从路径apiGatewayProxyRequestEvent中获取policyNo。但不确定它是否是最有效的方法。
    猜你喜欢
    • 2020-07-25
    • 2020-03-16
    • 2014-12-18
    • 2016-11-12
    • 2018-04-14
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多