在AWS Lambda中使用QuestPDF注册许可证时遇只读文件系统异常
解决AWS Lambda(.NET 6)中QuestPDF注册许可证时的只读文件系统异常
问题核心
AWS Lambda的/var/task目录是只读的,新版QuestPDF在初始化或注册许可证过程中,默认尝试向该目录写入gdal_wrap.so文件,触发System.IO.IOException: Read-only file system异常。
解决方案
1. 强制指定QuestPDF使用/tmp临时目录
在Lambda入口函数的初始化阶段,显式设置QuestPDF的临时文件路径为Lambda唯一可写的/tmp目录:
using QuestPDF; public class Function { public Function() { // 初始化QuestPDF前设置临时路径 Settings.TempPath = "/tmp"; // 执行许可证注册逻辑 // LicenseManager.RegisterLicense("你的许可证密钥"); } public async Task<string> FunctionHandler(string input, ILambdaContext context) { // PDF生成逻辑 return "PDF生成完成"; } }
2. 完善Dockerfile依赖配置
确保Dockerfile中完整安装QuestPDF在Linux环境运行所需的依赖,修正原配置的换行问题:
.... WORKDIR /var/task/ COPY --from=publish /app/publish . COPY --from=build /src/$ARCHIVE_FILE_PATH . RUN ls -la RUN yum install -y amazon-linux-extras && \ amazon-linux-extras install epel -y && \ yum install -y libgdiplus ca-certificates fontconfig freetype libX11 libXext libXrender && \ yum clean all
3. 许可证文件(若有)放置到/tmp目录
如果许可证需要读取本地文件,将许可证文件复制到/tmp目录(可通过Dockerfile复制,或Lambda启动时从S3下载至此),注册时指定该路径:
var licensePath = Path.Combine("/tmp", "license.key"); LicenseManager.RegisterLicense(File.ReadAllText(licensePath));
验证
部署修改后的代码至AWS Lambda,执行PDF生成操作,确认异常不再出现,PDF可正常生成。
内容的提问来源于stack exchange,提问作者Renan Carleto
相关产品推荐
相关产品推荐

