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

时间:2019-05-02 20:50:55

标签: 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 static void add_question(Question question) {
        Connection cnx;
        try {

            cnx = Connect.getConnection();
            cnx.setAutoCommit(false);

            String req = "insert into question(title, contenu, proposition, reponse) values(?,?,?,?)";

            PreparedStatement st = cnx.prepareStatement(req);
            st.setString(1, question.getTitle());
            st.setString(2, question.getContenu());

            for (Proposition prop : question.getListProp()) {
                st.setString(3, prop.getContenu());

                st.addBatch(); 
            }

            for (Correct corr : question.getReponse()) {
                st.setString(4, corr.getCorrect());

                st.addBatch();
            }

            st.executeBatch();
            cnx.commit();
}

最后,我想这只是我刚接触AWS Lambda上的C#/。NET的问题。在上传到S3之前将文件写入/ tmp是一种相当常见的模式。

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我也在努力解决这个问题,我才弄清楚了。这是我所做的:

  • 在本地运行IronPDF并将TempFolderPath设置为可以快速找到的目录。 IronPdf会将所需文件(两个.dll,.dylib和.so)解压缩到该目录。
  • 在上面设置的TempFolderPath中找到解压缩的文件,然后将IronPdf_ChromeRenderingEngine.so复制到Lambda项目的根目录。
  • 在Visual Studio中,将.so
  • 的属性选项卡中的生成操作设置为内容
  • 在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的内存上已达到极限。

我希望这有道理并能帮助您解决问题!