现有实现:
- 为x86_64体系结构配置的所有Lambda
- 这些lambdas将运行GraalVM编译的本机映像以执行一些功能
- 这个原生镜像的编译是使用原生Maven插件(0.9.9)&命令:mvn-B-DskipTests-Pnative clean package
- 我们在构建步骤中将其作为Github操作的一部分
要将Lambdas移动到Graviton2实例:-
-
我们根据本文将模板中的架构更改为"arm64"。这导致了此错误:
'./native-executable: cannot execute binary file'
-
为了让它在基于arm64的处理器上工作,我们尝试为aarm64重新编译这段java代码。以下是我做的几件事:-
- 使用DeLaGuardo/setup graalvm将Github上的graalvm设置更改为arm64基础,然后得到以下错误:
cannot execute binary file: Exec format error Error: Process completed with exit code 126.
- 试用Graalvm软件包安装&安装本机映像,获取java11-aarch64/x64/bin/gu:无法执行
binary file: Exec format error
- 尝试在arch包上运行,但它给了我
'Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?'
的错误 - 当我尝试创建一个没有Graalvm的构建时,也得到了
'mvn command not found'
- 使用DeLaGuardo/setup graalvm将Github上的graalvm设置更改为arm64基础,然后得到以下错误:
总之,"arm64"的简单架构值更改不足以在基于Graviton2的AWS Lambdas&Github-Java-Arm64堆栈上的许多迁移相关问题。
如果有人能帮助我摆脱这个瓶颈,我将不胜感激。
GraalVM支持arm64https://www.graalvm.org/22.0/reference-manual/native-image/ARM64/自21.0版起。
- 对于github操作,";amd64";至";臂64";不起作用,您还需要使用qemu模拟器
- 目前还不清楚你是如何设置github操作的,但你可以从这里获得一些参考https://docs.docker.com/ci-cd/github-actions/
- 从错误中可以看出
mvn
没有安装
对于aarch64,这里也有一些步骤https://www.graalvm.org/22.0/docs/getting-started/linux-aarch64/
从您发布的错误来看,docker进程可能没有足够的资源来编译本机可执行文件。
如果可能的话,我会仔细检查你的GitHub操作配置并添加更多内存。
如果您使用AWS运行时接口客户端作为解决方案的一部分,则需要2.1.1版本。这是第一个支持aarch64的版本。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-runtime-interface-client</artifactId>
<version>2.1.1</version>
</dependency>