AWS Lambda / Amazon Linux 2
AWS Lambda / Amazon Linux 2 (以管理員/根使用者安裝使用 IronPdf.Linux)
此資訊也顯示在我們的網站上 - https://ironpdf.com/how-to/creating-pdfs-csharp-amazon-aws-lambda/
AWS 說明
建立並使用以下的 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".
加入 IronPdf.Linux 將套件納入您的解決方案
- 修改 _FunctionHandler _代碼 - 這個範例將從網頁生成一個 PDF (https://ironpdf.com/) 並保存到
/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)
- 增加記憶體和超時時間 - 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-console6. 請遵循以下文件的最終部分來發布並嘗試 Lambda 函數 https://aws.amazon.com/blogs/developer/net-5-aws-lambda-support-with-container-images/
- Lambda 函式也可以使用 Lambda 控制台調用, [https://console.aws.amazon.com/lambda 或透過使用 AWS Toolkit for Visual Studio 的 Visual Studio 調用 - https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/lambda-creating-project-in-visual-studio.html](https://console.aws.amazon.com/lambda> or invoked via visual studio by using the AWS Toolkit for Visual Studio - <https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/lambda-creating-project-in-visual-studio.html)
如果您收到「GPU 處理程序無法使用」訊息,可能是因為安裝時未使用管理員權限。請嘗試使用管理員/root 權限再次運行該軟體。或將以下內容添加到您的 docker 文件中:
- RUN chmod 755 "runtimes/linux-x64/native/IronCefSubprocess"