AWS Lambda IronPDF 在 Amazon Linux 2 上

This article was translated from English: Does it need improvement?
Translated
View the article in English

AWS Lambda / Amazon Linux 2(使用IronPdf.Linux以管理員/根用戶身份安裝)

此信息也顯示在我們的網站上 - https://ironpdf.com/how-to/creating-pdfs-csharp-amazon-aws-lambda/

AWS 指南

  1. 請參見https://aws.amazon.com/blogs/developer/net-5-aws-lambda-support-with-container-images/

  2. 創建並使用以下的 Dockerfile:
    FROM public.ecr.aws/lambda/dotnet:5.0
    WORKDIR /var/task
    RUN yum install -y pango.x86_64
    RUN yum install -y libXcomposite.x86_64
    RUN yum install -y libXcursor.x86_64
    RUN yum install -y libXdamage.x86_64
    RUN yum install -y libXext.x86_64
    RUN yum install -y libXi.x86_64
    RUN yum install -y libXtst.x86_64
    RUN yum install -y cups-libs.x86_64
    RUN yum install -y libXScrnSaver.x86_64
    RUN yum install -y libXrandr.x86_64
    RUN yum install -y GConf2.x86_64
    RUN yum install -y alsa-lib.x86_64
    RUN yum install -y atk.x86_64
    RUN yum install -y gtk3.x86_64
    RUN yum install -y ipa-gothic-fonts
    RUN yum install -y xorg-x11-fonts-100dpi
    RUN yum install -y xorg-x11-fonts-75dpi
    RUN yum install -y xorg-x11-utils
    RUN yum install -y xorg-x11-fonts-cyrillic
    RUN yum install -y xorg-x11-fonts-Type1
    RUN yum install -y xorg-x11-fonts-misc
    RUN yum install -y glibc-devel.x86_64
    RUN yum install -y at-spi2-atk.x86_64
    RUN yum install -y mesa-libgbm.x86_64
    # This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image.
    # The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built
    # with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project
    # will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir`
    # set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish".
    #
    # Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image.
    # For more information on this approach checkout the project's README.md file.
    COPY "bin/Release/lambda-publish".
    FROM public.ecr.aws/lambda/dotnet:5.0
    WORKDIR /var/task
    RUN yum install -y pango.x86_64
    RUN yum install -y libXcomposite.x86_64
    RUN yum install -y libXcursor.x86_64
    RUN yum install -y libXdamage.x86_64
    RUN yum install -y libXext.x86_64
    RUN yum install -y libXi.x86_64
    RUN yum install -y libXtst.x86_64
    RUN yum install -y cups-libs.x86_64
    RUN yum install -y libXScrnSaver.x86_64
    RUN yum install -y libXrandr.x86_64
    RUN yum install -y GConf2.x86_64
    RUN yum install -y alsa-lib.x86_64
    RUN yum install -y atk.x86_64
    RUN yum install -y gtk3.x86_64
    RUN yum install -y ipa-gothic-fonts
    RUN yum install -y xorg-x11-fonts-100dpi
    RUN yum install -y xorg-x11-fonts-75dpi
    RUN yum install -y xorg-x11-utils
    RUN yum install -y xorg-x11-fonts-cyrillic
    RUN yum install -y xorg-x11-fonts-Type1
    RUN yum install -y xorg-x11-fonts-misc
    RUN yum install -y glibc-devel.x86_64
    RUN yum install -y at-spi2-atk.x86_64
    RUN yum install -y mesa-libgbm.x86_64
    # This COPY command copies the .NET Lambda project's build artifacts from the host machine into the image.
    # The source of the COPY should match where the .NET Lambda project publishes its build artifacts. If the Lambda function is being built
    # with the AWS .NET Lambda Tooling, the `--docker-host-build-output-dir` switch controls where the .NET Lambda project
    # will be built. The .NET Lambda project templates default to having `--docker-host-build-output-dir`
    # set in the aws-lambda-tools-defaults.json file to "bin/Release/lambda-publish".
    #
    # Alternatively Docker multi-stage build could be used to build the .NET Lambda project inside the image.
    # For more information on this approach checkout the project's README.md file.
    COPY "bin/Release/lambda-publish".
