AWS SAM: приложение java8 / gradle завершается неудачно с ClassNotFound при развертывании (но работает нормально локально) - PullRequest
0 голосов
/ 20 июня 2019

Описание:

Приложение java8 запускается локально после выполнения sam build; sam local invoke..., но завершается неудачно с исключением ClassNotFound при развертывании с использованием sam package; sam deploy

Действия по воспроизведению проблемы:

  1. Инициализация приложения Java8 / gradle: sam init -r java8 -d gradle && cd sam-app
  2. Выполнить sam build: sam build --use-container
  3. Заметьте, что функция работает успешно локально (это происходит с тем же исключением ClassNotFound без сборки sam выше): sam local invoke HelloWorldFunction --no-event
  4. Пакет + развертывание:
sam package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket <some bucket name>
sam deploy --template-file packaged.yaml  --stack-name java8-gradle-test --capabilities CAPABILITY_IAM --region eu-west-2 --no-fail-on-empty-changeset
  1. В консоли AWS Lambda найдите функцию java8-gradle-test-HelloWorldFunction-..., добавьте произвольное тестовое событие и нажмите test

Наблюдаемый результат:

Результат выполнения: сбой

Журналы:

START RequestId: a5e25d74-4a0d-4763-b7a7-383aeede5c82 Version: $LATEST
Class not found: helloworld.App: java.lang.ClassNotFoundException
java.lang.ClassNotFoundException: helloworld.App
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)

END RequestId: a5e25d74-4a0d-4763-b7a7-383aeede5c82
REPORT RequestId: a5e25d74-4a0d-4763-b7a7-383aeede5c82  Duration: 58.33 ms  Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 69 MB  

Ожидаемый результат:

Тот же успешный ответ, что и при запуске sam local invoke для этой функции.


Кажется, есть некоторая неожиданная разница между тем, что происходит с sam local invoke и с sam package, когда последний не берет артефакты из sam build.

1 Ответ

0 голосов
/ 20 июня 2019

Решено!Это исправлено использованием sam package --output-template-file packaged.yaml --s3-bucket <some bucket name> вместо того, чтобы не указывать файл шаблона.Очевидно, sam local invoke собирал встроенный, но я не разрешал sam package.См. Объяснение на https://github.com/awslabs/aws-sam-cli/issues/978

...