Compartir a través de


Migración de cargas de trabajo de AWS Lambda a Azure Functions

La migración de una carga de trabajo sin servidor que usa Amazon Web Services (AWS) Lambda a Azure Functions requiere una planeación e implementación cuidadosas. En este artículo se proporcionan instrucciones esenciales para ayudarle a:

  • Realice un análisis exploratorio de su carga de trabajo.
  • Obtenga información sobre cómo realizar actividades clave de migración, como la planeación de la migración previa y la evaluación de cargas de trabajo.
  • Evalúe y optimice una carga de trabajo migrada.

Ámbito

En este artículo se describe la migración de una instancia de AWS Lambda a Azure Functions.

Este artículo no aborda:

  • Migración a su propia solución de hospedaje de contenedores, como a través de Azure Container Apps.
  • Hospedaje de contenedores de AWS Lambda en Azure.
  • Enfoques fundamentales de adopción de Azure de su organización, como zonas de aterrizaje de Azure u otros temas tratados en la metodología de migración de Cloud Adoption Framework.

Comparación de la funcionalidad

En este artículo se asignan características de AWS Lambda a equivalentes de Azure Functions para ayudar a garantizar la compatibilidad.

Importante

Puede optar por incluir la optimización en el plan de migración, pero Microsoft recomienda un proceso de dos pasos. Migre primero las funcionalidades "similares" y, a continuación, evalúe las oportunidades de optimización en Azure.

Los esfuerzos de optimización deben ser continuos y ejecutarse a través de los procesos de control de cambios del equipo de carga de trabajo. Una migración que agrega más funcionalidades durante una migración incurre en riesgos y amplía innecesariamente el proceso.

Perspectiva de la carga de trabajo

Este artículo se centra en cómo migrar una carga de trabajo de AWS Lambda a Azure Functions y las dependencias comunes para cargas de trabajo sin servidor. Este proceso puede implicar varios servicios porque las cargas de trabajo componen muchos recursos y procesos para administrar esos recursos. Para tener una estrategia completa, debe combinar las recomendaciones presentadas en este artículo con un plan mayor que incluya los demás componentes y procesos de la carga de trabajo.

Realiza un proceso de detección sobre la carga de trabajo existente

El primer paso es llevar a cabo un proceso de detección detallado para evaluar la carga de trabajo de AWS Lambda existente. El objetivo es comprender en qué características y servicios de AWS se basa la carga de trabajo. Compile un inventario completo de las funciones de AWS Lambda mediante herramientas de AWS, como SDK específicos del servicio, API, CloudTrail y la CLI de AWS para evaluar la carga de trabajo en AWS. Debe comprender los siguientes aspectos clave del inventario de AWS Lambda:

  • Casos de uso
  • Configuraciones
  • Configuraciones de seguridad y redes
  • Mecanismos de herramientas, supervisión, registro y observabilidad
  • Dependencias
  • Objetivos de confiabilidad y estado de confiabilidad actual
  • Coste de propiedad
  • Objetivos de rendimiento y rendimiento actual

Realizar la planificación previa a la migración

Antes de empezar a migrar la carga de trabajo, debe asignar características de AWS Lambda a Azure Functions para garantizar la compatibilidad y desarrollar un plan de migración. A continuación, puede seleccionar cargas de trabajo clave para obtener una prueba de concepto.

También necesita correlacionar los servicios de AWS de los que depende Lambda con las dependencias equivalentes en Azure.

Asignación de características de AWS Lambda a Azure Functions

En las tablas siguientes se comparan los conceptos, recursos y propiedades de AWS Lambda con sus equivalentes correspondientes en Azure Functions, en concreto, el plan de hospedaje flex Consumption.

Idiomas compatibles

Lenguaje de programación Versiones compatibles con AWS Lambda Versiones admitidas de Azure Functions
Node.js. 20, 22 20, 22
Pitón 3.9, 3.10, 3.11, 3.12, 3.13 3.9, 3.10, 3.11
Java 8, 11, 17, 21 8, 11, 17, 21
PowerShell No está soportado 7.4
.NET .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Rubí 3.2, 3.3 Controladores personalizados
Go Tiempo de ejecución de solo sistema operativo Controladores personalizados
Óxido Tiempo de ejecución de solo sistema operativo Controladores personalizados

Modelo de programación

Característica AWS Lambda Funciones de Azure
Desencadenadores Se integra con otros servicios de AWS a través de orígenes de eventos. Proporciona formas automáticas y programáticas de vincular funciones lambda con orígenes de eventos. Desencadena una función basada en eventos específicos, como actualizaciones en una base de datos o un nuevo mensaje de una cola. Por ejemplo, un desencadenador de Azure Cosmos DB permite que las funciones respondan automáticamente a inserciones y actualizaciones en un contenedor de Azure Cosmos DB. Esta acción permite el procesamiento en tiempo real de los cambios de datos.

