Ошибка при обновлении AWS Java лямбда-функции с использованием конвейеров Bitbucket - java .lang.ClassNotFoundException - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть основа c AWS Лямбда Java Функция my-function

public class Hello implements RequestHandler<Request, Response> {
    public Response handleRequest(Request request, Context context) {
        String greetingString = String.format("Hello %s", request.name);
        return new Response(greetingString);
    }
}

Эта лямбда-функция зарегистрирована в AWS хорошо, контроллер com.tds.Hello и относится к AWS API Gateway правильно.

Окончательный JAR построен через Мавен без проблем. Когда я загружаю JAR напрямую в AWS, эта функция работает хорошо.

Проблема заключается в том, что я использую Bitbucket Pipelines для того, чтобы автоматизировать c загрузка (и обновление) после фиксации кода, конвейер работает хорошо с success статус после Этот учебник (Автоматизация AWS Lambda развертывания) , но когда я тестирую / запускаю функцию в AWS Я получаю следующую ошибку:

{"errorMessage": "Класс не найден: com.tds.Hello", "errorType": "java .lang.ClassNotFoundException"}

Кто-нибудь сталкивался с этой проблемой?

1 Ответ

0 голосов
/ 18 февраля 2020

Ошибка произошла, когда ZIP-файл был создан и пропущен через Bitbucket Artifacts . Я избегаю сжатия (ZIP) файла, вместо этого я использовал JAR напрямую для загрузки в AWS. Я обновил bitbucket-pipelines.yml следующим образом:

Старый bitbucket-pipeline.yml

pipelines:
  default:
    - step:
        name: Build and package
        script:
          - apt-get update && apt-get install -y zip
          - zip my-function.zip target/my-function.jar 
          - pipe: atlassian/aws-lambda-deploy:0.3.0
            variables:
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              AWS_DEFAULT_REGION: $AWS_REGION
              FUNCTION_NAME: 'my-function'
              COMMAND: 'update'
              ZIP_FILE: 'my-function.zip'

Новый bitbucket-pipeline.yml

pipelines:
  default:
    - step:
        name: Build and package
        script:
          - pipe: atlassian/aws-lambda-deploy:0.5.0
            variables:
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              AWS_DEFAULT_REGION: $AWS_REGION
              FUNCTION_NAME: 'my-function'
              COMMAND: 'update'
              ZIP_FILE: 'target/my-function.jar'
...