Cómo usar IronWord en AWS Lambda
Este artículo proporciona una guía completa para configurar una función AWS Lambda usando IronWord. Aprenderás cómo configurar IronWord para crear y manipular documentos de Word dentro de un entorno AWS Lambda.
Cómo usar IronWord en AWS Lambda
- Descargue y agregue IronWord a su proyecto
- Cree un proyecto de AWS Lambda con Visual Studio
- Modificar el código de FunctionHandler para generar documentos de Word
- Configurar e implementar el proyecto con un contenedor Docker
- Invocar la función Lambda y verificar los archivos de salida en S3
Instalación
Dado que este ejemplo leerá/escribirá documentos de Word en un bucket S3, se requiere el paquete NuGet AWSSDK.S3.
Uso del paquete ZIP de IronWord en AWS Lambda
Cuando uses el paquete ZIP de IronWord, es importante establecer una ruta de despliegue temporal porque AWS Lambda tiene un sistema de archivos de solo lectura excepto para la carpeta /tmp/. Debes configurar IronWord para usar esta carpeta para sus archivos de tiempo de ejecución:
var awsTmpPath = @"/tmp/";
IronSoftware.Word.Installation.DeploymentPath = awsTmpPath;
var awsTmpPath = @"/tmp/";
IronSoftware.Word.Installation.DeploymentPath = awsTmpPath;
Dim awsTmpPath = "/tmp/"
IronSoftware.Word.Installation.DeploymentPath = awsTmpPath
Integración de IronWord con AWS
Crear un proyecto de AWS Lambda
Usa Visual Studio para crear un proyecto containerizado AWS Lambda:
- Instala el AWS Toolkit para Visual Studio
- Selecciona Proyecto AWS Lambda (.NET Core - C#)
- Elige el blueprint .NET 8 (Imagen de Contenedor) y termina la configuración
- Selecciona imagen de contenedor como el tipo de despliegue
Agregar dependencias de paquetes
Añade los paquetes IronWord y AWSSDK.S3 a tu proyecto a través de NuGet. La biblioteca IronWord funciona sin problemas en AWS Lambda con la configuración correcta. Ejecuta el siguiente comando para instalar IronWord en tu proyecto AWS sin problemas:
Install-Package IronWord
Actualiza el Dockerfile de tu proyecto para usar la imagen base de .NET 8 Lambda y copia tus artefactos de construcción:
FROM public.ecr.aws/lambda/dotnet:8
RUN dnf update -y
WORKDIR /var/task
COPY "bin/Release/lambda-publish" .
Modificar el código del FunctionHandler
A continuación se muestra un ejemplo de una función Lambda que crea un documento simple de Word, lo guarda como un archivo .docx y lo sube a un 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 la memoria y el tiempo de espera
Debido a que el procesamiento de documentos puede ser intensivo en memoria, aumenta la memoria de la función Lambda a al menos 512 MB y el tiempo de espera a 300 segundos en aws-lambda-tools-defaults.json:
{
"function-memory-size": 512,
"function-timeout": 300
}
Si encuentras errores como Runtime exited with error: signal: killed, aumenta la memoria u optimiza tu código.
Publicar
Para publicar tu función Lambda:
- Haz clic derecho en tu proyecto en Visual Studio
- Selecciona Publicar en AWS Lambda...
- Sigue el asistente y configura los ajustes según sea necesario
¡Pruébalo!
Invoca la función Lambda a través de la Consola AWS Lambda o Visual Studio. Después de la ejecución, verifica tu bucket S3 para el documento de Word recién creado.
Preguntas Frecuentes
¿Qué es IronWord y cómo puede mejorar el procesamiento de documentos Word en AWS Lambda?
IronWord es una herramienta poderosa para procesar documentos Word, y cuando se integra con AWS Lambda, ofrece gestión de documentos escalable y eficiente, permitiéndole automatizar y simplificar las tareas de documentos Word.
¿Cómo integro IronWord con AWS Lambda?
Para integrar IronWord con AWS Lambda, necesita configurar el paquete de IronWord en su entorno de AWS Lambda, configurar los permisos necesarios y desplegar su código de función que utiliza las características de IronWord para el procesamiento de documentos.
¿Cuáles son los beneficios de usar IronWord en AWS Lambda?
El uso de IronWord en AWS Lambda le permite aprovechar la arquitectura sin servidor para el procesamiento de documentos Word, proporcionando escalabilidad, rentabilidad y una reducción en la gestión de infraestructura.
¿Puedo automatizar tareas de documentos Word usando IronWord en AWS Lambda?
Sí, puede automatizar varias tareas de documentos Word, como la creación, modificación y conversión utilizando IronWord en funciones de AWS Lambda.
¿Es posible manejar documentos Word grandes con IronWord en AWS Lambda?
IronWord está diseñado para manejar eficientemente documentos Word grandes, y cuando se usa con AWS Lambda, puede procesar documentos de manera escalable, dependiendo de su configuración de Lambda.
¿Qué tipo de operaciones en documentos Word puede realizar IronWord en AWS Lambda?
IronWord puede realizar una variedad de operaciones en documentos Word, incluyendo edición, formateo, extracción de texto y conversión de documentos a diferentes formatos, todo dentro de un entorno de AWS Lambda.
¿Existen requisitos previos para desplegar IronWord en AWS Lambda?
Antes de desplegar IronWord en AWS Lambda, asegúrese de tener una cuenta de AWS, familiaridad con la configuración de AWS Lambda y cualquier rol y permiso de IAM necesario configurado.
¿Cómo maneja IronWord las actualizaciones y el mantenimiento en AWS Lambda?
IronWord se actualiza regularmente para asegurar mejoras de compatibilidad y rendimiento. En un entorno de AWS Lambda, puede actualizar fácilmente su paquete de despliegue con la última versión de IronWord para mantener una funcionalidad óptima.
¿Qué soporte está disponible para usar IronWord con AWS Lambda?
Iron Software proporciona documentación y soporte para ayudar a los usuarios a integrar y usar IronWord en AWS Lambda, asegurando que pueda utilizar eficazmente sus capacidades para sus necesidades de procesamiento de documentos.

