Как конвертировать Java Lambda из AWS API Gateway в балансировщик нагрузки - PullRequest
0 голосов
/ 06 января 2020

У меня есть лямбда-функция в Java, которая вызывается AWS Api Gateway. Функция Lambda принимает PolicyNo в теле запроса и возвращает тот же PolicyNo в ответ. Ниже приведен лямбда-код.

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-адрес, и мне нужно извлечь PolicyNo из URL.

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

Таким образом, мне нужно преобразовать мой Лямбда-функция для вызова из Load Balancer.

1 Ответ

0 голосов
/ 06 января 2020

Вы можете добавить балансировщик нагрузки приложения в качестве триггера для лямбда-функции, аналогично тому, как вы добавляете API Gateway Trigger. Будьте осторожны при создании целевой группы ... вы должны выбрать функцию Lambda вместо экземпляра ec2. (См. Скриншот) Никаких изменений в коде не требуется, если ваша Lambda работала с интерфейсом API-шлюза, он будет нормально работать с ALB.

для получения дополнительной помощи вы можете обратиться к: https://aws.amazon.com/blogs/networking-and-content-delivery/lambda-functions-as-targets-for-application-load-balancers/

Дайте мне знать, если у вас возникнут проблемы при реализации того же.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...