SHELL
  1. IronPdf.Linux 套件添加到您的解決方案中

  2. 修改 _FunctionHandler _code - 此範例將從網頁 (https://ironpdf.com/) 建立 PDF 並保存到 /tmp。 要檢視此 PDF,必須將其上傳至另一個服務,例如 S3。(官方 AWS 範例可在此處查看 - https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/dotnetv3/S3/S3_Basics/S3_Basics.cs
    public Casing FunctionHandler(string input, ILambdaContext context)
            {
                try
                {
                    context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");

                    var awsTmpPath = @"/tmp/"; // AWS temporary storage

                    //[optional] enable logging (please uncomment these code if you face any problem)
                    //IronPdf.Logging.Logger.EnableDebugging = true;
                    //IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
                    //IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

                    //set your license key
                    IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
                    //set ChromeGpuMode to Disabled
                    IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
                    //set DefaultRenderingEngine to Chrome
                    IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome;
                    //set IronPDF Temp Path
                    Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process);
                    Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process);
                    IronPdf.Installation.TempFolderPath = awsTmpPath;
                    IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;
                    //set auto LinuxAndDockerDependenciesAutoConfig
                    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
                    context.Logger.LogLine($"creating IronPdf.ChromePdfRenderer");
                    var Renderer = new IronPdf.ChromePdfRenderer();
                    context.Logger.LogLine($"rendering Pdf");
                    using var pdfDoc = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
                    var guid = Guid.NewGuid();
                    var fileName = $"/tmp/{input}_{guid}.pdf"; //save file to /tmp

                    context.Logger.LogLine($"saving pdf name : {fileName}");
                    pdfDoc.SaveAs(fileName);
                    //here you can upload saved pdf file to anywhere such as S3.
                    context.Logger.LogLine($"COMPLETE!");
                }
                catch (Exception e)
                {
                    context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
                }
                return new Casing(input?.ToLower(), input?.ToUpper());
            }
        }
        public record Casing(string Lower, string Upper);
    public Casing FunctionHandler(string input, ILambdaContext context)
            {
                try
                {
                    context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}");

                    var awsTmpPath = @"/tmp/"; // AWS temporary storage

                    //[optional] enable logging (please uncomment these code if you face any problem)
                    //IronPdf.Logging.Logger.EnableDebugging = true;
                    //IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
                    //IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

                    //set your license key
                    IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";
                    //set ChromeGpuMode to Disabled
                    IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
                    //set DefaultRenderingEngine to Chrome
                    IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome;
                    //set IronPDF Temp Path
                    Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process);
                    Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process);
                    IronPdf.Installation.TempFolderPath = awsTmpPath;
                    IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath;
                    //set auto LinuxAndDockerDependenciesAutoConfig
                    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
                    context.Logger.LogLine($"creating IronPdf.ChromePdfRenderer");
                    var Renderer = new IronPdf.ChromePdfRenderer();
                    context.Logger.LogLine($"rendering Pdf");
                    using var pdfDoc = Renderer.RenderUrlAsPdf("https://ironpdf.com/");
                    var guid = Guid.NewGuid();
                    var fileName = $"/tmp/{input}_{guid}.pdf"; //save file to /tmp

                    context.Logger.LogLine($"saving pdf name : {fileName}");
                    pdfDoc.SaveAs(fileName);
                    //here you can upload saved pdf file to anywhere such as S3.
                    context.Logger.LogLine($"COMPLETE!");
                }
                catch (Exception e)
                {
                    context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}");
                }
                return new Casing(input?.ToLower(), input?.ToUpper());
            }
        }
        public record Casing(string Lower, string Upper);
Public Function FunctionHandler(ByVal input As String, ByVal context As ILambdaContext) As Casing
				Try
					context.Logger.LogLine($"START FunctionHandler RequestId: {context.AwsRequestId} Input: {input}")

					Dim awsTmpPath = "/tmp/" ' AWS temporary storage

					'[optional] enable logging (please uncomment these code if you face any problem)
					'IronPdf.Logging.Logger.EnableDebugging = true;
					'IronPdf.Logging.Logger.LogFilePath = awsTmpPath;
					'IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.All;

					'set your license key
					IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY"
					'set ChromeGpuMode to Disabled
					IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
					'set DefaultRenderingEngine to Chrome
					IronPdf.Installation.DefaultRenderingEngine = IronPdf.Rendering.PdfRenderingEngine.Chrome
					'set IronPDF Temp Path
					Environment.SetEnvironmentVariable("TEMP", awsTmpPath, EnvironmentVariableTarget.Process)
					Environment.SetEnvironmentVariable("TMP", awsTmpPath, EnvironmentVariableTarget.Process)
					IronPdf.Installation.TempFolderPath = awsTmpPath
					IronPdf.Installation.CustomDeploymentDirectory = awsTmpPath
					'set auto LinuxAndDockerDependenciesAutoConfig
					IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
					context.Logger.LogLine($"creating IronPdf.ChromePdfRenderer")
					Dim Renderer = New IronPdf.ChromePdfRenderer()
					context.Logger.LogLine($"rendering Pdf")
					Dim pdfDoc = Renderer.RenderUrlAsPdf("https://ironpdf.com/")
					Dim guid As System.Guid = System.Guid.NewGuid()
					Dim fileName = $"/tmp/{input}_{guid}.pdf" 'save file to /tmp

					context.Logger.LogLine($"saving pdf name : {fileName}")
					pdfDoc.SaveAs(fileName)
					'here you can upload saved pdf file to anywhere such as S3.
					context.Logger.LogLine($"COMPLETE!")
				Catch e As Exception
					context.Logger.LogLine($"[ERROR] FunctionHandler : {e.Message}")
				End Try
				Return New Casing(input?.ToLower(), input?.ToUpper())
End Function
		}
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'		public record Casing(string Lower, string Upper)
$vbLabelText   $csharpLabel
  1. 提高記憶體和超時 - IronPDF 需要比 Lambda 的預設值更多的時間和記憶體。 這可以在 aws-lambda-tools-defaults.json 中配置。 請調整此設定以符合您的功能。

    在這個例子中。 我們設定為 512(MB)和 330(秒):

    "function-memory-size" : 512,
        "function-timeout"     : 330,

也可以使用 Lambda 控制台更新配置 - https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-memory-console

  1. 請按照以下文件的最後部分發布並嘗試 Lambda 函數 https://aws.amazon.com/blogs/developer/net-5-aws-lambda-support-with-container-images/

  2. 可以使用 Lambda 控制台 Lambda 控制台,或通過可視化工作室使用 AWS Toolkit for Visual Studio 調用此 Lambda 函數 - AWS Toolkit for Visual Studio

    如果您收到“GPU進程無法使用”的消息,可能是安裝時未以管理員權限運行。 請嘗試以管理員/根權限再次運行軟體。 或者在您的 docker 文件中添加以下内容:

  • RUN chmod 755 "runtimes/linux-x64/native/IronCefSubprocess"