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

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

我在 Java 中有一个由 AWS Api 网关调用的 Lambda 函数。 Lambda 函数在请求正文中接受 PolicyNo,并在响应中接受 returns 相同的 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);
    }
}

我需要将此实现更改为 Load Balancer,下面是 URL,我需要从 url 获取 PolicyNo。

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

总而言之,我需要将我的 Lambda 函数转换为从 Load Balancer 调用。

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

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

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