Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La migrazione di un carico di lavoro serverless che utilizza Amazon Web Services (AWS) Lambda verso le Funzioni di Azure richiede una pianificazione ed un'implementazione attente. Questo articolo fornisce indicazioni essenziali che consentono di:
- Eseguire un processo di individuazione del carico di lavoro esistente.
- Impara come svolgere attività essenziali di migrazione, come la pianificazione della pre-migrazione e la valutazione del carico di lavoro.
- Valutare e ottimizzare un carico di lavoro migrato.
Ambito
Questo articolo descrive la migrazione di un'istanza lambda di AWS a Funzioni di Azure.
Questo articolo non si rivolge a:
- Migrazione alla propria soluzione di hosting dei contenitori, ad esempio tramite App Contenitore di Azure.
- Hosting di contenitori lambda AWS in Azure.
- Approcci fondamentali all'adozione di Azure da parte dell'organizzazione, ad esempio zone di destinazione di Azure o altri argomenti trattati nella metodologia di migrazione di Cloud Adoption Framework.
Confrontare la funzionalità
Questo articolo associa le funzionalità lambda di AWS agli equivalenti di Funzioni di Azure per garantire la compatibilità.
Importante
È possibile scegliere di includere l'ottimizzazione nel piano di migrazione, ma Microsoft consiglia un processo in due passaggi. Eseguire prima la migrazione delle funzionalità simili a simili e quindi valutare le opportunità di ottimizzazione in Azure.
Le attività di ottimizzazione devono essere continue ed eseguite attraverso i processi di controllo delle modifiche del team del carico di lavoro. Una migrazione che aggiunge altre funzionalità durante una migrazione comporta rischi e estende inutilmente il processo.
Prospettiva del carico di lavoro
Questo articolo è incentrato su come eseguire la migrazione di un carico di lavoro lambda AWS a Funzioni di Azure e sulle dipendenze comuni per i carichi di lavoro serverless. Questo processo potrebbe comportare diversi servizi perché i carichi di lavoro comprendono molte risorse e processi per gestire tali risorse. Per avere una strategia completa, è necessario combinare le raccomandazioni presentate in questo articolo con un piano più ampio che include gli altri componenti e processi nel carico di lavoro.
Eseguire un processo di individuazione del carico di lavoro esistente
Il primo passaggio consiste nell'eseguire un processo di individuazione dettagliato per valutare il carico di lavoro AWS Lambda esistente. L'obiettivo è comprendere le funzionalità e i servizi aws su cui si basa il carico di lavoro. Compilare un inventario completo delle funzioni lambda di AWS usando strumenti aws come SDK specifici del servizio, API, CloudTrail e interfaccia della riga di comando di AWS per valutare il carico di lavoro in AWS. È necessario comprendere gli aspetti chiave seguenti dell'inventario LAMBDA di AWS:
- Casi d'uso
- Configurazioni
- Configurazioni di sicurezza e rete
- Strumenti, monitoraggio, registrazione e meccanismi di osservabilità
- Dipendenze
- Obiettivi di affidabilità e stato di affidabilità corrente
- Costo di proprietà
- Obiettivi di prestazioni e prestazioni correnti
Eseguire la pianificazione della premigrazione
Prima di iniziare la migrazione del carico di lavoro, è necessario eseguire il mapping delle funzionalità lambda di AWS a Funzioni di Azure per garantire la compatibilità e sviluppare un piano di migrazione. È quindi possibile selezionare i carichi di lavoro chiave per un modello di verifica.
È anche necessario eseguire il mapping dei servizi AWS da cui Lambda dipende dalle dipendenze equivalenti in Azure.
Mappare le funzionalità Lambda di AWS su Funzioni di Azure
Le tabelle seguenti confrontano concetti, risorse e proprietà lambda di AWS con gli equivalenti corrispondenti in Funzioni di Azure, in particolare il piano di hosting Flex Consumption.
- Lingue supportate
- Modello di programmazione
- Trigger e associazioni di eventi
- Autorizzazioni
- URL funzione
- Networking
- Osservabilità e monitoraggio
- Ridimensionamento e concorrenza
- Protezione di avvio a freddo
- Prezzi
- Archiviazione del codice sorgente
- Sviluppo in locale
- Distribuzione
- Limiti di timeout e memoria
- Gestione dei segreti
- Gestione dello stato
- Orchestrazione con stato
- Altre differenze e considerazioni
Lingue disponibili
Linguaggio di programmazione | Versioni supportate di AWS Lambda | Versioni supportate di Funzioni di Azure |
---|---|---|
Node.js | 20, 22 | 20, 22 |
Pitone | 3.9, 3.10, 3.11, 3.12, 3.13 | 3.9, 3.10, 3.11 |
Giava | 8, 11, 17, 21 | 8, 11, 17, 21 |
PowerShell | Non supportato | 7.4 |
.NET | .NET 8 | .NET 8, .NET 9, .NET Framework 4.8.1 |
rubino | 3.2, 3.3 | Gestori personalizzati |
Go | Runtime esclusivo per il sistema operativo | Gestori personalizzati |
Rust | Runtime esclusivo per il sistema operativo | Gestori personalizzati |
Modello di programmazione
Caratteristica / Funzionalità | AWS Lambda | Funzioni di Azure |
---|---|---|
Attivatori | Si integra con altri servizi AWS tramite origini eventi. Fornisce metodi automatici e programmatici per collegare le funzioni lambda alle origini eventi. | Attiva una funzione in base a eventi specifici, ad esempio gli aggiornamenti in un database o un nuovo messaggio in una coda. Ad esempio, un trigger di Azure Cosmos DB consente alle funzioni di rispondere automaticamente agli inserimenti e agli aggiornamenti in un contenitore di Azure Cosmos DB. Questa azione consente l'elaborazione in tempo reale delle modifiche ai dati. Funzioni si integra anche con Azure Event Grid, in modo da poter elaborare eventi dai servizi di Azure, come Azure Storage e Azure Media Services, e da fonti di eventi esterne. Event Grid funge da servizio di routing eventi centralizzato ed estendibile che integra i trigger delle Funzioni e permette un'elevata scalabilità e un'ampia copertura delle fonti di eventi. |
Collegamenti | Non dispone di associazioni. Usa gli SDK AWS all'interno di funzioni Lambda per gestire manualmente le interazioni con altri servizi AWS. | Le associazioni, configurate come input o output, consentono connessioni dichiarative ai servizi, riducendo al minimo la necessità di codice SDK esplicito. Ad esempio, è possibile configurare le associazioni per leggere da Archiviazione BLOB, scrivere in Azure Cosmos DB o inviare messaggi di posta elettronica tramite SendGrid senza gestire manualmente le integrazioni. |
Trigger di eventi e associazioni
Trigger o servizio Lambda di AWS | Trigger di Funzioni di Azure | Descrizione |
---|---|---|
Gateway API: richieste HTTP | Attivatore HTTP | Questi trigger consentono di gestire direttamente le richieste HTTP. |
Simple Queue Service (SQS) | Trigger di Azure Queue Storage o trigger di Azure Service Bus | Questi trigger possono elaborare i messaggi nelle code. |
Simple Notification Service (SNS) | Trigger di Griglia di eventi o trigger di Bus di servizio | Questi trigger abilitano l'elaborazione delle notifiche. |
Kinesis (flussi di dati) | Trigger Hub eventi | Questi trigger usano flussi di dati. |
DynamoDB (modifiche alle tabelle) | Trigger del feed di modifiche di Azure Cosmos DB | Questi trigger sono in ascolto delle modifiche nelle tabelle. |
CloudWatch Events o EventBridge Scheduler | Innesco del timer | Questi trigger gestiscono funzioni pianificate o basate sul tempo. |
S3 (eventi oggetto) | Trigger di archiviazione BLOB | Questi trigger reagiscono agli eventi nell'archiviazione BLOB. |
Amazon Relational Database Service (RDS) | Trigger SQL di Azure | Questi trigger reagiscono alle modifiche del database. |
Streaming gestito per Apache Kafka (MSK) | Trigger di Apache Kafka | Questi trigger reagiscono ai messaggi degli argomenti Kafka. |
Amazon ElastiCache | Trigger Redis di Azure | Questi trigger reagiscono ai messaggi in Redis. |
Amazon MQ | RabbitMQ Trigger | Questi trigger reagiscono ai messaggi in RabbitMQ. |
Autorizzazioni
AWS Lambda | Funzioni di Azure |
---|---|
Il ruolo di esecuzione Lambda concede alle funzioni Lambda le autorizzazioni per interagire con altri servizi AWS. Ogni funzione Lambda ha un ruolo IAM (Identity and Access Management) associato che ne determina le autorizzazioni durante l'esecuzione. | Le identità gestite forniscono un'identità per l'app per le funzioni che consente di eseguire l'autenticazione con altri servizi di Azure senza archiviare le credenziali nel codice. Il controllo degli accessi in base al ruolo assegna i ruoli appropriati all'identità gestita in Microsoft Entra ID per concedere l'accesso alle risorse necessarie. |
Dichiarazioni delle politiche basate sulle risorse: - AWSLambda_FullAccess consente l'accesso completo a tutte le operazioni lambda, tra cui la creazione, l'aggiornamento e l'eliminazione di funzioni. - AWSLambda_ReadOnlyAccess consente l'accesso in sola lettura per visualizzare le funzioni lambda e le relative configurazioni. - Politiche IAM personalizzate. |
Ruoli predefiniti basati sulle risorse: - Il ruolo Proprietario concede l'accesso completo, inclusa la gestione delle autorizzazioni di accesso. - Il ruolo Collaboratore può creare ed eliminare app per le funzioni, configurare le impostazioni e distribuire il codice. Non può gestire l'accesso. - Il ruolo Lettore di monitoraggio può concedere l'accesso in sola lettura ai dati e alle impostazioni di monitoraggio. Può anche allocare ruoli personalizzati. |
URL della funzione
AWS Lambda | Funzioni di Azure |
---|---|
https://<url-id>.lambda-url.<region>.on.aws |
- <appname>.azurewebsites.net (originale, nome host predefinito globale) - <appname>-<randomhash>.<Region>.azurewebsites.net (nuovo, nome host predefinito univoco) |
Rete
AWS Lambda | Funzioni di Azure |
---|---|
Tutte le funzioni lambda vengono eseguite in modo sicuro all'interno di un cloud privato virtuale gestito dal sistema predefinito( VPC). È anche possibile configurare la funzione Lambda per accedere alle risorse in un VPC personalizzato. | Le app per le funzioni possono essere protette dalla rete e possono accedere ad altri servizi all'interno della rete. L'accesso alla rete in ingresso può essere limitato solo a un elenco di firewall di indirizzi IP e a una rete virtuale specifica tramite endpoint di servizio o endpoint privati. L'accesso alla rete in uscita viene abilitato tramite la funzionalità di integrazione della rete virtuale. L'app per le funzioni può avere tutto il traffico limitato alla subnet di una rete virtuale e può accedere anche ad altri servizi all'interno di tale rete virtuale. |
Osservabilità e monitoraggio
AWS Lambda | Funzioni di Azure |
---|---|
Amazon CloudWatch consente di monitorare e osservare le metriche, aggregare e analizzare i log, impostare avvisi, creare dashboard personalizzati e implementare risposte automatizzate alle modifiche apportate alle prestazioni e alle metriche delle risorse. | Azure Monitor offre una supervisione completa e osservabilità per Azure Functions, in particolare tramite la funzionalità di Application Insights. Application Insights raccoglie dati di telemetria, ad esempio tassi di richiesta, tempi di risposta e percentuali di errore. Visualizza le relazioni tra componenti dell'applicazione, monitora le prestazioni in tempo reale, registra la diagnostica dettagliata e consente il rilevamento delle metriche personalizzato. Queste funzionalità consentono di mantenere le prestazioni, la disponibilità e l'affidabilità di Funzioni di Azure, abilitando al tempo stesso dashboard, avvisi e risposte automatiche personalizzate. |
AWS Lambda genera dati di telemetria dalle chiamate di funzione e può esportare questi dati usando la semantica OpenTelemetry. È possibile configurare le funzioni Lambda per inviare questi dati di telemetria a qualsiasi endpoint conforme a OpenTelemetry. Questa azione consente la correlazione di tracce e log, dati di telemetria coerenti basati su standard e integrazione con altri strumenti di osservabilità che supportano OpenTelemetry. | Configura l'applicazione di funzioni per esportare i dati di log e di traccia in formato OpenTelemetry. È possibile esportare i dati di telemetria in qualsiasi endpoint conforme usando OpenTelemetry. OpenTelemetry offre vantaggi come la correlazione di tracce e log, dati di telemetria coerenti basati su standard e integrazione con altri provider. È possibile abilitare OpenTelemetry a livello di app per le funzioni nella configurazione host e nel progetto di codice per ottimizzare l'esportazione dei dati dal codice della funzione. Per altre informazioni, vedere Usare OpenTelemetry con Funzioni di Azure. |
Ridimensionamento e concorrenza
AWS Lambda | Funzioni di Azure |
---|---|
AWS usa un modello di scalabilità su richiesta. Ridimensionare automaticamente le funzioni operative in base alla richiesta. La concorrenza, o il numero di richieste gestite da un'istanza, è sempre 1. | Le istanze vengono aggiunte e rimosse dinamicamente in base al numero di eventi in ingresso e alla concorrenza configurata per ogni istanza. È possibile configurare l'impostazione di concorrenza sul valore desiderato. |
La concorrenza è sempre 1. | La concorrenza è configurabile (>1). |
Supporta il ridimensionamento a 0. | Supporta il ridimensionamento a 0. |
Protezione di avvio a freddo
AWS Lambda | Funzioni di Azure |
---|---|
La concorrenza sottoposta a provisioning riduce la latenza e garantisce prestazioni prevedibili delle funzioni attraverso la pre-inizializzazione di un numero richiesto di istanze di funzione. La concorrenza con provisioning è adatta alle applicazioni sensibili alla latenza e viene addebitata separatamente dalla concorrenza standard. | Le app per le funzioni consentono di configurare la concorrenza per ogni istanza, che ne determina a sua volta la scalabilità. Più processi possono essere eseguiti in parallelo nella stessa istanza dell'app e i processi successivi nell'istanza non comportano l'avvio a freddo iniziale. Le app per le funzioni hanno anche istanze sempre pronte . I clienti possono specificare una serie di istanze preavvise per eliminare la latenza di avvio a freddo e garantire prestazioni coerenti. Inoltre, le app per le funzioni aumentano a un numero maggiore di istanze in base alla richiesta, mantenendo al tempo stesso le istanze sempre pronte. |
La concorrenza riservata specifica il numero massimo di istanze simultanee che una funzione può avere. Questo limite garantisce che una parte della quota di concorrenza dell'account venga messa da parte esclusivamente per tale funzione. AWS Lambda scala dinamicamente per gestire le richieste in ingresso anche quando è impostata la concorrenza riservata, a condizione che le richieste non superino il limite specificato di concorrenza riservata. Il limite inferiore per la concorrenza riservata in AWS Lambda è 1. Il limite superiore per la concorrenza riservata in AWS Lambda è determinato dalla quota di concorrenza regionale dell'account. Per impostazione predefinita, questo limite è 1.000 operazioni simultanee per ogni area. | Le Funzioni di Azure non hanno una funzionalità equivalente al controllo della concorrenza riservata. Per ottenere funzionalità simili, isolare funzioni specifiche in app per le funzioni separate e impostare il limite massimo di scalabilità orizzontale per ogni app. Funzioni di Azure aumenta in modo dinamico o aggiunge altre istanze e riduce o rimuove istanze entro il limite di scale-out impostato. Per impostazione predefinita, le app eseguite in un piano a consumo flessibile iniziano con un limite configurabile di 100 istanze complessive. Il valore massimo massimo del numero di istanze è 40 e il valore massimo massimo supportato è 1.000. Le quote di memoria della sottoscrizione a livello di area possono anche limitare la scalabilità orizzontale delle app per le funzioni, ma è possibile aumentare questa quota chiamando il supporto. |
Tariffazione
AWS Lambda | Funzioni di Azure |
---|---|
- Pagamento a consumo per il conteggio totale delle chiamate e per i GB/s per ogni istanza (con una concorrenza fissa pari a 1) - Incrementi di 1 ms - Livello gratuito di 400.000 Gbps |
- Pagare per uso per il conteggio totale delle chiamate e per i GB/s di ogni istanza (con chiamate simultanee configurabili) - Incrementi di 100 ms - Livello gratuito di 100.000 Gbps - Costi basati sul consumo |
Archiviazione del codice sorgente
AWS Lambda | Funzioni di Azure |
---|---|
AWS Lambda gestisce l'archiviazione del codice della funzione nel proprio sistema di archiviazione gestito. Non è necessario fornire più spazio di archiviazione. | Funzioni richiede un contenitore di archiviazione BLOB fornito dal cliente per gestire il pacchetto di distribuzione che contiene il codice dell'app. È possibile configurare le impostazioni per usare lo stesso account di archiviazione o un account di archiviazione diverso per le distribuzioni e gestire i metodi di autenticazione per l'accesso al contenitore. |
Sviluppo locale
Funzionalità lambda di AWS | Funzionalità di Azure Functions |
---|---|
- Interfaccia della riga di comando SAM - LocalStack |
- Strumenti di base di Funzioni di Azure - Visual Studio Code - Visual Studio - GitHub Codespaces - VSCode.dev -Intenditore - Codice e test di Funzioni di Azure in locale |
Distribuzione
Caratteristica / Funzionalità | AWS Lambda | Funzioni di Azure |
---|---|---|
Pacchetto di distribuzione | - Archivio ZIP - Immagine del contenitore |
File ZIP (per la distribuzione di immagini del contenitore, usare lo SKU dedicato o Premium). |
Dimensioni file ZIP (console) | 50 MB massimo | Massimo 500 MB per la distribuzione ZIP |
Dimensioni file ZIP (interfaccia della riga di comando/SDK) | Massimo 250 MB per la distribuzione ZIP, massimo 500 MB per i file non compressi | Massimo 500 MB per la distribuzione ZIP |
Dimensioni dell'immagine del contenitore | 10 GB al massimo | Supporto dei contenitori con archiviazione flessibile tramite Azure |
Gestione degli artefatti di grandi dimensioni | Usare immagini del contenitore per distribuzioni di dimensioni maggiori. | Collegare le condivisioni di archiviazione BLOB o File di Azure per accedere a file di grandi dimensioni dall'app. |
Creazione di pacchetti di dipendenze comuni alle funzioni | Strati | Distribuzione di .Zip, su richiesta dall'archiviazione, contenitori (solo ACA, dedicati, SKU EP) |
Distribuzione o controllo delle versioni delle funzioni blu-verde | Usare qualificatori di funzione per fare riferimento a uno stato specifico della funzione usando un numero di versione o un nome alias. I qualificatori consentono la gestione delle versioni e le strategie di distribuzione graduali. | Usare sistemi di integrazione continua e recapito continuo per le distribuzioni blu-verde. |
Timeout e limiti di memoria
Caratteristica / Funzionalità | Limiti di AWS Lambda | Limiti di Funzioni di Azure |
---|---|---|
Timeout esecuzione | 900 secondi (15 minuti) | Il timeout predefinito è 30 minuti. Il timeout massimo è senza limiti. Tuttavia, il periodo di tolleranza assegnato a un'esecuzione della funzione è di 60 minuti durante il ridimensionamento e 10 minuti durante gli aggiornamenti della piattaforma. Per altre informazioni, vedere Durata del timeout delle app per le funzioni. |
Memoria configurabile | Da 128 MB a 10.240 MB, con incrementi di 64 MB | Funzioni supporta dimensioni di istanza da 2 GB e 4 GB. Ogni area in una determinata sottoscrizione ha un limite di memoria di 512.000 MB per tutte le istanze di app, che è possibile aumentare chiamando il supporto. L'utilizzo totale della memoria di tutte le istanze di tutte le app per le funzioni in un'area deve rimanere entro questa quota. Anche se 2 GB e 4 GB sono le opzioni relative alle dimensioni dell'istanza, la concorrenza per ogni istanza può essere superiore a 1. Pertanto, una singola istanza può gestire più esecuzioni simultanee, a seconda della configurazione. La configurazione della concorrenza in modo appropriato può aiutare a ottimizzare l'utilizzo delle risorse e gestire le prestazioni. Bilanciando l'allocazione della memoria e le impostazioni di concorrenza, è possibile gestire in modo efficace le risorse allocate alle app per le funzioni e garantire prestazioni e controllo dei costi efficienti. Per ulteriori informazioni, vedere Quote di memoria della sottoscrizione regionale. |
Gestione dei segreti
AWS Lambda | Funzioni di Azure |
---|---|
AWS Secrets Manager consente di archiviare, gestire e recuperare segreti, ad esempio credenziali del database, chiavi API e altre informazioni riservate. Le funzioni lambda possono recuperare i segreti usando AWS SDK. | È consigliabile usare approcci senza segreti come le identità gestite per abilitare l'accesso sicuro alle risorse di Azure senza hardcoding delle credenziali. Quando sono necessari segreti, ad esempio per i sistemi partner o legacy, Azure Key Vault offre una soluzione sicura per archiviare e gestire segreti, chiavi e certificati. |
AWS Systems Manager Parameter Store è un servizio che archivia i dati di configurazione e i segreti. I parametri possono essere crittografati usando IL Servizio di gestione delle chiavi AWS e recuperati dalle funzioni Lambda usando AWS SDK. Le funzioni lambda possono archiviare le impostazioni di configurazione nelle variabili di ambiente. I dati sensibili possono essere crittografati con una chiave del Servizio di gestione delle chiavi per l'accesso sicuro. |
Funzioni di Azure usa le impostazioni dell'applicazione per archiviare i dati di configurazione. Queste impostazioni vengono mappate direttamente alle variabili di ambiente per semplificare l'uso all'interno della funzione. Queste impostazioni possono essere crittografate e archiviate in modo sicuro nella configurazione del servizio app di Azure. Per scenari più avanzati, Configurazione app di Azure offre funzionalità affidabili per la gestione di più configurazioni. Abilita il contrassegno delle funzionalità e supporta gli aggiornamenti dinamici tra i servizi. |
Gestione dello stato
AWS Lambda | Funzioni di Azure |
---|---|
AWS Lambda gestisce la gestione dello stato semplice usando servizi come Amazon S3 per l'archiviazione di oggetti, DynamoDB per l'archiviazione dello stato NoSQL veloce e scalabile e SQS per la gestione delle code dei messaggi. Questi servizi garantiscono la persistenza e la coerenza dei dati tra le esecuzioni di funzioni lambda. | Funzioni di Azure usa AzureWebJobsStorage per gestire lo stato abilitando associazioni e trigger con i servizi di Archiviazione di Azure, ad esempio Archiviazione BLOB, Archiviazione code e Archiviazione tabelle. Consente alle funzioni di leggere e scrivere facilmente lo stato. Per una gestione dello stato più complessa, Durable Functions offre funzionalità avanzate di orchestrazione e persistenza dello stato del flusso di lavoro tramite Archiviazione di Azure. |
Orchestrazione con stato
AWS Lambda | Funzioni di Azure |
---|---|
Nessuna orchestrazione dello stato nativa. Usare funzioni di passaggio AWS per i flussi di lavoro. | Durable Functions consente di gestire lo stato complesso fornendo l'orchestrazione del flusso di lavoro durevole e le entità con stato. Consente operazioni a esecuzione prolungata, checkpoint automatici e persistenza affidabile dello stato. Queste funzionalità consentono di creare flussi di lavoro complessi per garantire la tolleranza di errore e la scalabilità per le applicazioni con stato. |
Altre differenze e considerazioni
Caratteristica / Funzionalità | AWS Lambda | Funzioni di Azure |
---|---|---|
Funzioni di raggruppamento | Ogni funzione Lambda di AWS è un'entità indipendente. | Un'app per le funzioni funge da contenitore per più funzioni. Fornisce un contesto di esecuzione condiviso e una configurazione per le funzioni in esso contenute. Il trattamento di più funzioni come singola entità semplifica la distribuzione e la gestione. Funzioni usa anche una strategia di scalabilità per funzione, in cui ogni funzione viene ridimensionata in modo indipendente, ad eccezione dei trigger HTTP, Archiviazione BLOB e Durable Functions. Queste funzioni attivate vengono ridimensionate nei propri gruppi. |
Domini personalizzati | Abilitato tramite gateway API | È possibile configurare domini personalizzati direttamente in un'app per le funzioni o in Gestione API di Azure. |
Supporto di contenitori personalizzati | Supporta contenitori personalizzati tramite l'immagine del contenitore Lambda | Le Funzioni di Azure supportano contenitori personalizzati eseguiti in un ambiente di app di contenitori. |
Creare un piano di migrazione
Selezionare i carichi di lavoro chiave per un modello di verifica.
Per iniziare, selezionare uno o due carichi di lavoro non critici di medie dimensioni dall'inventario totale. Questi carichi di lavoro fungono da base per la migrazione di modelli di verifica. È possibile testare il processo e identificare potenziali sfide senza rischiare gravi interruzioni delle operazioni.
Testare in modo iterativo e raccogliere feedback.
Usare il modello di verifica per raccogliere feedback, identificare le lacune e ottimizzare il processo prima di passare a carichi di lavoro più grandi. Questo approccio iterativo garantisce che, nel momento in cui si passa alla migrazione su larga scala, si affrontino potenziali sfide e si affina il processo.
Creare le risorse di migrazione
Questo passaggio è una fase di sviluppo transitorio. Durante questa fase si compila il codice sorgente, i modelli di infrastruttura come codice (IaC) e le pipeline di distribuzione per rappresentare il carico di lavoro in Azure. Prima di poter eseguire la migrazione, è necessario adattare il codice della funzione per la compatibilità e le procedure consigliate.
- Adattare il codice della funzione, i file di configurazione e l'infrastruttura come file di codice
- Modificare le impostazioni di configurazione
- Generare file IaC
- Usare gli strumenti per il refactoring
Adattare il codice della funzione, i file di configurazione e l'infrastruttura come file di codice
Per aggiornare il codice in base ai requisiti del runtime delle Funzioni di Azure:
Modificare il codice in modo da rispettare il modello di programmazione di Funzioni di Azure. Ad esempio, adattare le firme di funzione in modo che corrispondano al formato richiesto da Funzioni di Azure. Per altre informazioni sulla definizione della funzione e sul contesto di esecuzione, vedere Guide per sviluppatori di Funzioni di Azure.
Usare il bundle delle estensioni di Funzioni di Azure per gestire varie associazioni e trigger simili ai servizi AWS. Per le applicazioni .NET, è consigliabile usare i pacchetti NuGet appropriati anziché il bundle delle estensioni.
Usare il bundle di estensioni per l'integrazione con altri servizi di Azure, ad esempio Archiviazione di Azure, bus di servizio di Azure e Azure Cosmos DB senza dover configurare manualmente ogni associazione tramite SDK. Per altre informazioni, vedere Connettere le funzioni ai servizi di Azure usando associazioni e modelli di espressione di associazione di Funzioni di Azure.
I frammenti di codice seguenti sono esempi di codice SDK comune. Il codice Lambda di AWS corrisponde ai trigger, alle associazioni o ai frammenti di codice SDK corrispondenti in Azure Functions.
Lettura da Amazon S3 rispetto ad Archiviazione BLOB di Azure
Codice lambda AWS (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());
};
Codice di Azure Functions (evento di attivazione)
import { app } from '@azure/functions';
app.storageblob('blobTrigger', {
path: 'my-container/{blobName}',
connection: 'AzureWebJobsStorage',
}, async (context, myBlob) => {
context.log(`Blob content:
${myBlob.toString()}`);
});
Scrittura in Amazon Simple Queue Service (SQS) rispetto ad archiviazione code di Azure
Codice lambda AWS (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();
};
Codice di Azure Functions (evento di attivazione)
import { app } from '@azure/functions';
app.queue('queueTrigger', {
queueName: 'myqueue-items',
connection: 'AzureWebJobsStorage',
}, async (context, queueMessage) => {
context.log(`Queue message:
${queueMessage}`);
});
Scrittura in DynamoDB rispetto ad Azure Cosmos DB
Codice lambda AWS (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);
};
Codice di Azure Functions (evento di attivazione)
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)}`);
});
});
Eventi di Amazon CloudWatch rispetto a un trigger timer di Azure
Codice lambda AWS (SDK)
exports.handler = async (event) => {
console.log('Scheduled event:', event);
};
Codice di Azure Functions (evento di attivazione)
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) rispetto a un trigger di Griglia di eventi di Azure
Codice lambda AWS (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();
};
Codice di Azure Functions (evento di attivazione)
import { app } from '@azure/functions';
app.eventGrid('eventGridTrigger', {},
async (context, eventGridEvent) => {
context.log(`Event Grid event:
${JSON.stringify(eventGridEvent)}`);
});
Amazon Kinesis rispetto a un trigger di Azure Event Hubs
Codice lambda AWS (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);
};
Codice di Azure Functions (evento di attivazione)
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}`);
});
});
Vedere i repository GitHub seguenti per confrontare il codice lambda di AWS e il codice di Funzioni di Azure:
- Codice lambda AWS
- Codice di Funzioni di Azure
- Repository di esempi di Azure, che include esempi iniziali, IaC e completi per Funzioni di Azure
Modificare le impostazioni di configurazione
Assicurarsi che le impostazioni di timeout e memoria della funzione siano compatibili con Funzioni di Azure. Per altre informazioni sulle impostazioni configurabili, vedere host.json riferimento per Funzioni di Azure.
Seguire le procedure consigliate per le autorizzazioni, l'accesso, la rete e le configurazioni di distribuzione.
Configura autorizzazioni
Seguire le procedure consigliate quando si configurano le autorizzazioni per le app per le funzioni. Per altre informazioni, vedere Configurare l'app per le funzioni e l'account di archiviazione con identità gestita.
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}'
}
}
Per altre informazioni, vedere rbac.bicep.
Configurare l'accesso alla rete
Le Funzioni di Azure supportano l'integrazione della rete virtuale, che consente alla tua app di funzioni di accedere alle risorse nella tua rete virtuale. Dopo l'integrazione, l'app instrada il traffico in uscita attraverso la rete virtuale. L'app può quindi accedere a endpoint o risorse privati usando regole che consentono solo il traffico da subnet specifiche. Se la destinazione è un indirizzo IP all'esterno della rete virtuale, l'indirizzo IP di origine è uno degli indirizzi elencati nelle proprietà dell'app, a meno che non si configuri un gateway NAT.
Quando si abilita l'integrazione della rete virtuale per le app per le funzioni, seguire le procedure consigliate in TSG per l'integrazione della rete virtuale per app Web e app per le funzioni.
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
}
}
Per altre informazioni, vedere VNet.bicep e storage-PrivateEndpoint.bicep.
Configurare le impostazioni di distribuzione
Le distribuzioni seguono un unico percorso. Dopo aver compilato il codice del progetto e comprimerlo in un pacchetto dell'applicazione, distribuirlo in un contenitore di archiviazione BLOB. All'avvio, l'app ottiene il pacchetto ed esegue il codice della funzione da esso. Per impostazione predefinita, lo stesso account di archiviazione che archivia i metadati host interni, ad esempio AzureWebJobsStorage
, funge anche da contenitore di distribuzione. Tuttavia, è possibile usare un account di archiviazione alternativo o scegliere il metodo di autenticazione preferito configurando le impostazioni di distribuzione dell'app. Per altre informazioni, vedere Dettagli della tecnologia didistribuzione e Configurare le impostazioni di distribuzione.
Generare file IaC
Usare strumenti come Bicep, modelli di Azure Resource Manager o Terraform per creare file IaC per distribuire le risorse di Azure.
Definire risorse come Funzioni di Azure, account di archiviazione e componenti di rete nei file IaC.
Usare questo repository di esempi IaC per esempi che usano consigli e procedure consigliate di Funzioni di Azure.
Usare gli strumenti per il refactoring
Usare strumenti come GitHub Copilot in VS Code per facilitare il refactoring del codice, il refactoring manuale per modifiche specifiche o altri strumenti di migrazione.
Annotazioni
Utilizzare la modalità agente in GitHub Copilot su VS Code.
Gli articoli seguenti forniscono esempi specifici e passaggi dettagliati per facilitare il processo di migrazione:
Sviluppare un processo dettagliato per la migrazione del giorno 0
Sviluppa strategie di failover e failback per la migrazione e testale accuratamente in un ambiente di preproduzione. È consigliabile eseguire test end-to-end prima di passare infine da AWS Lambda a Funzioni di Azure.
Convalidare le funzionalità
Testare attentamente ogni funzione per assicurarsi che funzioni come previsto. Questi test devono includere input/output, trigger di eventi e verifica delle associazioni.
Usare strumenti come curl o estensioni client REST in VS Code per inviare richieste HTTP per le funzioni attivate da HTTP.
Per altri trigger, ad esempio timer o code, assicurarsi che i trigger vengano attivati correttamente e che le funzioni vengano eseguite come previsto.
Convalidare le prestazioni
Eseguire test delle prestazioni per confrontare la nuova distribuzione di Funzioni di Azure con la precedente distribuzione lambda di AWS.
Monitorare le metriche, ad esempio il tempo di risposta, il tempo di esecuzione e l'utilizzo delle risorse.
Usare Application Insights per il monitoraggio, l'analisi dei log e la risoluzione dei problemi durante la fase di test.
Risolvere i problemi usando la funzionalità diagnostica e risoluzione dei problemi
Usare la funzionalità di diagnosi e risoluzione dei problemi nel portale di Azure per risolvere i problemi relativi all'app per le funzioni. Questo strumento fornisce un set di funzionalità di diagnostica che consentono di identificare e risolvere rapidamente problemi comuni, ad esempio arresti anomali dell'applicazione, riduzione delle prestazioni e problemi di configurazione. Seguire la procedura guidata per la risoluzione dei problemi e i suggerimenti forniti dallo strumento per risolvere i problemi identificati.
Valutare lo stato finale del carico di lavoro migrato
Prima di rimuovere le risorse in AWS, è necessario assicurarsi che la piattaforma soddisfi le aspettative correnti del carico di lavoro e che nulla blocchi la manutenzione del carico di lavoro o un ulteriore sviluppo.
Distribuire e testare funzioni per convalidare le prestazioni e la correttezza.
Distribuzione su Azure
Distribuire i carichi di lavoro usando la funzionalità di pubblicazione di VS Code . È anche possibile distribuire carichi di lavoro dalla riga di comando usando Azure Functions Core Tools o l'interfaccia della riga di comando di Azure. Azure DevOps e GitHub Actions usano anche One Deploy.
Azure Functions Core Tools: distribuire la app per le funzioni usando Azure Functions Core Tools con il comando
func azure functionapp publish <FunctionAppName>
.Pipeline di integrazione continua e distribuzione continua (CI/CD): configurare una pipeline CI/CD usando servizi come GitHub Actions, Azure DevOps o un altro strumento CI/CD.
Per altre informazioni, vedere Recapito continuo con GitHub Actions o Recapito continuo con Azure Pipelines.
Esplorare gli scenari di migrazione di esempio
Usare il repository MigrationGetStarted come modello per iniziare il proof of concept. Questo repository include un progetto di Funzioni di Azure pronto per la distribuzione che include i file di codice sorgente e dell'infrastruttura per iniziare.
Se si preferisce usare Terraform, usare MigrationGetStarted-Terraform .
Ottimizzare e monitorare le prestazioni dell'applicazione in Azure
Dopo aver eseguito la migrazione del carico di lavoro, è consigliabile esplorare altre funzionalità in Azure. Queste funzionalità possono aiutare a soddisfare i requisiti futuri del carico di lavoro e a colmare le lacune.
Usare Application Insights per il monitoraggio e la risoluzione dei problemi
Abilitare Application Insights per l'app per le funzioni per raccogliere dati di telemetria dettagliati per il monitoraggio e la risoluzione dei problemi. È possibile abilitare Application Insights tramite il portale di Azure o nel file di configurazione host.json dell'app per le funzioni. Dopo aver abilitato Application Insights, è possibile:
Raccogliere i dati di telemetria. Application Insights fornisce vari dati di telemetria, ad esempio i log delle richieste, le metriche delle prestazioni, le eccezioni e le dipendenze.
Analizzare log e metriche. Accedere al dashboard di Application Insights dal portale di Azure per visualizzare e analizzare log, metriche e altri dati di telemetria. Usare gli strumenti predefiniti per creare query personalizzate e visualizzare i dati per ottenere informazioni dettagliate sulle prestazioni e sul comportamento dell'app per le funzioni.
Configurare gli avvisi. Configurare gli avvisi in Application Insights per notificare problemi critici, riduzione delle prestazioni o eventi specifici. Questi avvisi consentono di monitorare e rispondere rapidamente ai problemi in modo proattivo.
Ottimizzare i costi e le prestazioni
Ridimensionamento e ottimizzazione delle prestazioni:
Usare le funzionalità di scalabilità automatica per gestire in modo efficiente carichi di lavoro diversi.
Ottimizzare il codice della funzione per migliorare le prestazioni riducendo il tempo di esecuzione, ottimizzando le dipendenze e usando procedure di codifica efficienti.
Implementare strategie di memorizzazione nella cache per ridurre l'elaborazione e la latenza ripetute per i dati a cui si accede di frequente.
Gestione costi:
Usare gli strumenti di Gestione costi Microsoft per monitorare e analizzare i costi di Funzioni di Azure.
Configurare avvisi relativi al budget e ai costi per gestire e prevedere le spese in modo efficace.