Partilhar via


Migrar cargas de trabalho AWS Lambda para Funções do Azure

Migrar uma carga de trabalho serverless que utiliza o AWS Lambda para o Funções do Azure requere um planeamento e uma implementação cuidadosos. Este artigo fornece orientações essenciais para ajudá-lo a:

  • Execute um processo de descoberta em sua carga de trabalho existente.
  • Saiba como executar as principais atividades de migração, como planejamento pré-migração e avaliação da carga de trabalho.
  • Avalie e otimize uma carga de trabalho migrada.

Âmbito de aplicação

Este artigo descreve a migração de uma instância AWS Lambda para o Funções do Azure.

Este artigo não aborda:

  • Migre para a sua própria solução de alojamento de contentores, como através do Azure Container Apps.
  • Hospedar contentores AWS Lambda no Azure.
  • Abordagens fundamentais de adoção do Azure pela sua organização, como zonas de aterragem do Azure ou outros tópicos abordados na metodologia de migração do Cloud Adoption Framework .

Migrar com GitHub Copilot e Azure Skills

O GitHub Copilot com Azure Skills tem suporte integrado para orientar a migração do AWS Lambda para o Funções do Azure.

Pode usar o Copilot para automatizar a maioria dos passos de migração de forma interativa, utilizando este artigo como referência para decisões de arquitetura, validação e prontidão para produção.

Para usar o Azure Skills no GitHub Copilot (no VS Code ou Copilot CLI), siga estes passos:

Pré-requisitos

Para a CLI do GitHub Copilot

  1. Instalar Copilot CLI
  2. Adicione a fonte do marketplace (apenas pela primeira vez):
    /plugin marketplace add microsoft/azure-skills
    
  3. Instale o plugin:
    /plugin install azure@azure-skills
    
  4. Após a instalação, recarregue os servidores MCP:
    /mcp reload
    
  5. Verificar instalação:
    /mcp status
    
    Deves ver o servidor MCP Azure listado e a funcionar.

Para Visual Studio Code

  1. Instale a extensão Azure MCP a partir do VS Code Marketplace (ID da extensão: ms-azuretools.vscode-azure-mcp-server).
  2. A extensão instala automaticamente uma extensão complementar, GitHub Copilot para Azure, que contém as competências do Azure.
  3. Abrir o Copilot Chat (Ctrl+Shift+I / Cmd+Shift+I).
  4. Certifica-te de que estás no modo Agente (não no modo Perguntar ou Editar).
  5. Abra a Paleta de Comandos (Ctrl+Shift+P) -> procure "MCP" -> verifique se os servidores estão listados e a funcionar.

Use este prompt para iniciar e continuar o fluxo de migração no Copilot:

Help me migrate my Lambda app to Azure Functions

Este prompt orienta a migração em fases: primeiro gerando um relatório de avaliação detalhado, depois migrando código e configuração, e finalmente construindo os ativos de infraestrutura como código (IaC) necessários para implementação no Azure.

Comparar funcionalidade

Este artigo mapeia as funcionalidades do AWS Lambda para equivalentes ao Funções do Azure para ajudar a garantir a compatibilidade.

Importante

Pode optar por incluir a otimização no seu plano de migração, mas a Microsoft recomenda um processo em duas etapas. Migre primeiro as funcionalidades "de igual para igual" e depois avalie as oportunidades de otimização no Azure.

Os esforços de otimização devem ser contínuos e executados através dos processos de controle de alterações da sua equipe de carga de trabalho. Uma migração que adiciona mais recursos durante uma migração incorre em risco e estende desnecessariamente o processo.

Perspetiva da carga de trabalho

Este artigo foca-se em como migrar uma carga de trabalho AWS Lambda para Funções do Azure e nas dependências comuns para cargas de trabalho serverless. Esse processo pode envolver vários serviços porque as cargas de trabalho compreendem muitos recursos e processos para gerenciar esses recursos. Para ter uma estratégia abrangente, você deve combinar as recomendações apresentadas neste artigo com um plano maior que inclua os outros componentes e processos em sua carga de trabalho.

Executar um processo de descoberta em sua carga de trabalho existente