Functions también se integra con Azure Event Grid, por lo que puede procesar eventos de servicios de Azure, como Azure Storage y Azure Media Services, y orígenes de eventos externos. Event Grid actúa como un servicio de enrutamiento de eventos extensible centralizado que complementa los desencadenadores de Functions y permite una alta escalabilidad y una amplia cobertura de origen de eventos.
Vinculaciones No tiene enlaces. Usa SDK de AWS dentro de las funciones lambda para administrar manualmente las interacciones con otros servicios de AWS. Los enlaces, configurados como entrada o salida, permiten conexiones declarativas a los servicios, lo que minimiza la necesidad de código de SDK explícito. Por ejemplo, puede configurar enlaces para leer desde Blob Storage, escribir en Azure Cosmos DB o enviar correos electrónicos a través de SendGrid sin administrar manualmente las integraciones.

Desencadenadores y enlaces de eventos

Desencadenador o servicio de AWS Lambda Desencadenador de Azure Functions Descripción
Puerta de enlace de API: solicitudes HTTP Desencadenador HTTP Estos desencadenadores permiten controlar directamente las solicitudes HTTP.
Servicio de cola simple (SQS) Desencadenador de Azure Queue Storage o desencadenador de Azure Service Bus Estos desencadenadores pueden procesar mensajes en colas.
Servicio de notificaciones simple (SNS) Desencadenador de Event Grid o desencadenador de Service Bus Estos desencadenadores habilitan el procesamiento de notificaciones.
Kinesis (flujos de datos) Desencadenador de Event Hubs Estos desencadenadores consumen flujos de datos.
DynamoDB (cambios de tabla) Desencadenador de fuente de cambios de Azure Cosmos DB Estos desencadenadores escuchan los cambios en las tablas.
CloudWatch Events o EventBridge Scheduler Desencadenador de temporizador Estos desencadenadores controlan las funciones programadas o basadas en el tiempo.
S3 (eventos de objeto) Desencadenador de Blob Storage Estos desencadenadores reaccionan a eventos en Blob Storage.
Amazon Relational Database Service (RDS) Desencadenador de Azure SQL Estos desencadenadores reaccionan a los cambios de la base de datos.
Streaming administrado para Apache Kafka (MSK) Desencadenador de Apache Kafka Estos desencadenadores reaccionan a los mensajes temáticos de Kafka.
Amazon ElastiCache Desencadenador de Azure Redis Estos desencadenadores reaccionan a los mensajes de Redis.
Amazon MQ Desencadenador de RabbitMQ Estos desencadenadores reaccionan a los mensajes de RabbitMQ.

Permisos

AWS Lambda Funciones de Azure
El rol de ejecución de Lambda concede permisos a las funciones lambda para interactuar con otros servicios de AWS. Cada función lambda tiene un rol asociado de administración de identidades y accesos (IAM) que determina sus permisos mientras se ejecuta. Las identidades administradas proporcionan una identidad para la aplicación de funciones que le permite autenticarse con otros servicios de Azure sin almacenar credenciales en el código. El control de acceso basado en rol asigna los roles adecuados a la identidad administrada de Microsoft Entra ID para conceder acceso a los recursos que requiere.
Declaraciones de políticas basadas en recursos

- AWSLambda_FullAccess proporciona acceso total a todas las operaciones lambda, incluida la creación, actualización y eliminación de funciones.

- AWSLambda_ReadOnlyAccess proporciona acceso de solo lectura para ver las funciones lambda y sus configuraciones.

- Directivas personalizadas de IAM.
Roles integrados basados en recursos:

- El rol Propietario proporciona acceso total, incluida la administración de permisos de acceso.

- El rol Colaborador puede crear y eliminar aplicaciones de funciones, configurar las opciones e implementar código. No puede administrar el acceso.

- El rol Lector de supervisión puede conceder acceso de solo lectura a los datos y la configuración de supervisión. También puede asignar roles personalizados.

Dirección URL de la función

AWS Lambda Funciones de Azure
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (nombre de host predeterminado global original)

- <appname>-<randomhash>.<Region>.azurewebsites.net (nuevo, nombre de host predeterminado único)

Redes

