c# - 在 AWS Lambda 上运行 IronPDF - 无法将二进制文件解压到/tmp (.NET/C#)

标签 c# .net aws-lambda

我正在尝试在 AWS lambda 上运行 IronPDF 的简单概念验证。代码部署良好,但在调用 IronPDF 时无法解压缩 Chromium 呈现我的 PDF 所需的二进制文件。

IronPDF Installation Docs

我正在使用无服务器 + 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/

相关文章:

c# - 使用扩展方法重写以下 LINQ 语句的优雅方法是什么?

.net - 如何使命名管道在 C++ 和 .NET 之间工作?

amazon-web-services - AWS lambda 创建函数只接受一个环境变量

c# - 您知道 .NET 探查器可以对计时器的调用堆栈进行采样,生成所用时间的 map 吗?

c# - 是否有任何机制可用于在基于 Windows CLR 的平台上使用 LDMA 或 RDMA?

c# - Entity Framework 在左连接时强制内连接 DefaultIfEmpty() 使用的语法

aws-lambda - Lambda 上的 puppeteer 师

node.js - serverless-s3-local 插件和 @aws-sdk/client-s3 使用 PutObjectCommand 返回错误

c# - 为什么要将 Vector2 变量初始化为 "Vector2.Zero"?

c# - Firebase 可以通过 REST 处理登录吗?