【发布时间】:2021-06-23 18:25:09
【问题描述】:
我正在关注来自 aws 博客的教程:https://aws.amazon.com/blogs/compute/clojure/ 以运行用 clojure 编写的 aws lambda 函数。
我使用生成 jar 文件的lein uberjar 编译代码。
代码:
项目.clj
(defproject lambda-clj-examples "0.1.0"
:dependencies [[org.clojure/clojure "1.7.0"]
[org.clojure/data.json "0.2.6"]
[com.amazonaws/aws-lambda-java-core "1.0.0"]]
:aot :all)
src/hello.clj
(ns hello
(:gen-class
:methods [^:static [handler [String] String]]))
(defn -handler [s]
(str "Hello " s "!"))
创建函数的命令
aws lambda create-function \
--function-name clj-hello \
--handler hello::handler \
--runtime java8 \
--memory 512 \
--timeout 10 \
--role arn:aws:iam::myawsaccountid:role/basic_lambda_role \
--zip-file fileb://./target/lambda-clj-examples-0.1.0-standalone.jar \
--region us-east-1
当我在 aws 控制台中转到我的函数并调用它时,会返回以下消息:
{
"errorMessage": "Error loading class PojoHandler: clojure/lang/IFn",
"errorType": "java.lang.NoClassDefFoundError"
}
日志输出为:
Error loading class hello: clojure/lang/IFn: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: clojure/lang/IFn
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
Caused by: java.lang.ClassNotFoundException: clojure.lang.IFn
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more
为了确保我的独立 jar 文件具有 IFn 依赖项,我运行
jar tf target/lambda-clj-examples-0.1.0-standalone.jar | grep "IFn.class"
输出是
clojure/lang/IFn.class
这似乎是一个好兆头。
我应该做些别的事情来使这个功能起作用吗?
提前感谢您的帮助
编辑:使用正确的处理程序更新 lambda 创建命令。
编辑 2:我意识到我的本地 Java 版本 11,而不是 Java 8,正如 @Simon 在他的回答的评论中指出的那样,这原来是问题所在。
【问题讨论】:
标签: amazon-web-services aws-lambda clojure leiningen