AWS Lambda Funciones de Azure
Todas las funciones lambda se ejecutan de forma segura dentro de una nube privada virtual (VPC) administrada por el sistema predeterminada. También puede configurar la función Lambda para acceder a los recursos de una VPC personalizada. Las aplicaciones de funciones pueden estar protegidas por la red y pueden acceder a otros servicios dentro de la red. El acceso de red entrante solo se puede restringir a una lista de firewall de direcciones IP y a una red virtual específica a través de puntos de conexión de servicio o puntos de conexión privados. El acceso de red saliente se habilita a través de la característica de integración de red virtual. La aplicación de funciones puede tener todo su tráfico restringido a la subred de una red virtual y también puede acceder a otros servicios dentro de esa red virtual.

Observabilidad y supervisión

AWS Lambda Funciones de Azure
Amazon CloudWatch ayuda con la supervisión y observabilidad mediante la recopilación y el seguimiento de métricas, la agregación y el análisis de registros, la configuración de alarmas, la creación de paneles personalizados y la implementación de respuestas automatizadas a los cambios en el rendimiento y las métricas de los recursos. Azure Monitor proporciona una supervisión completa y observabilidad para Azure Functions, especialmente a través de su característica de Application Insights.

Application Insights recopila datos de telemetría, como las tasas de solicitud, los tiempos de respuesta y las tasas de error. Visualiza las relaciones de los componentes de la aplicación, supervisa el rendimiento en tiempo real, registra diagnósticos detallados y permite el seguimiento de métricas personalizado. Estas funcionalidades ayudan a mantener el rendimiento, la disponibilidad y la confiabilidad de Azure Functions, al tiempo que habilitan paneles personalizados, alertas y respuestas automatizadas.
AWS Lambda genera datos de telemetría a partir de las invocaciones de función y puede exportar estos datos mediante la semántica de OpenTelemetry. Puede configurar las funciones lambda para enviar estos datos de telemetría a cualquier punto de conexión compatible con OpenTelemetry. Esta acción permite la correlación de seguimientos y registros, datos de telemetría coherentes basados en estándares e integración con otras herramientas de observabilidad que admiten OpenTelemetry. Configure la aplicación de funciones para exportar datos de registro y seguimiento en un formato OpenTelemetry. Puede exportar datos de telemetría a cualquier punto de conexión compatible mediante OpenTelemetry. OpenTelemetry proporciona ventajas como la correlación de seguimientos y registros, datos de telemetría coherentes basados en estándares e integración con otros proveedores. Puede habilitar OpenTelemetry a nivel de la aplicación de funciones en la configuración del host y en su proyecto de código para mejorar la exportación de datos desde el código de función. Para más información, consulte Uso de OpenTelemetry con Azure Functions.

Escalado y simultaneidad

AWS Lambda Funciones de Azure
AWS usa un modelo de escalado a petición. Escale automáticamente la operación de función en respuesta a la demanda. La concurrencia, o el número de solicitudes administradas por una instancia, es siempre 1. Las instancias se agregan y quitan dinámicamente en función del número de eventos entrantes y de la simultaneidad configurada para cada instancia. Puede configurar la configuración de simultaneidad en el valor deseado.
La simultaneidad siempre es 1. La simultaneidad es configurable (>1).
Admite el escalado a 0. Admite el escalado a 0.

Protección de arranque en frío

AWS Lambda Funciones de Azure
La simultaneidad aprovisionada reduce la latencia y garantiza un rendimiento predecible de la función mediante la inicialización previa de un número solicitado de instancias de función. La simultaneidad aprovisionada se adapta a las aplicaciones sensibles a la latencia y tiene un precio independiente de la simultaneidad estándar. Las aplicaciones de funciones permiten configurar la simultaneidad para cada instancia, que impulsa su escala. Varios trabajos pueden ejecutarse en paralelo en la misma instancia de la aplicación, y los trabajos posteriores en la instancia no incurren en el arranque en frío inicial. Las aplicaciones de funciones también tienen instancias siempre disponibles. Los clientes pueden especificar una serie de instancias preprocesadas para eliminar la latencia de arranque en frío y garantizar un rendimiento coherente. Las aplicaciones de funciones también se escalan horizontalmente a más instancias en función de la demanda, a la vez que se mantienen las instancias siempre listas.
La simultaneidad reservada especifica el número máximo de instancias simultáneas que puede tener una función. Este límite garantiza que una parte de la cuota de simultaneidad de su cuenta se reserva exclusivamente para esa función. AWS Lambda escala dinámicamente para administrar las solicitudes entrantes incluso cuando se establece la concurrencia reservada, siempre que las solicitudes no superen el límite de simultaneidad reservada especificado. El límite inferior para la simultaneidad reservada en AWS Lambda es 1. El límite superior para la simultaneidad reservada en AWS Lambda viene determinado por la cuota de simultaneidad regional de la cuenta. De forma predeterminada, este límite es de 1000 operaciones simultáneas para cada región. Azure Functions no tiene una característica equivalente a la simultaneidad reservada. Para lograr una funcionalidad similar, aísle funciones específicas en aplicaciones de funciones independientes y establezca el límite máximo de escalado horizontal para cada aplicación. Azure Functions se escala horizontalmente de forma dinámica, o agrega más instancias, y se reduce horizontalmente, o quite instancias, dentro del límite de escalabilidad horizontal establecido. De forma predeterminada, las aplicaciones que se ejecutan en un plan de consumo flexible comienzan con un límite configurable de 100 instancias generales. El valor de recuento máximo de instancias más bajo es 40 y el valor máximo máximo admitido es 1000. Las cuotas de memoria de suscripción regional también pueden limitar la cantidad de aplicaciones de funciones que se pueden escalar horizontalmente, pero puede aumentar esta cuota llamando al soporte técnico.

