繁体   English   中英

如何将 Java Lambda 从 AWS API Gateway 转换为负载均衡器

[英]How To Convert Java Lambda from AWS API Gateway to Load Balancer

我有一个由 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 函数转换为从负载均衡器调用。

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

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

如果您在实现相同的过程中遇到任何问题,请告诉我。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM