Como usar o IronWord no AWS Lambda
Este artigo fornece um guia completo para configurar uma função AWS Lambda usando o IronWord. Você aprenderá como configurar o IronWord para criar e manipular documentos do Word em um ambiente AWS Lambda.
Como usar o IronWord no AWS Lambda
- Baixe e adicione o IronWord ao seu projeto.
- Crie um projeto AWS Lambda usando o Visual Studio.
- Modifique o código do FunctionHandler para gerar documentos do Word.
- Configure e implemente o projeto com um contêiner Docker.
- Invoque a função Lambda e verifique os arquivos de saída no S3.
Instalação
Como este exemplo irá ler/gravar documentos do Word em um bucket do S3, o pacote NuGet AWSSDK.S3 é necessário.
Utilizando o pacote ZIP do IronWord no AWS Lambda
Ao usar o pacote ZIP do IronWord , é importante definir um caminho de implantação temporário, pois o AWS Lambda possui um sistema de arquivos somente leitura, com exceção da pasta /tmp/. Você precisa configurar o IronWord para usar esta pasta para seus arquivos de tempo de execução:
var awsTmpPath = @"/tmp/";
IronSoftware.Word.Installation.DeploymentPath = awsTmpPath;
var awsTmpPath = @"/tmp/";
IronSoftware.Word.Installation.DeploymentPath = awsTmpPath;
Dim awsTmpPath = "/tmp/"
IronSoftware.Word.Installation.DeploymentPath = awsTmpPath
Integrando o IronWord com a AWS
Criar um projeto AWS Lambda
Utilize o Visual Studio para criar um projeto AWS Lambda em contêiner:
- Instale o AWS Toolkit para Visual Studio.
- Selecione o projeto AWS Lambda (.NET Core - C#)
- Selecione o modelo .NET 8 (Imagem de Contêiner) e conclua a configuração.
- Selecione a imagem do contêiner como o tipo de implantação.
Adicionar dependências de pacotes
Adicione os pacotes IronWord e AWSSDK.S3 ao seu projeto via NuGet. A biblioteca IronWord funciona perfeitamente no AWS Lambda com a configuração correta. Execute o seguinte comando para instalar o IronWord em seu projeto AWS sem problemas:
Install-Package IronWord
Atualize o Dockerfile do seu projeto para usar a imagem base do Lambda .NET 8 e copie os artefatos de compilação:
DE public.ecr.aws/lambda/dotnet:8
EXECUTE dnf update -y
DIRETÓRIO DE TRABALHO /var/tarefa
COPIAR "bin/Release/lambda-publish".
Modifique o código do manipulador de funções.
Abaixo está um exemplo de função Lambda que cria um documento Word simples, salva-o como um arquivo .docx e o carrega para um bucket 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
Aumentar a memória e o tempo limite
Como o processamento de documentos pode consumir muita memória, aumente a memória da sua função Lambda para pelo menos 512 MB e o tempo limite para 300 segundos no arquivo aws-lambda-tools-defaults.json:
{
"function-memory-size": 512,
"function-timeout": 300
}
Se você se deparar com erros como "Runtime exited with error: signal: killed", aumente a memória ou otimize seu código.
Publicar
Para publicar sua função Lambda:
- Clique com o botão direito do mouse no seu projeto no Visual Studio.
- Selecione Publicar no AWS Lambda... Siga o assistente e configure as definições conforme necessário.
Experimente!
Invoque a função Lambda através do Console do AWS Lambda ou do Visual Studio. Após a execução, verifique seu bucket S3 para encontrar o documento do Word recém-criado.
Perguntas frequentes
O que é o IronWord e como ele pode aprimorar o processamento de documentos do Word no AWS Lambda?
O IronWord é uma ferramenta poderosa para processar documentos do Word e, quando integrado ao AWS Lambda, oferece gerenciamento de documentos escalável e eficiente, permitindo automatizar e otimizar tarefas relacionadas a documentos do Word.
Como faço para integrar o IronWord com o AWS Lambda?
Para integrar o IronWord com o AWS Lambda, você precisa configurar o pacote IronWord em seu ambiente AWS Lambda, configurar as permissões necessárias e implantar o código da sua função que utiliza os recursos do IronWord para processamento de documentos.
Quais são os benefícios de usar o IronWord no AWS Lambda?
Utilizar o IronWord no AWS Lambda permite aproveitar a arquitetura sem servidor para o processamento de documentos do Word, proporcionando escalabilidade, custo-benefício e gerenciamento de infraestrutura reduzido.
Posso automatizar tarefas em documentos do Word usando o IronWord no AWS Lambda?
Sim, você pode automatizar várias tarefas em documentos do Word, como criação, modificação e conversão, usando o IronWord em funções do AWS Lambda.
É possível processar documentos Word extensos com o IronWord no AWS Lambda?
O IronWord foi projetado para lidar com eficiência com documentos Word grandes e, quando usado com o AWS Lambda, pode processar documentos de forma escalável, dependendo da configuração do Lambda.
Que tipo de operações em documentos do Word o IronWord pode executar no AWS Lambda?
O IronWord pode executar diversas operações em documentos do Word, incluindo edição, formatação, extração de texto e conversão de documentos para diferentes formatos, tudo dentro de um ambiente AWS Lambda.
Há algum pré-requisito para implantar o IronWord no AWS Lambda?
Antes de implantar o IronWord no AWS Lambda, certifique-se de ter uma conta da AWS, estar familiarizado com a configuração do AWS Lambda e ter configurado todas as funções e permissões do IAM necessárias.
Como o IronWord lida com atualizações e manutenção no AWS Lambda?
O IronWord é atualizado regularmente para garantir compatibilidade e melhorias de desempenho. Em um ambiente AWS Lambda, você pode atualizar facilmente seu pacote de implantação com a versão mais recente do IronWord para manter a funcionalidade ideal.
Que tipo de suporte está disponível para usar o IronWord com o AWS Lambda?
A Iron Software fornece documentação e suporte para auxiliar os usuários na integração e utilização do IronWord no AWS Lambda, garantindo que você possa aproveitar efetivamente seus recursos para suas necessidades de processamento de documentos.

