如何将Ubuntu 18.04下的webfont-generator库打包为AWS Lambda Layer
webfont-generator适配AWS Lambda Layer操作方案
- 核心前提:AWS Lambda运行环境基于Amazon Linux 2,你在Ubuntu 18.04下构建的二进制依赖存在glibc版本差异,无法直接运行,必须在和Lambda运行时对齐的环境中构建层
步骤1:准备对齐的构建环境
使用和你所用Node.js运行时版本匹配的AWS官方Lambda构建镜像作为打包环境,避免兼容性问题。
步骤2:改造构建脚本
原有基于apt的安装逻辑全部替换为Amazon Linux 2的yum包管理逻辑,所有产物输出到Lambda Layer要求的目录结构中,改造后的脚本示例如下:
mkdir -p /tmp/layer/bin /tmp/layer/lib /tmp/layer/nodejs/node_modules cd /tmp mkdir webfont-generator-1.3.2 && cd webfont-generator-1.3.2 # 下载对应版本的webfont-generator源码包并解压 wget [对应版本源码包地址] unzip 1.3.2.zip rm 1.3.2.zip mv webfont-generator-1.3.2/* . rm -rf webfont-generator-1.3.2 # 安装编译依赖 yum install -y java-11-openjdk-devel python2 fontforge python2-fontforge ant maven # 修复Java证书,证书文件输出到层目录,不要写入系统只读路径 printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /tmp/layer/cacerts # 执行编译安装 ./setup # 复制所有所需二进制、依赖库到层对应目录 cp /usr/bin/fontforge /tmp/layer/bin/ cp /usr/lib/*fontforge* /tmp/layer/lib/ cp -r ./dist/* /tmp/layer/bin/ # 若有Node.js封装模块,复制到/tmp/layer/nodejs/node_modules目录下
步骤3:配置Lambda运行参数
将打包好的层上传绑定到函数后,在函数环境变量中新增以下配置:
PATH:/opt/bin:$PATH(Lambda层所有文件会默认挂载到/opt目录)LD_LIBRARY_PATH:/opt/lib:$LD_LIBRARY_PATHJAVA_OPTS:-Djavax.net.ssl.trustStore=/opt/cacerts指向层内的证书文件,规避系统路径只读问题
步骤4:打包上传层
进入/tmp/layer目录,执行zip -r ../webfont-layer.zip .,注意zip包根目录直接为bin、lib、nodejs等文件夹,不要多套一层目录。上传zip包到Lambda Layer后即可绑定到你的函数使用。
内容的提问来源于stack exchange,提问作者onassar
相关产品推荐
相关产品推荐

