我正在尝试在 AWS lambda 上运行 IronPDF 的简单概念验证。代码部署良好,但在调用 IronPDF 时无法解压缩 Chromium 呈现我的 PDF 所需的二进制文件。
我正在使用无服务器 + csharp 模板,并且在添加 IronPDF 之前调用的函数正常。
我尝试手动设置安装目录,但出现权限错误:
“IronPdf.Installation.TempFolderPath 当前设置为‘/tmp’,但没有足够的用户部署权限。\n请检查此目录是否存在,并为当前应用程序用户授予了完整权限”
据我所知,AWS lambda 用户对“/tmp”具有完全权限,但我以前从未运行过 .NET lambda。
编辑:我能够毫无问题地将文本文件写入/tmp。
public Response Hello(Request request)
{
IronPdf.Installation.TempFolderPath = @"/tmp";
IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello from DocThread</h1>");
PDF.SaveAs("/tmp/sample.pdf");
return new Response("Go Serverless v1.0! Your function executed successfully!", request);
}
最后,我想这只是我刚接触 AWS Lambda 上的 C#/.NET 的问题。在上传到 S3 之前将文件写入/tmp 是一种相当常见的模式。
在此先感谢您的帮助!
最佳答案
我也在和这个问题作斗争,我刚刚弄明白了。这是我所做的:
- 在本地运行 IronPDF 并将 TempFolderPath 设置为您可以快速找到的目录。 IronPdf 会将必要的文件(两个 .dll、一个 .dylib 和一个 .so)解压缩到此目录。
- 在上面设置的TempFolderPath中找到解压后的文件,将IronPdf_ChromeRenderingEngine.so复制到Lambda项目的根目录下。
- 在 Visual Studio 中,在 .so 的属性选项卡中将 Build Action 设置为 Content
- 在 Visual Studio 中,在 .so 的属性选项卡中将复制到输出目录设置为如果较新则复制
- 将
Environment.SetEnvironmentVariable("PATH", Environment.GetEnvironmentVariable("PATH") + ":"+ Environment.GetEnvironmentVariable("LAMBDA_TASK_ROOT"));
添加到 Lambda 的构造函数中。 - 设置
IronPdf.Installation.TempFolderPath = @"/tmp";
我还在 serverless.template 中将 MemorySize 设置为 512,将 Timeout 设置为 180,因为我的内存已达到 256 的最大值。
我希望这有道理并能帮助您解决问题!
关于c# - 在 AWS Lambda 上运行 IronPDF - 无法将二进制文件解压到/tmp (.NET/C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55960065/