Precios

AWS Lambda Funciones de Azure
- Pago por uso según el recuento total de invocaciones y los GB/s de cada instancia (con una concurrencia fija de 1)

- Incrementos de 1 ms

- Nivel gratis de 400 000 Gbps
- Pago por uso para el recuento total de invocaciones y para los GB/s de cada instancia (con invocaciones simultáneas configurables)

- Incrementos de 100 ms

- Nivel gratis de 100 000 Gbps

- Costos basados en el consumo

Almacenamiento de código fuente

AWS Lambda Funciones de Azure
AWS Lambda administra el almacenamiento del código de función en su propio sistema de almacenamiento administrado. No es necesario proporcionar más almacenamiento. Functions requiere un contenedor de Blob Storage proporcionado por el cliente para mantener el paquete de implementación que contiene el código de la aplicación. Puede configurar las opciones para usar la misma cuenta de almacenamiento o una cuenta de almacenamiento diferente para las implementaciones y administrar los métodos de autenticación para acceder al contenedor.

Desarrollo local

Característica de AWS Lambda Característica de Azure Functions
- CLI de SAM

- LocalStack
- Azure Functions Core Tools

- Visual Studio Code

- Visual Studio

- GitHub Codespaces

- VSCode.dev

- Experto

- Codificación y prueba local de Azure Functions

Despliegue

Característica AWS Lambda Funciones de Azure
Paquete de implementación - Archivo ZIP

- Imagen de contenedor
Archivo ZIP (para la implementación de imágenes de contenedor, use la SKU dedicada o premium).
Tamaño del archivo ZIP (consola) 50 MB máximo Máximo de 500 MB para la implementación de ZIP
Tamaño del archivo ZIP (CLI/SDK) 250 MB como máximo para el despliegue por ZIP, 500 MB como máximo para el archivo sin comprimir. Máximo de 500 MB para la implementación de ZIP
Tamaño de la imagen del contenedor Máximo de 10 GB Compatibilidad con contenedores con almacenamiento flexible a través de Azure
Manejo de artefactos grandes Use imágenes de contenedor para implementaciones más grandes. Adjunte recursos compartidos de Blob Storage o Azure Files para acceder a archivos grandes desde la aplicación.
Empaquetado de dependencias comunes a funciones Capas Implementación .Zip, bajo demanda desde almacenamiento o contenedores (ACA, dedicado, sólo SKU EP)
Despliegue azul-verde o versionado de funciones Use calificadores de función para hacer referencia a un estado específico de la función mediante un número de versión o un nombre de alias. Los calificadores habilitan la administración de versiones y las estrategias de implementación graduales. Use la integración continua y los sistemas de entrega continua para las implementaciones azul-verde.

Límites de tiempo de espera y memoria

Característica Límites de AWS Lambda Límites de Azure Functions
Tiempo de espera de ejecución 900 segundos (15 minutos) El tiempo de espera predeterminado es de 30 minutos. El tiempo de espera máximo no está enlazado. Sin embargo, el período de gracia proporcionado a una ejecución de función es de 60 minutos durante el escalado y 10 minutos durante las actualizaciones de la plataforma. Para obtener más información, consulte Duración del tiempo de espera de la aplicación de funciones.
Memoria configurable 128 MB a 10 240 MB, en incrementos de 64 MB Functions admite tamaños de instancia de 2 GB y 4 GB . Cada región de una suscripción determinada tiene un límite de memoria de 512 000 MB para todas las instancias de aplicaciones, lo que puede aumentar llamando al soporte técnico. El uso total de memoria de todas las instancias de todas las aplicaciones de funciones de una región debe permanecer dentro de esta cuota.

