如何在AWS Lambda上使用IronWord
本文提供了使用IronWord設定AWS Lambda函式的綜合指南。 您將學習如何配置IronWord以便在AWS Lambda環境中建立和操作Word文件。
如何在AWS Lambda上使用IronWord
- 下載並將IronWord新增到您的專案中
- 使用Visual Studio建立AWS Lambda專案
- 修改FunctionHandler程式碼以生成Word文件
- 使用Docker容器配置並部署專案
- 調用Lambda函式並檢查S3上的輸出文件
安裝
由於此範例將讀/寫Word文件到S3儲存桶,因此需要AWSSDK.S3 NuGet套件。
在AWS Lambda上使用IronWord ZIP套件
使用IronWord ZIP套件時,必須設定臨時部署路徑,因為AWS Lambda的文件系統是唯讀的,除了/tmp/文件夾。 您必須配置IronWord使用此文件夾作為其運行時文件的路徑:
:path=/static-assets/word/content-code-examples/get-started/aws-1.cs
var awsTmpPath = @"/tmp/";
Dim awsTmpPath As String = "/tmp/"
將IronWord與AWS整合
建立AWS Lambda專案
使用Visual Studio建立一個容器化的AWS Lambda專案:
- 安裝Visual Studio的AWS工具包
- 選擇AWS Lambda專案(.NET Core - C#)
- 選擇.NET 8(容器映像)藍圖並完成設置
- 選擇容器映像作為部署型別
新增套件依賴
通過NuGet將IronWord和AWSSDK.S3套件新增到您的專案中。 正確設定後,IronWord程式庫在AWS Lambda上運行流暢。運行以下命令以無縫安裝IronWord到您的AWS專案中:
Install-Package IronWord
更新專案的Dockerfile以使用.NET 8 Lambda基礎映像並複製構建工件:
FROM public.ecr.aws/lambda/dotnet:8
RUN dnf update -y
WORKDIR /var/task
COPY "bin/Release/lambda-publish" .
修改FunctionHandler程式碼
以下是一個範例Lambda函式,可以建立一個簡單的Word文件,將其保存為.docx文件,並上傳到S3儲存桶。
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronWord;
using IronWord.Models;
using System.Text;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace IronWordAwsLambda;
public class Function
{
private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);
public async Task FunctionHandler(ILambdaContext context)
{
var awsTmpPath = @"/tmp/";
License.LicenseKey = "YOUR-LICENSE-KEY"; // Replace if you have one
string filename = Guid.NewGuid() + ".docx";
string localPath = Path.Combine(awsTmpPath, filename);
string bucketName = "your-s3-bucket-name";
string objectKey = $"IronWordAwsLambda/{filename}";
try
{
// Create Word Document
var doc = new WordDocument();
Paragraph paragraph = new Paragraph(new TextContent("Hello from IronWord on AWS Lambda!"));
doc.AddParagraph(paragraph);
doc.SaveAs(localPath);
context.Logger.LogLine("Word document created.");
// Upload to S3
byte[] fileBytes = await File.ReadAllBytesAsync(localPath);
await UploadToS3Async(bucketName, objectKey, fileBytes);
context.Logger.LogLine($"Document uploaded to S3: {bucketName}/{objectKey}");
}
catch (Exception ex)
{
context.Logger.LogLine($"[ERROR] {ex.Message}");
}
}
private async Task UploadToS3Async(string bucketName, string objectKey, byte[] fileBytes)
{
using var stream = new MemoryStream(fileBytes);
var request = new PutObjectRequest
{
BucketName = bucketName,
Key = objectKey,
InputStream = stream,
ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
};
await _s3Client.PutObjectAsync(request);
}
}
using Amazon.Lambda.Core;
using Amazon.S3;
using Amazon.S3.Model;
using IronWord;
using IronWord.Models;
using System.Text;
// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]
namespace IronWordAwsLambda;
public class Function
{
private static readonly IAmazonS3 _s3Client = new AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1);
public async Task FunctionHandler(ILambdaContext context)
{
var awsTmpPath = @"/tmp/";
License.LicenseKey = "YOUR-LICENSE-KEY"; // Replace if you have one
string filename = Guid.NewGuid() + ".docx";
string localPath = Path.Combine(awsTmpPath, filename);
string bucketName = "your-s3-bucket-name";
string objectKey = $"IronWordAwsLambda/{filename}";
try
{
// Create Word Document
var doc = new WordDocument();
Paragraph paragraph = new Paragraph(new TextContent("Hello from IronWord on AWS Lambda!"));
doc.AddParagraph(paragraph);
doc.SaveAs(localPath);
context.Logger.LogLine("Word document created.");
// Upload to S3
byte[] fileBytes = await File.ReadAllBytesAsync(localPath);
await UploadToS3Async(bucketName, objectKey, fileBytes);
context.Logger.LogLine($"Document uploaded to S3: {bucketName}/{objectKey}");
}
catch (Exception ex)
{
context.Logger.LogLine($"[ERROR] {ex.Message}");
}
}
private async Task UploadToS3Async(string bucketName, string objectKey, byte[] fileBytes)
{
using var stream = new MemoryStream(fileBytes);
var request = new PutObjectRequest
{
BucketName = bucketName,
Key = objectKey,
InputStream = stream,
ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
};
await _s3Client.PutObjectAsync(request);
}
}
Imports Amazon.Lambda.Core
Imports Amazon.S3
Imports Amazon.S3.Model
Imports IronWord
Imports IronWord.Models
Imports System.Text
' Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
<Assembly: LambdaSerializer(GetType(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))>
Namespace IronWordAwsLambda
Public Class [Function]
Private Shared ReadOnly _s3Client As IAmazonS3 = New AmazonS3Client(Amazon.RegionEndpoint.APSoutheast1)
Public Async Function FunctionHandler(ByVal context As ILambdaContext) As Task
Dim awsTmpPath = "/tmp/"
License.LicenseKey = "YOUR-LICENSE-KEY" ' Replace if you have one
Dim filename As String = Guid.NewGuid().ToString() & ".docx"
Dim localPath As String = Path.Combine(awsTmpPath, filename)
Dim bucketName As String = "your-s3-bucket-name"
Dim objectKey As String = $"IronWordAwsLambda/{filename}"
Try
' Create Word Document
Dim doc = New WordDocument()
Dim paragraph As New Paragraph(New TextContent("Hello from IronWord on AWS Lambda!"))
doc.AddParagraph(paragraph)
doc.SaveAs(localPath)
context.Logger.LogLine("Word document created.")
' Upload to S3
Dim fileBytes() As Byte = Await File.ReadAllBytesAsync(localPath)
Await UploadToS3Async(bucketName, objectKey, fileBytes)
context.Logger.LogLine($"Document uploaded to S3: {bucketName}/{objectKey}")
Catch ex As Exception
context.Logger.LogLine($"[ERROR] {ex.Message}")
End Try
End Function
Private Async Function UploadToS3Async(ByVal bucketName As String, ByVal objectKey As String, ByVal fileBytes() As Byte) As Task
Dim stream = New MemoryStream(fileBytes)
Dim request = New PutObjectRequest With {
.BucketName = bucketName,
.Key = objectKey,
.InputStream = stream,
.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
}
Await _s3Client.PutObjectAsync(request)
End Function
End Class
End Namespace
增加記憶體和超時
由於文件處理可能消耗大量記憶體,請在aws-lambda-tools-defaults.json中將Lambda函式的記憶體增加至至少512 MB,並將超時設為300秒:
{
"function-memory-size": 512,
"function-timeout": 300
}
如果遇到像"Runtime exited with error: signal: killed"這樣的錯誤,請增加記憶體或優化您的程式碼。
發布
要發布您的Lambda函式:
- 在Visual Studio中右鍵單擊您的專案
- 選擇發佈到AWS Lambda...
- 按照精靈進行操作並根據需要配置設置
試試看!
通過AWS Lambda控制台或Visual Studio調用Lambda函式。 執行後,檢查您的S3儲存桶,查看新建立的Word文件。
常見問題
什麼是IronWord,它如何增強AWS Lambda上的Word文件處理?
IronWord是一個強大的Word文件處理工具,與AWS Lambda整合後,提供可擴展且高效的文件管理,讓您可以自動化和簡化Word文件任務。
如何整合IronWord與AWS Lambda?
要整合IronWord與AWS Lambda,您需要在AWS Lambda環境中設置IronWord套件,配置必要的權限,並部署利用IronWord功能的函式程式碼來進行文件處理。
在AWS Lambda上使用IronWord有哪些好處?
在AWS Lambda上使用IronWord,您可以利用無伺服器架構來進行Word文件處理,提供可擴展性,成本效益,以及減少基礎設施管理。
我可以在AWS Lambda上使用IronWord自動化Word文件任務嗎?
是的,您可以透過在AWS Lambda函式中使用IronWord來自動化多種Word文件任務,如建立、修改和轉換。
在AWS Lambda上使用IronWord可以處理大型Word文件嗎?
IronWord被設計來有效處理大型Word文件,並且在AWS Lambda上使用時,可以根據您的Lambda配置以可擴展的方式進行處理。
IronWord可以在AWS Lambda上執行哪些Word文件操作?
IronWord可以在AWS Lambda環境中對Word文件執行各種操作,包括編輯、格式化、提取文字,並將文件轉換為不同格式。
部署IronWord到AWS Lambda有任何先決條件嗎?
在部署IronWord到AWS Lambda之前,請確保您擁有AWS帳戶,熟悉AWS Lambda設置,以及配置任何必要的IAM角色和權限。
IronWord如何在AWS Lambda上處理更新和維護?
IronWord會經常更新以確保相容性和性能提升。在AWS Lambda環境中,您可以輕鬆地使用IronWord的最新版本更新您的部署包以保持最佳功能。
使用IronWord與AWS Lambda時有哪些支援可用?
Iron Software提供文件和支援以協助使用者將IronWord整合和使用在AWS Lambda上,確保您可以高效地利用它的能力來滿足您的文件處理需求。

