如何在AWS Lambda上使用IronWord

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

本文提供了使用IronWord設定AWS Lambda函式的綜合指南。 您將學習如何配置IronWord以便在AWS Lambda環境中建立和操作Word文件。

安裝

由於此範例將讀/寫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/"
$vbLabelText   $csharpLabel

將IronWord與AWS整合

建立AWS Lambda專案

使用Visual Studio建立一個容器化的AWS Lambda專案:

  1. 安裝Visual Studio的AWS工具包
  2. 選擇AWS Lambda專案(.NET Core - C#)
  3. 選擇.NET 8(容器映像)藍圖並完成設置
  4. 選擇容器映像作為部署型別

新增套件依賴

通過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
$vbLabelText   $csharpLabel

增加記憶體和超時

由於文件處理可能消耗大量記憶體,請在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上,確保您可以高效地利用它的能力來滿足您的文件處理需求。

Kye Stuart
技術作家

Kye Stuart在Iron Software結合了編碼熱情與寫作技能。就讀於Yoobee學院,專攻軟體部署,現在將複雜的技術概念轉化為清晰的教育內容。Kye重視終身學習,樂於迎接新的技術挑戰。

在工作之外,他喜歡PC遊戲、在Twitch上直播,以及戶外活動如園藝和帶他的狗Jaiya散步。Kye的直率方法使他成為Iron Software全球開發者解謎技術使命的關鍵。

準備開始了嗎?
Nuget 下載 49,323 | 版本: 2026.7 剛剛發布
Still Scrolling Icon

還在滾動?

想要快速證明嗎? PM > Install-Package IronWord
運行範例觀看您的資料變成Word檔。