Aunque 2 GB y 4 GB son las opciones de tamaño de instancia, la simultaneidad de cada instancia puede ser superior a 1. Por lo tanto, una sola instancia puede controlar varias ejecuciones simultáneas, en función de la configuración. La configuración de la simultaneidad correctamente puede ayudar a optimizar el uso de los recursos y administrar el rendimiento. Al equilibrar la asignación de memoria y la configuración de simultaneidad, puede administrar eficazmente los recursos asignados a las aplicaciones de funciones y garantizar un rendimiento y un control de costos eficientes. Para obtener más información, consulte Cuotasde memoria de suscripción regional.

Administración de secretos

AWS Lambda Funciones de Azure
AWS Secrets Manager permite almacenar, administrar y recuperar secretos como credenciales de base de datos, claves de API y otra información confidencial. Las funciones lambda pueden recuperar secretos mediante el SDK de AWS. Se recomienda usar enfoques sin secretos, como identidades administradas, para habilitar el acceso seguro a los recursos de Azure sin codificar las credenciales. Cuando se requieren secretos, como para sistemas asociados o heredados, Azure Key Vault proporciona una solución segura para almacenar y administrar secretos, claves y certificados.
AWS Systems Manager Parameter Store es un servicio que almacena los datos de configuración y los secretos. Los parámetros se pueden cifrar mediante AWS KMS y recuperarse mediante las funciones lambda mediante el SDK de AWS.
Las funciones lambda pueden almacenar las opciones de configuración en variables de entorno. Los datos confidenciales se pueden cifrar con una clave KMS para el acceso seguro.
Azure Functions usa la configuración de la aplicación para almacenar los datos de configuración. Esta configuración se asigna directamente a las variables de entorno para facilitar el uso dentro de la función. Esta configuración se puede cifrar y almacenar de forma segura en la configuración de Azure App Service.
Para escenarios más avanzados, Azure App Configuration proporciona características sólidas para administrar varias configuraciones. Habilita las banderas de características y admite actualizaciones dinámicas en todos los servicios.

Administración de estados

AWS Lambda Funciones de Azure
AWS Lambda controla la administración de estado simple mediante servicios como Amazon S3 para el almacenamiento de objetos, DynamoDB para almacenamiento de estado NoSQL rápido y escalable, y SQS para el control de colas de mensajes. Estos servicios garantizan la persistencia y la coherencia de los datos en las ejecuciones de funciones lambda. Azure Functions usa AzureWebJobsStorage para administrar el estado habilitando enlaces y desencadenadores con servicios de Azure Storage como Blob Storage, Queue Storage y Table Storage. Permite que las funciones lean y escriban fácilmente el estado. Para una administración de estado más compleja, Durable Functions proporciona funcionalidades avanzadas de orquestación de flujo de trabajo y persistencia de estado mediante Azure Storage.

Orquestación con estado

AWS Lambda Funciones de Azure
No existe una orquestación nativa del estado. Utilice AWS Step Functions para flujos de trabajo. Durable Functions ayuda con una administración de estado compleja proporcionando orquestaciones de flujo de trabajo durables y entidades con estado. Permite operaciones de larga duración, puntos de control automáticos y persistencia de estado confiable. Estas características permiten crear flujos de trabajo complejos para garantizar la tolerancia a errores y la escalabilidad de las aplicaciones con estados.

Otras diferencias y consideraciones

Característica AWS Lambda Funciones de Azure
Funciones de agrupación Cada función de AWS Lambda es una entidad independiente. Una aplicación de funciones actúa como contenedor para varias funciones. Proporciona un contexto de ejecución compartido y una configuración para las funciones que contiene. El tratamiento de varias funciones como una sola entidad simplifica la implementación y la administración. Functions también usa una estrategia de escalado por función, donde cada función se escala de forma independiente, excepto los desencadenadores HTTP, Blob Storage y Durable Functions. Estas funciones desencadenadas se escalan en sus propios grupos.
Dominios personalizados Habilitado a través de API Gateway Puede configurar dominios personalizados directamente en una aplicación de funciones o en Azure API Management.
Compatibilidad con contenedores personalizados Admite contenedores personalizados a través de lambda Container Image Azure Functions admite contenedores personalizados que se ejecutan en un entorno de Container Apps.

Creación de un plan de migración

  1. Seleccione las cargas de trabajo clave para obtener una prueba de concepto.

    Para empezar, seleccione una a dos cargas de trabajo medianas y no críticas del inventario total. Estas cargas de trabajo sirven como base para la migración de prueba de concepto. Puede probar el proceso e identificar posibles desafíos sin arriesgarse a interrupciones importantes en las operaciones.

  2. Pruebe de forma iterativa y recopile comentarios.

    Use la prueba de concepto para recopilar comentarios, identificar brechas y ajustar el proceso antes de escalar a cargas de trabajo más grandes. Este enfoque iterativo garantiza que, en el momento en que se mueve a la migración a escala completa, se abordan los posibles desafíos y se refina el proceso.