A primeira etapa é conduzir um processo de descoberta detalhado para avaliar sua carga de trabalho existente do AWS Lambda. O objetivo é entender em quais recursos e serviços da AWS sua carga de trabalho depende. Compile um inventário abrangente de suas funções do AWS Lambda usando ferramentas da AWS, como SDKs específicos de serviço, APIs, CloudTrail e AWS CLI para avaliar a carga de trabalho na AWS. Você deve entender os seguintes aspectos-chave do seu inventário do AWS Lambda:

  • Casos de uso
  • Configurações
  • Configurações de segurança e rede
  • Ferramentas, monitorização, registo e mecanismos de observabilidade
  • Dependências
  • Objetivos de fiabilidade e estado de fiabilidade atual
  • Custo de propriedade
  • Metas de desempenho e desempenho atual

Executar o planeamento de pré-migração

Antes de começar a migrar a sua carga de trabalho, deve mapear as funcionalidades AWS Lambda para o Funções do Azure para garantir a compatibilidade e desenvolver um plano de migração. Em seguida, você pode selecionar as principais cargas de trabalho para uma prova de conceito.

Também precisas de mapear os serviços AWS de que o Lambda depende para as dependências equivalentes em Azure.

Mapear funcionalidades do AWS Lambda para o Funções do Azure

As tabelas seguintes comparam conceitos, recursos e propriedades AWS Lambda com os seus equivalentes correspondentes no Funções do Azure, especificamente, o plano de alojamento Flex Consumption.

Idiomas suportados

Linguagem de programação Versões compatíveis com o AWS Lambda Funções do Azure versões suportadas
Node.js 20, 22 20, 22
Python 3.9, 3.10, 3.11, 3.12, 3.13 3.9, 3.10, 3.11, 3.12, 3.13
Java 8, 11, 17, 21 8, 11, 17, 21
PowerShell Não suportado 7.4
.NET .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Ruby 3.2, 3.3 Manipuladores personalizados
Go Tempo de execução somente do sistema operacional Manipuladores personalizados
Ferrugem Tempo de execução somente do sistema operacional Manipuladores personalizados

Modelo de programação

Característica AWS Lambda Funções do Azure
Acionadores Integra-se com outros serviços da AWS via fontes de eventos. Fornece maneiras automáticas e programáticas de vincular funções do Lambda a fontes de eventos. Aciona uma função com base em eventos específicos, como atualizações em um banco de dados ou uma nova mensagem em uma fila. Por exemplo, um gatilho do Azure Cosmos DB permite que as funções respondam automaticamente a inserções e atualizações num contentor do Azure Cosmos DB. Esta ação permite o processamento em tempo real das alterações de dados.

O Functions também se integra com o Azure Event Grid, permitindo processar eventos de serviços do Azure, como Armazenamento do Azure e Serviços de Multimédia do Azure, e fontes de eventos externas. O Event Grid serve como um serviço de roteamento de eventos centralizado e extensível que complementa os gatilhos do Functions, permitindo alta escalabilidade e ampla cobertura de fontes de eventos.
Vínculos Não tem vinculações. Usa SDKs da AWS em funções do Lambda para gerenciar manualmente interações com outros serviços da AWS. As associações, configuradas como entrada ou saída, permitem conexões declarativas com serviços, o que minimiza a necessidade de código SDK explícito. Por exemplo, pode configurar bindings para ler a partir do Armazenamento de Blobs, escrever no Azure Cosmos DB ou enviar emails via SendGrid sem gerir manualmente as integrações.

Gatilhos e vinculações de eventos

Gatilho ou serviço do AWS Lambda Funções do Azure trigger Descrição
API Gateway: solicitações HTTP Acionador HTTP Esses gatilhos permitem que você manipule solicitações HTTP diretamente.
Serviço de fila simples (SQS) Armazenamento de Filas do Azure trigger ou Azure Service Bus trigger Esses gatilhos podem processar mensagens em filas.
Serviço de Notificação Simples (SNS) Event Grid trigger ou Service Bus trigger Esses gatilhos permitem o processamento de notificações.
Kinesis (fluxos de dados) gatilho do Event Hubs Esses gatilhos consomem fluxos de dados.
DynamoDB (alterações de tabela) Gatilho de mudança de feed do Azure Cosmos DB Esses gatilhos escutam as alterações nas tabelas.
CloudWatch Events ou EventBridge Scheduler Gatilho do temporizador Esses gatilhos lidam com funções agendadas ou baseadas em tempo.
S3 (eventos de objetos) Armazenamento de Blobs trigger Esses gatilhos reagem a eventos do armazenamento de blobs.
Serviço da Base de Dados Relacional da Amazon (RDS) SQL do Azure trigger Esses gatilhos reagem a alterações no banco de dados.
Streaming gerenciado para Apache Kafka (MSK) Apache Kafka disparador Esses gatilhos reagem às mensagens do tópico Kafka.
Amazon ElastiCache Azure Redis trigger Esses gatilhos reagem a mensagens no Redis.
Amazon MQ Disparador RabbitMQ Esses gatilhos reagem a mensagens no RabbitMQ.

