Есть ли способ настроить лямбда-функцию AWS, чтобы она вызывалась как при событии CloudWatch, так и при вызове шлюза Api? - PullRequest
0 голосов
/ 12 апреля 2019

Я развернул свой Spring Boot на Aws Lambda и хочу две вещи
1. Вызовите некоторые из моих контроллеров через шлюз Api.
2. Запланируйте события так, чтобы они вызывали мои другие службы внутри контейнера Spring.

Я могу делать обе вещи, когда я делаю это отдельно в двух разных функциях.

Для события расписания я использую RequestHandler.

@Override
public AwsEventResponse handleRequest(AwsEventRequest input, Context context) {
    // invoke spring service here
    return new AwsEventResponse();
}

А для Api я использую RequestStreamHandler, поэтому он передает запрос Spring MVC:

@Override
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
    // do nothing here, controllers will be invoked
}

Но две разные функции не разделяют один контейнер Spring.

Я хочу иметь одну функцию со следующей конфигурацией:

Resources:
  HelloFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: org.ksapala.rainaproximator.aws.LambdaHandler::handleRequest
      Runtime: java8
      CodeUri: build/distributions/rain-aproximator-0.0.1-SNAPSHOT.zip
      MemorySize: 3008
      Policies: AWSLambdaBasicExecutionRole
      Timeout: 60
      Events:
        GetResource:
          Type: Api
          Properties:
            Path: /{proxy+}
            Method: any
        ScanSchedule:
          Type: Schedule
          Properties:
            Schedule: cron(0/2 * ? * * *)

И отправка запроса в зависимости от типа вызова. Итак, я хочу вот что:

@Override
public void handleRequest(InputStream input, OutputStream output, Context context) throws IOException {
    if (this is event) {
        //handle event
    } else {
        // this is request from Api Gateway so pass it to Spring Mvc
    }
}

Я пытался реализовать обе функции в одном классе, реализуя оба RequestHandler и RequestStreamHandler, но это не сработало. Я также пытался использовать RequestHandler, но он не обрабатывает Mvc. И когда я попробовал RequestStreamHandler, он не работает с событиями.

...