Crear los activos de migración

Este paso es una fase de desarrollo de transición. Durante esta fase, crea código fuente, plantillas de infraestructura como código (IaC), y canalizaciones de implementación para representar la carga de trabajo en Azure. Debe adaptar el código de función para la compatibilidad y los procedimientos recomendados antes de poder realizar la migración.

Adaptar el código de función, los archivos de configuración y la infraestructura como archivos de código

Para actualizar el código de los requisitos en tiempo de ejecución de Azure Functions:

Los fragmentos de código siguientes son ejemplos de código de SDK común. El código de AWS Lambda se asigna a los desencadenadores, enlaces o fragmentos de código del SDK correspondientes en Azure Functions.

Lectura desde Amazon S3 frente a almacenamiento de blobs de Azure

Código de AWS Lambda (SDK)

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
const params = {
Bucket: 'my-bucket',
Key: 'my-object.txt',
};
const data = await
s3.getObject(params).promise();
console.log('File content:',
data.Body.toString());
};       

Código de Azure Functions (desencadenador)

import { app } from '@azure/functions';

app.storageblob('blobTrigger', { 
path: 'my-container/{blobName}',
connection: 'AzureWebJobsStorage',
}, async (context, myBlob) => { 
context.log(`Blob content:
${myBlob.toString()}`);
});

Escribir en Amazon Simple Queue Service (SQS) frente a Azure Queue Storage

Código de AWS Lambda (SDK)

const AWS = require('aws-sdk');
const sqs = new AWS.SQS(); 

exports.handler = async (event) => {
const params = {
QueueUrl:
'https://sqs.amazonaws.com/123456789012/MyQueue',
MessageBody: 'Hello, world!',
};
await
sqs.sendMessage(params).promise();
};

Código de Azure Functions (desencadenador)

import { app } from '@azure/functions';

app.queue('queueTrigger', { 
queueName: 'myqueue-items',
connection: 'AzureWebJobsStorage',
}, async (context, queueMessage) => {
context.log(`Queue message: 
${queueMessage}`);
}); 

Escritura en DynamoDB frente a Azure Cosmos DB

Código de AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const dynamoDb = new AWS.DynamoDB.DocumentClient();   

exports.handler = async (event) => { 
const params = { 
TableName: 'my-table', 
Key: { id: '123' }, 
}; 
const data = await dynamoDb.get(params).promise(); 
console.log('DynamoDB record:', data.Item); 
}; 

Código de Azure Functions (desencadenador)

import { app } from '@azure/functions';  

app.cosmosDB('cosmosTrigger', { 
connectionStringSetting: 'CosmosDBConnection', 
databaseName: 'my-database', 
containerName: 'my-container', 
leaseContainerName: 'leases', 
}, async (context, documents) => { 
documents.forEach(doc => { 
context.log(`Cosmos DB document: ${JSON.stringify(doc)}`); 
}); 
}); 

Eventos de Amazon CloudWatch frente a un desencadenador de temporizador de Azure

Código de AWS Lambda (SDK)

exports.handler = async (event) => {
console.log('Scheduled event:', event); 
}; 

Código de Azure Functions (desencadenador)

import { app } from '@azure/functions'; 