Permissões

AWS Lambda Funções do Azure
A função de execução do Lambda concede permissões às funções do Lambda para interagir com outros serviços da AWS. Cada função do Lambda tem uma função de gerenciamento de identidade e acesso (IAM) associada que determina suas permissões enquanto é executada. As identidades geridas fornecem uma identidade para a sua aplicação de funções que lhe permite autenticar-se com outros serviços do Azure sem armazenar credenciais no código. O controlo de acesso baseado em funções atribui as funções apropriadas à identidade gerida do Microsoft Entra ID para conceder acesso aos recursos que necessita.
Declarações de política baseadas em recursos:

- AWSLambda_FullAccess dá acesso total a todas as operações do Lambda, incluindo a criação, atualização e exclusão de funções.

- AWSLambda_ReadOnlyAccess dá acesso somente leitura para visualizar as funções do Lambda e suas configurações.

- Políticas personalizadas do IAM.
Funções integradas baseadas em recursos

- A função Proprietário dá acesso total, incluindo gerenciamento de permissões de acesso.

- A função de Colaborador pode criar e excluir aplicativos de função, definir configurações e implantar código. Não pode gerir o acesso.

- A função Leitor de monitoramento pode conceder acesso somente leitura a dados e configurações de monitoramento. Ele também pode alocar funções personalizadas.

URL da função

AWS Lambda Funções do Azure
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (original, nome de host padrão global)

- <appname>-<randomhash>.<Region>.azurewebsites.net (novo, exclusivo nome de host padrão)

Rede

AWS Lambda Funções do Azure
Todas as funções do Lambda são executadas com segurança dentro de uma nuvem virtual privada (VPC) gerenciada pelo sistema. Você também pode configurar sua função do Lambda para acessar recursos em uma VPC personalizada. Os aplicativos de função podem ser protegidos pela rede e podem acessar outros serviços dentro da rede. O acesso à rede de entrada pode ser restrito apenas a uma lista de firewall de endereços IP e a uma rede virtual específica por meio de pontos de extremidade de serviço ou pontos de extremidade privados. O acesso à rede de saída é habilitado por meio do recurso de integração de rede virtual. O aplicativo de função pode ter todo o seu tráfego restrito à sub-rede de uma rede virtual e também pode acessar outros serviços dentro dessa rede virtual.

Observabilidade e monitorização

AWS Lambda Funções do Azure
O Amazon CloudWatch ajuda no monitoramento e na observabilidade coletando e rastreando métricas, agregando e analisando logs, definindo alarmes, criando painéis personalizados e implementando respostas automatizadas a alterações no desempenho e nas métricas de recursos. O Azure Monitor oferece monitorização abrangente e observabilidade para o Funções do Azure, especialmente através da sua funcionalidade Application Insights.

O Application Insights coleta dados de telemetria, como taxas de solicitação, tempos de resposta e taxas de falha. Ele visualiza relacionamentos de componentes de aplicativos, monitora o desempenho em tempo real, registra diagnósticos detalhados e permite o rastreamento de métricas personalizadas. Estas capacidades ajudam a manter o desempenho, disponibilidade e fiabilidade do Funções do Azure, ao mesmo tempo que permitem dashboards personalizados, alertas e respostas automáticas.
O AWS Lambda gera dados de telemetria a partir de suas invocações de função e pode exportar esses dados usando a semântica OpenTelemetria. Você pode configurar as suas funções Lambda para enviar estas informações de telemetria para qualquer ponto de extremidade compatível com OpenTelemetry. Essa ação permite a correlação de rastreamentos e logs, dados de telemetria consistentes baseados em padrões e integração com outras ferramentas de observabilidade que suportam OpenTelemetry. Configure seu aplicativo de funções para exportar dados de log e rastreamento em um formato OpenTelemetry . Você pode exportar dados de telemetria para qualquer ponto de extremidade compatível usando OpenTelemetry. O OpenTelemetry fornece benefícios como correlação de rastreamentos e logs, dados de telemetria consistentes baseados em padrões e integração com outros provedores. Você pode habilitar o OpenTelemetry no nível do aplicativo de função na configuração do host e em seu projeto de código para otimizar a exportação de dados do seu código de função. Para mais informações, consulte Use OpenTelemetry com Funções do Azure.

Dimensionamento e simultaneidade

AWS Lambda Funções do Azure
A AWS usa um modelo de escalabilidade sob demanda. Dimensione automaticamente a operação da sua função em resposta à demanda. A simultaneidade, ou o número de solicitações tratadas por uma instância, é sempre 1. As instâncias são adicionadas e removidas dinamicamente com base no número de eventos de entrada e na simultaneidade configurada para cada instância. Você pode definir a definição de concorrência para o valor desejado.
A concorrência é sempre 1. A concorrência é configurável (>1).
Suporta escalonamento até 0. Suporta escalonamento até 0.

Proteção contra arranque a frio

AWS Lambda Funções do Azure
A simultaneidade provisionada reduz a latência e garante o desempenho previsível da função pré-inicializando um número solicitado de instâncias de função. A simultaneidade provisionada adequa-se a aplicativos sensíveis à latência e tem um preço separado da simultaneidade padrão. Os aplicativos de função permitem que você configure a simultaneidade para cada instância, o que impulsiona sua escala. Vários trabalhos podem ser executados em paralelo na mesma instância da aplicação, e os trabalhos subsequentes não sofrem o tempo inicial de arranque a frio. Os aplicativos de função também têm instâncias sempre prontas . Os clientes podem especificar várias instâncias pré-aquecidas para eliminar a latência de arranque a frio e garantir um desempenho consistente. As aplicações de funções também escalam para mais instâncias com base na procura, mantendo as instâncias sempre disponíveis.
A simultaneidade reservada especifica o número máximo de instâncias simultâneas que uma função pode ter. Esse limite garante que uma parte da cota de simultaneidade da sua conta seja reservada exclusivamente para essa função. O AWS Lambda é dimensionado dinamicamente para lidar com solicitações de entrada mesmo quando a simultaneidade reservada é definida, desde que as solicitações não excedam o limite de simultaneidade reservado especificado. O limite inferior para simultaneidade reservada no AWS Lambda é 1. O limite superior para simultaneidade reservada no AWS Lambda é determinado pela cota de simultaneidade regional da conta. Por padrão, esse limite é de 1.000 operações simultâneas para cada região. O Funções do Azure não tem uma funcionalidade equivalente à concorrência reservada. Para obter uma funcionalidade semelhante, isole funções específicas em aplicativos de função separados e defina o limite máximo de expansão para cada aplicativo. O Funções do Azure escala dinamicamente, ou adiciona mais instâncias, e escala ou remove instâncias dentro do conjunto de limites de escalonamento. Por padrão, os aplicativos executados em um plano Flex Consumption começam com um limite configurável de 100 instâncias gerais. O valor máximo mínimo de contagem de instâncias é 1, e o valor máximo máximo suportado é 1.000. As cotas de memória de assinatura regional também podem limitar a quantidade de funções que os aplicativos podem expandir, mas você pode aumentar essa cota chamando o suporte.

Preços

AWS Lambda Funções do Azure
- Pagamento por uso para a contagem total de invocações e para o GB/s para cada instância (com uma simultaneidade fixa de 1)

- Incrementos de 1 ms

- Nível livre de 400.000 Gbps
- Pagamentos baseados no uso para o total de invocações e para os gigabytes por segundo (GB/s) de cada instância (com configurações de invocações simultâneas)

- Incrementos de 100 ms

- Nível livre de 100.000 Gbps

- Custos baseados no consumo

Armazenamento de código-fonte

AWS Lambda Funções do Azure
O AWS Lambda gerencia o armazenamento do código da sua função em seu próprio sistema de armazenamento gerenciado. Você não precisa fornecer mais armazenamento. O Functions requer um contentor Armazenamento de Blobs fornecido pelo cliente para manter o pacote de implementação que contém o código da sua aplicação. Você pode definir as configurações para usar a mesma conta de armazenamento ou uma conta de armazenamento diferente para implantações e gerenciar métodos de autenticação para acessar o contêiner.

Desenvolvimento local

Funcionalidade do AWS Lambda Funcionalidade Funções do Azure
- SAM CLI

- LocalStack
- Funções do Azure Core Tools

- Visual Studio Code

- Visual Studio

- GitHub Codespaces

- VSCode.dev

- Maven

- Code e teste Funções do Azure localmente

Implantação

Característica AWS Lambda Funções do Azure
Pacote de implantação - Arquivo ZIP

- Imagem de container
Arquivo ZIP (Para implementação de imagem de contentor, use o SKU dedicado ou premium.)
Tamanho do ficheiro ZIP (consola) 50 MB no máximo 500 MB no máximo para implantação ZIP
Tamanho do ficheiro ZIP (CLI/SDD) 250 MB no máximo para implantação ZIP, 500 MB no máximo para ficheiro descompactado 500 MB no máximo para implantação ZIP
Tamanho da imagem do contêiner Máximo de 10 GB Suporte a contentores com armazenamento flexível via Azure
Manuseamento de grandes artefactos Use imagens de contêiner para implantações maiores. Anexar as partilhas Armazenamento de Blobs ou Ficheiros do Azure para aceder a ficheiros grandes através da aplicação.
Agrupamento de dependências comuns em funções Camadas Implantação . Zip, sob demanda do armazenamento, ou contêineres (ACA, dedicado, apenas SKUs EP)
Implantação azul-verde ou versionamento de funções Use qualificadores de função para fazer referência a um estado específico da sua função usando um número de versão ou um nome de alias. Os qualificadores permitem o gerenciamento de versões e estratégias de implantação gradual. Use sistemas de integração contínua e entrega contínua para implantações azul-verde.

Tempo limite e limites de memória

Característica Limites do AWS Lambda Limites do Funções do Azure
Tempo limite de execução 900 segundos (15 minutos) O tempo limite padrão é de 30 minutos. O tempo limite máximo é ilimitado. No entanto, o período de carência dado à execução de uma função é de 60 minutos durante o scale-in e 10 minutos durante as atualizações da plataforma. Para obter mais informações, consulte Duração do tempo limite da aplicação funcional.
Memória configurável 128 MB a 10.240 MB, em incrementos de 64 MB O Functions suporta tamanhos de instância de 2 GB e 4 GB . Cada região de uma determinada subscrição tem um limite de memória de 512.000 MB para todas as instâncias de aplicações, que pode aumentar ligando para o suporte. O uso total de memória de todas as instâncias em todas as aplicações de funções numa região deve permanecer dentro deste limite de cota.

Embora 2 GB e 4 GB sejam as opções de tamanho de instância, a simultaneidade para cada instância pode ser maior que 1. Portanto, uma única instância pode lidar com várias execuções simultâneas, dependendo da configuração. Configurar a simultaneidade adequadamente pode ajudar a otimizar o uso de recursos e gerenciar o desempenho. Ao equilibrar a alocação de memória e as configurações de simultaneidade, você pode gerenciar efetivamente os recursos alocados para seus aplicativos de função e garantir um desempenho eficiente e controle de custos. Para obter mais informações, consulte Cotas de memória de assinatura regional.

Gestão de segredos

AWS Lambda Funções do Azure
O AWS Secrets Manager permite armazenar, gerenciar e recuperar segredos, como credenciais de banco de dados, chaves de API e outras informações confidenciais. As funções do Lambda podem recuperar segredos usando o AWS SDK. Recomendamos que utilize abordagens sem segredos, como identidades geridas, para permitir o acesso seguro aos recursos do Azure sem necessidade de codificar credenciais. Quando são necessários segredos, como para sistemas parceiros ou legados, o Azure Key Vault fornece uma solução segura para armazenar e gerir segredos, chaves e certificados.
Parameter Store do AWS Systems Manager é um serviço que guarda dados de configuração e segredos. Os parâmetros podem ser criptografados usando o AWS KMS e recuperados por funções do Lambda usando o AWS SDK.
As funções do Lambda podem armazenar definições de configuração em variáveis de ambiente. Os dados confidenciais podem ser criptografados com uma chave KMS para acesso seguro.
O Funções do Azure utiliza as definições da aplicação para armazenar dados de configuração. Essas configurações são mapeadas diretamente para variáveis de ambiente para facilitar o uso dentro da função. Estas definições podem ser encriptadas e armazenadas de forma segura na configuração do Serviço de Aplicações do Azure.
Para cenários mais avançados, o Azure App Configuration oferece funcionalidades robustas para gerir múltiplas configurações. Ele permite a sinalização de recursos e suporta atualizações dinâmicas entre serviços.

Gestão do Estado

AWS Lambda Funções do Azure
O AWS Lambda trata de uma gestão simples de estados utilizando serviços como o Amazon S3 para armazenamento de objetos, o DynamoDB para armazenamento rápido e escalável de estados em NoSQL, e o SQS para o tratamento de filas de mensagens. Esses serviços garantem a persistência e a consistência dos dados nas execuções de funções do Lambda. Funções do Azure utiliza AzureWebJobsStorage para gerir o estado, ativando ligações e gatilhos com serviços de Armazenamento do Azure como Armazenamento de Blobs, Armazenamento em Fila e Armazenamento de Tabelas. Ele permite funções para ler e gravar facilmente o estado. Para uma gestão de estados mais complexa, o Durable Functions oferece capacidades avançadas de orquestração de fluxos de trabalho e persistência de estados utilizando o Armazenamento do Azure.

Orquestração com estado

AWS Lambda Funções do Azure
Não há orquestração nativa de estados. Use o AWS Step Functions para fluxos de trabalho. Durable Functions ajuda na gestão complexa de estados, fornecendo a orquestração de fluxos de trabalho persistentes e entidades com estado. Ele permite operações de longa duração, pontos de verificação automáticos e persistência de estado confiável. Esses recursos permitem a criação de fluxos de trabalho complexos para garantir tolerância a falhas e escalabilidade para aplicativos com monitoração de estado.

Outras diferenças e considerações

Característica AWS Lambda Funções do Azure
Funções de agrupamento Cada função do AWS Lambda é uma entidade independente. Um aplicativo de função serve como um contêiner para várias funções. Ele fornece um contexto de execução compartilhado e configuração para as funções que ele contém. Tratar várias funções como uma única entidade simplifica a implantação e o gerenciamento. O Functions também utiliza uma estratégia de escalonamento por função, onde cada função é escalada de forma independente, exceto para os gatilhos HTTP, Armazenamento de Blobs e Durable Functions. Essas funções desencadeadas são dimensionadas em seus próprios grupos.
Domínios personalizados Ativado via API Gateway Pode configurar domínios personalizados diretamente numa aplicação de funções ou no API Management do Azure.
Suporte de contêiner personalizado Suporta contêineres personalizados por meio do Lambda Container Image Funções do Azure suporta containers personalizados que correm num ambiente Container Apps.

Criar um plano de migração

  1. Selecione as principais cargas de trabalho para uma prova de conceito.

    Comece selecionando uma a duas cargas de trabalho não críticas de médio porte do seu inventário total. Essas cargas de trabalho servem como base para a sua migração de prova de conceito. Você pode testar o processo e identificar possíveis desafios sem correr o risco de grandes interrupções em suas operações.

  2. Teste iterativamente e recolha feedback.

    Use a prova de conceito para coletar feedback, identificar lacunas e ajustar o processo antes de dimensionar para cargas de trabalho maiores. Essa abordagem iterativa garante que, no momento em que você passar para a migração em grande escala, você abordará os desafios potenciais e refinará o processo.

Criar os recursos de migração

Esta etapa é uma fase transitória de desenvolvimento. Durante esta fase, constróis o código-fonte, templates de infraestrutura como código (IaC) e pipelines de implementação para representar a carga de trabalho no Azure. Você deve adaptar o código de função para compatibilidade e práticas recomendadas antes de executar a migração.

Adapte o código de função, os arquivos de configuração e a infraestrutura como arquivos de código

Para atualizar código para os requisitos de runtime do Funções do Azure:

  • Modifica o teu código para aderir ao modelo de programação do Funções do Azure. Por exemplo, adapta as assinaturas das tuas funções para corresponder ao formato que o Funções do Azure exige. Para mais informações sobre definição de funções e contexto de execução, consulte Funções do Azure developers guides.

  • Use o pacote de extensões Funções do Azure para gerir vários bindings e triggers semelhantes aos serviços da AWS. Para aplicações .NET, deve usar os pacotes NuGet apropriados em vez do pacote de extensões.

  • Use o pacote de extensões para integrar com outros serviços do Azure, como Armazenamento do Azure, Azure Service Bus e Azure Cosmos DB, sem necessidade de configurar manualmente cada binding através de SDKs. Para mais informações, consulte Ligar funções a serviços do Azure usando ligações e padrões de expressão de ligação das funções do Azure.

Esses trechos são exemplos de código SDK comum. O código AWS Lambda mapeia para os gatilhos, associações ou excertos de código SDK correspondentes no serviço do Funções do Azure.

Leitura da Amazon S3 versus Armazenamento de Blobs do Azure

Código do 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 Funções do Azure (gatilho)

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

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

Escrita para o Amazon Simple Queue Service (SQS) versus Armazenamento de Filas do Azure

Código do 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 do Funções do Azure (gatilho)

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

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

Escrever em DynamoDB versus Azure Cosmos DB

Código do 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 Funções do Azure (gatilho)

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)}`); 
}); 
}); 

Amazon CloudWatch Events versus um disparador de temporizador da Azure

Código do AWS Lambda (SDK)

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

Código do Funções do Azure (desencadeador)

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) vs. um gatilho do Azure Event Grid

Código do 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 do Funções do Azure (gatilho)

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

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

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

}); 

Amazon Kinesis vs. Hubs de Eventos do Azure com disparador

Código do 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 das Funções Azure (gatilho)

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 os seguintes repositórios do GitHub para comparar o código AWS Lambda e o código do Funções do Azure:

Ajustar definições de configuração

Certifique-se de que as definições de time-out e memória da sua função são compatíveis com Funções do Azure. Para mais informações sobre definições configuráveis, consulte host.json referência para Funções do Azure.

Siga as práticas recomendadas para permissões, acesso, rede e configurações de implantação.

Configurar permissões

Siga as práticas recomendadas ao configurar permissões em seus aplicativos de função. Para obter mais informações, consulte Configurar seu aplicativo de função e conta de armazenamento com identidade gerenciada.

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 mais informações, consulte rbac.bicep.

Configurar o acesso à rede

Funções do Azure suporta integração de rede virtual, que dá à sua aplicação de funções acesso a recursos na sua rede virtual. Após a integração, seu aplicativo roteia o tráfego de saída através da rede virtual. Em seguida, seu aplicativo pode acessar pontos de extremidade ou recursos privados usando regras que permitem apenas o tráfego de sub-redes específicas. Se o destino for um endereço IP fora da rede virtual, o endereço IP de origem será um dos endereços listados nas propriedades do seu aplicativo, a menos que você configure um gateway NAT.

Ao habilitar a integração de rede virtual para seus aplicativos funcionais, siga as práticas recomendadas no TSG para integração de rede virtual para aplicativos Web e aplicativos de função.

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 mais informações, consulte VNet.bicep e storage-PrivateEndpoint.bicep.

Definir configurações de implantação

As implantações seguem um único caminho. Depois de compilar o código do seu projeto e o compactar num pacote de aplicação, implemente-o num contentor Armazenamento de Blobs. Quando ele é iniciado, seu aplicativo recebe o pacote e executa seu código de função a partir dele. Por padrão, a mesma conta de armazenamento que armazena metadados internos do host, como AzureWebJobsStorage, também serve como contêiner de implantação. No entanto, você pode usar uma conta de armazenamento alternativa ou escolher seu método de autenticação preferido definindo as configurações de implantação do seu aplicativo. Para obter mais informações, consulte Detalhes da tecnologia de implantação e Definir configurações de implantação.

Gerar arquivos IaC

  • Use ferramentas como Bicep, templates do Azure Resource Manager ou Terraform para criar ficheiros IaC que implementem recursos do Azure.

  • Defina recursos como Funções do Azure, contas de armazenamento e componentes de rede nos seus ficheiros IaC.

  • Use este repositório de exemplos IaC para amostras que utilizam as recomendações e melhores práticas das Funções do Azure.

Utilizar ferramentas para refatorar código

Use ferramentas como o GitHub Copilot no VS Code para ajudar com refatoração de código, refatoração manual para alterações específicas ou outros auxílios de migração.

Os artigos a seguir fornecem exemplos específicos e etapas detalhadas para facilitar o processo de migração:

Desenvolver um processo passo a passo para a migração do primeiro dia (Dia 0)

Desenvolva estratégias de failover e failback para a sua migração e teste-as exaustivamente num ambiente de pré-produção. Recomendamos que realize testes de ponta a ponta antes de finalmente fazer a transição do AWS Lambda para o Funções do Azure.

  • Validar funcionalidade

    • Code e teste Funções do Azure localmente.

    • Teste cada função cuidadosamente para garantir que ela funcione conforme o esperado. Esses testes devem incluir entrada/saída, gatilhos de eventos e verificação de ligações.

    • Use ferramentas como curl ou extensões de cliente REST no VS Code para enviar solicitações HTTP para funções acionadas por HTTP.

    • Para outros gatilhos, como temporizadores ou filas, certifique-se de que os gatilhos sejam acionados corretamente e que as funções sejam executadas conforme o esperado.

  • Validar o desempenho

    • Realize testes de desempenho para comparar a nova implementação do Funções do Azure com a implementação anterior do AWS Lambda.

    • Monitore métricas como tempo de resposta, tempo de execução e consumo de recursos.

    • Use o Application Insights para monitoramento, análise de log e solução de problemas durante a fase de teste.

  • Solucionar problemas usando o recurso diagnosticar e resolver problemas

    Use a funcionalidade diagnosticar e resolver problemas no portal Azure para diagnosticar a sua aplicação de funções. Essa ferramenta fornece um conjunto de recursos de diagnóstico que podem ajudá-lo a identificar e resolver rapidamente problemas comuns, como falhas de aplicativos, degradação de desempenho e problemas de configuração. Siga as etapas de solução de problemas guiadas e as recomendações que a ferramenta fornece para resolver os problemas identificados.

Avaliar o estado final da carga de trabalho migrada

Antes de desativar recursos na AWS, você precisa ter certeza de que a plataforma atende às expectativas atuais de carga de trabalho e que nada bloqueia a manutenção ou o desenvolvimento adicional da carga de trabalho.

Implante e teste funções para validar seu desempenho e correção.

Implementar no Azure

Implante cargas de trabalho usando o recurso de publicação do VS Code . Também pode implementar cargas de trabalho a partir da linha de comandos usando Funções do Azure Core Tools ou o CLI do Azure. Azure DevOps e GitHub Actions também usam o One Deploy.

  • Funções do Azure Core Tools: Implemente a sua aplicação de funções usando Funções do Azure Core Tools com o comando func azure functionapp publish <FunctionAppName>.

  • Pipelines de integração contínua e implementação contínua (CI/CD): Configure um pipeline CI/CD utilizando serviços como GitHub Actions, Azure DevOps ou outra ferramenta CI/CD.

Para mais informações, consulte Entrega contínua usando GitHub Actions ou Entrega contínua com Azure Pipelines.

Explore exemplos de cenários de migração

Use o repositório MigrationGetStarted como um modelo para iniciar sua prova de conceito. Este repositório inclui um projeto Funções do Azure pronto a implementar que tem a infraestrutura e os ficheiros de código-fonte para o ajudar a começar.

Se preferir usar o Terraform, use MigrationGetStarted-Terraform.

Otimize e monitorize o desempenho da aplicação no Azure

Depois de migrar a sua carga de trabalho, recomendamos que explore mais funcionalidades no Azure. Esses recursos podem ajudá-lo a atender aos requisitos futuros de carga de trabalho e ajudar a fechar lacunas.

Usar o Application Insights para monitoramento e solução de problemas

Habilite o Application Insights para seu aplicativo de função para coletar dados de telemetria detalhados para monitoramento e solução de problemas. Pode ativar o Application Insights através do portal Azure ou no ficheiro de configuração host.json da aplicação de funções. Depois de habilitar o Application Insights, você pode:

  • Coletar dados de telemetria. O Application Insights fornece vários dados de telemetria, como logs de solicitação, métricas de desempenho, exceções e dependências.

  • Analise logs e métricas. Aceda ao painel Application Insights a partir do portal Azure para visualizar e analisar logs, métricas e outros dados de telemetria. Use as ferramentas internas para criar consultas personalizadas e visualizar dados para obter informações sobre o desempenho e o comportamento do seu aplicativo funcional.

  • Configure alertas. Configure alertas no Application Insights para notificá-lo de problemas críticos, degradação de desempenho ou eventos específicos. Estes alertas ajudam-no a monitorizar proativamente e a responder rapidamente a problemas.

Otimize o custo e o desempenho

  • Dimensionamento e otimização de desempenho:

    • Use os recursos de dimensionamento automático para lidar com cargas de trabalho variáveis de forma eficiente.

    • Otimize o código de função para melhorar o desempenho reduzindo o tempo de execução, otimizando dependências e usando práticas de codificação eficientes.

    • Implemente estratégias de cache para reduzir o processamento repetido e a latência para dados acessados com frequência.

  • Gestão de custos:

    • Use as ferramentas Microsoft Cost Management para monitorizar e analisar os seus custos com Funções do Azure.

    • Configure alertas de orçamento e custos para gerenciar e prever despesas de forma eficaz.