app.timer('timerTrigger', { schedule: '0 */5 * * * *', // Runs every 5 minutes }, async (context, myTimer) => { if (myTimer.isPastDue) { context.log('Timer is running late!'); } context.log(Timer function executed at: ${new Date().toISOString()}); });

Amazon Simple Notification Service (SNS) frente a un desencadenador de Azure Event Grid

Código de AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const sns = new AWS.SNS();   

exports.handler = async (event) => { 
const params = { 
Message: 'Hello, Event Grid!', 
TopicArn: 'arn:aws:sns:us-east-1:123456789012:MyTopic', 
}; 
await sns.publish(params).promise(); 
}; 

Código de Azure Functions (desencadenador)

import { app } from '@azure/functions'; 

app.eventGrid('eventGridTrigger', {}, 
async (context, eventGridEvent) => { 

context.log(`Event Grid event: 
${JSON.stringify(eventGridEvent)}`); 

}); 

Amazon Kinesis frente a un desencadenador de Azure Event Hubs

Código de AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const kinesis = new AWS.Kinesis();   

exports.handler = async (event) => { 
const records = 
event.Records.map(record => 
Buffer.from(record.kinesis.data, 
'base64').toString()); 
console.log('Kinesis records:', records); 
}; 

Código de Azure Functions (desencadenador)

import { app } from '@azure/functions'; 
app.eventHub('eventHubTrigger', {  
connection: 'EventHubConnection',  
eventHubName: 'my-event-hub',  
}, async (context, eventHubMessages) => 
{  
eventHubMessages.forEach(message => 
{  
context.log(`Event Hub message: 
${message}`);  
});  
});

Consulte los siguientes repositorios de GitHub para comparar el código de AWS Lambda y el código de Azure Functions:

Ajustar las opciones de configuración

Asegúrese de que la configuración de tiempo de espera y memoria de la función sea compatible con Azure Functions. Para más información sobre la configuración configurable, consulte host.json referencia para Azure Functions.

Siga los procedimientos recomendados para los permisos, el acceso, las redes y las configuraciones de implementación.

Configurar permisos

Siga los procedimientos recomendados al configurar permisos en las aplicaciones de funciones. Para más información, consulte Configuración de la aplicación de funciones y la cuenta de almacenamiento con identidad administrada.

main.bicep

// User-assigned managed identity that the function app uses to reach Storage and Service Bus
module processorUserAssignedIdentity './core/identity/userAssignedIdentity.bicep' = {
  name: 'processorUserAssignedIdentity'
  scope: rg
  params: {
    location: location
    tags: tags
    identityName: !empty(processorUserAssignedIdentityName) ? processorUserAssignedIdentityName : '${abbrs.managedIdentityUserAssignedIdentities}processor-${resourceToken}'
  }
}

Para obtener más información, consulte rbac.bicep.

Configurar el acceso a la red

Azure Functions admite la integración de red virtual, lo que proporciona a la aplicación de funciones acceso a los recursos de la red virtual. Después de la integración, la aplicación enruta el tráfico saliente a través de la red virtual. A continuación, la aplicación puede acceder a puntos de conexión privados o recursos mediante reglas que solo permiten el tráfico desde subredes específicas. Si el destino es una dirección IP fuera de la red virtual, la dirección IP de origen es una de las direcciones enumeradas en las propiedades de la aplicación, a menos que configure una puerta de enlace NAT.

Al habilitar la integración de red virtual para las aplicaciones de funciones, siga los procedimientos recomendados de TSG para la integración de red virtual para aplicaciones web y aplicaciones de funciones.

main.bicep

// Virtual network and private endpoint
module serviceVirtualNetwork 'app/vnet.bicep' = {
  name: 'serviceVirtualNetwork'
  scope: rg
  params: {
    location: location
    tags: tags
    vNetName: !empty(vNetName) ? vNetName : '${abbrs.networkVirtualNetworks}${resourceToken}'
  }
}  

module servicePrivateEndpoint 'app/storage-PrivateEndpoint.bicep' = {
  name: 'servicePrivateEndpoint'
  scope: rg
  params: {
    location: location
    tags: tags
    virtualNetworkName: !empty(vNetName) ? vNetName : '${abbrs.networkVirtualNetworks}${resourceToken}'
    subnetName: serviceVirtualNetwork.outputs.peSubnetName
    resourceName: storage.outputs.name
  }
}

Para más información, consulte VNet.bicep y storage-PrivateEndpoint.bicep.

Configurar los ajustes de implementación

Los despliegues siguen un único camino. Después de compilar el código del proyecto y comprimirlo en un paquete de aplicación, impleméntelo en un contenedor de Blob Storage. Cuando se inicia, la aplicación obtiene el paquete y ejecuta el código de función desde él. De forma predeterminada, la misma cuenta de almacenamiento que almacena los metadatos internos del host, como AzureWebJobsStorage, también actúa como contenedor de implementación. Sin embargo, puede usar una cuenta de almacenamiento alternativa o elegir el método de autenticación preferido configurando la configuración de implementación de la aplicación. Para obtener más información, consulte Detalles de la tecnología de implementación y Configuración de las opciones de implementación.

Generación de archivos IaC

  • Use herramientas como Bicep, plantillas de Azure Resource Manager o Terraform para crear archivos IaC para implementar recursos de Azure.

  • Defina recursos como Azure Functions, cuentas de almacenamiento y componentes de red en los archivos IaC.

  • Use este repositorio de ejemplos de IaC para ver ejemplos que usan recomendaciones y procedimientos recomendados de Azure Functions.

Uso de herramientas para la refactorización

Use herramientas como GitHub Copilot en VS Code para obtener ayuda con la refactorización de código, la refactorización manual para cambios específicos u otras ayudas de migración.

Nota:

Utiliza el modo Agente en GitHub Copilot en VS Code.

En los artículos siguientes se proporcionan ejemplos específicos y pasos detallados para facilitar el proceso de migración:

Desarrollo de un proceso paso a paso para la migración del día 0

Desarrolle estrategias de conmutación por error y conmutación por recuperación para la migración y pruébelas exhaustivamente en un entorno de preproducción. Se recomienda realizar pruebas de un extremo a otro antes de realizar la transición de AWS Lambda a Azure Functions.

  • Validación de la funcionalidad

    • Codificar y probar Azure Functions localmente.

    • Pruebe cada función exhaustivamente para asegurarse de que funciona según lo previsto. Estas pruebas deben incluir la entrada y salida, los desencadenadores de eventos y la comprobación de enlaces.

    • Use herramientas como curl o extensiones de cliente REST en VS Code para enviar solicitudes HTTP para funciones desencadenadas por HTTP.

    • Para otros desencadenadores, como temporizadores o colas, asegúrese de que los desencadenadores se activen correctamente y que las funciones se ejecuten según lo previsto.

  • Validación del rendimiento

    • Realice pruebas de rendimiento para comparar la nueva implementación de Azure Functions con la implementación anterior de AWS Lambda.

    • Supervise métricas como el tiempo de respuesta, el tiempo de ejecución y el consumo de recursos.

    • Use Application Insights para la supervisión, el análisis de registros y la solución de problemas durante la fase de prueba.

  • Solución de problemas mediante la característica diagnosticar y resolver problemas

    Use la característica diagnosticar y resolver problemas en Azure Portal para solucionar problemas de la aplicación de funciones. Esta herramienta proporciona un conjunto de características de diagnóstico que pueden ayudarle a identificar y resolver rápidamente problemas comunes, como bloqueos de aplicaciones, degradación del rendimiento y problemas de configuración. Siga los pasos y recomendaciones de solución de problemas guiados que proporciona la herramienta para solucionar problemas que identifique.

Evaluación del estado final de la carga de trabajo migrada

Antes de retirar los recursos de AWS, debe estar seguro de que la plataforma cumple las expectativas actuales de la carga de trabajo y que nada bloquea el mantenimiento de la carga de trabajo o el desarrollo posterior.

Implemente y pruebe funciones para validar su rendimiento y corrección.

Implementación en Azure

Implemente cargas de trabajo mediante la característica de publicación de VS Code . También puede implementar cargas de trabajo desde la línea de comandos mediante Azure Functions Core Tools o la CLI de Azure. Azure DevOps y Acciones de GitHub también usan One Deploy.

Exploración de escenarios de migración de ejemplo

Use el repositorio MigrationGetStarted como plantilla para comenzar la prueba de concepto. Este repositorio incluye un proyecto de Azure Functions listo para implementar que tiene los archivos de infraestructura y código fuente para ayudarle a empezar.

Si prefiere usar Terraform, use MigrationGetStarted-Terraform en su lugar.

Optimización y supervisión del rendimiento de la aplicación en Azure

Después de migrar la carga de trabajo, se recomienda explorar más características en Azure. Estas características pueden ayudarle a cumplir los requisitos futuros de la carga de trabajo y ayudar a cerrar las brechas.

Uso de Application Insights para la supervisión y la solución de problemas

Habilite Application Insights para la aplicación de funciones para recopilar datos detallados de telemetría para la supervisión y la solución de problemas. Puede habilitar Application Insights a través de Azure Portal o en el archivo de configuración host.json de la aplicación de funciones. Después de habilitar Application Insights, puede hacer lo siguiente:

  • Recopilar datos de telemetría. Application Insights proporciona varios datos de telemetría, como registros de solicitudes, métricas de rendimiento, excepciones y dependencias.

  • Analice los registros y las métricas. Acceda al panel de Application Insights desde Azure Portal para visualizar y analizar registros, métricas y otros datos de telemetría. Use las herramientas integradas para crear consultas personalizadas y visualizar datos para obtener información sobre el rendimiento y el comportamiento de la aplicación de funciones.

  • Configuración de alertas. Configure alertas en Application Insights para notificarle problemas críticos, degradación del rendimiento o eventos específicos. Estas alertas le ayudan a supervisar y responder rápidamente a los problemas.

Optimización del costo y el rendimiento

  • Escalado y optimización del rendimiento:

    • Use características de escalado automático para controlar las distintas cargas de trabajo de forma eficaz.

    • Optimice el código de función para mejorar el rendimiento al reducir el tiempo de ejecución, optimizar las dependencias y usar prácticas de codificación eficaces.

    • Implemente estrategias de almacenamiento en caché para reducir el procesamiento repetido y la latencia de los datos a los que se accede con frecuencia.

  • Administración de costos: