Dela via


Migrera AWS Lambda-arbetsbelastningar till Azure Functions

Att migrera en serverlös arbetsbelastning som använder Amazon Web Services (AWS) Lambda till Azure Functions kräver noggrann planering och implementering. Den här artikeln innehåller viktig vägledning som hjälper dig:

  • Utför en upptäcktsprocess på din befintliga arbetslast.
  • Lär dig hur du utför viktiga migreringsaktiviteter som planering före migrering och utvärdering av arbetsbelastningar.
  • Utvärdera och optimera en migrerad arbetsbelastning.

Omfång

I den här artikeln beskrivs migreringen av en AWS Lambda-instans till Azure Functions.

Den här artikeln tar inte upp:

  • Migrering till din egen containervärdlösning, till exempel via Azure Container Apps.
  • Värd för AWS Lambda-containrar i Azure.
  • Grundläggande azure-implementeringsmetoder för din organisation, till exempel Azure-landningszoner eller andra ämnen som tas upp i migreringsmetodiken Cloud Adoption Framework.

Jämför funktioner

Den här artikeln mappar AWS Lambda-funktioner till Azure Functions-motsvarigheter för att säkerställa kompatibilitet.

Viktigt!

Du kan välja att inkludera optimering i din migreringsplan, men Microsoft rekommenderar en tvåstegsprocess. Migrera "like-to-like"-funktioner först och utvärdera sedan optimeringsmöjligheter i Azure.

Optimeringsarbetet borde vara kontinuerligt och köras genom arbetsgruppens ändringskontrollprocesser. En migrering som lägger till fler funktioner under en migrering medför risker och utökar processen i onödan.

Arbetsbelastningsperspektiv

Den här artikeln fokuserar på hur du migrerar en AWS Lambda-arbetsbelastning till Azure Functions och de vanliga beroendena för serverlösa arbetsbelastningar. Den här processen kan omfatta flera tjänster eftersom arbetsbelastningar omfattar många resurser och processer för att hantera dessa resurser. Om du vill ha en omfattande strategi måste du kombinera rekommendationerna i den här artikeln med en större plan som innehåller de andra komponenterna och processerna i din arbetsbelastning.

Utför en identifieringsprocess för din befintliga arbetsbelastning

Det första steget är att genomföra en detaljerad identifieringsprocess för att utvärdera din befintliga AWS Lambda-arbetsbelastning. Målet är att förstå vilka AWS-funktioner och tjänster som din arbetsbelastning förlitar sig på. Kompilera en omfattande inventering av dina AWS Lambda-funktioner med hjälp av AWS-verktyg som tjänstspecifika SDK:er, API:er, CloudTrail och AWS CLI för att utvärdera arbetsbelastningen på AWS. Du bör förstå följande viktiga aspekter av din AWS Lambda-inventering:

  • Användningsfall
  • -konfigurationer
  • Säkerhets- och nätverkskonfigurationer
  • Verktygs-, övervaknings-, loggnings- och observerbarhetsmekanismer
  • Beroenden
  • Tillförlitlighetsmål och aktuell tillförlitlighetsstatus
  • Ägandekostnad
  • Prestandamål och aktuell prestanda

Utför planering inför förflyttning

Innan du börjar migrera din arbetsbelastning måste du mappa AWS Lambda-funktioner till Azure Functions för att säkerställa kompatibilitet och utveckla en migreringsplan. Sedan kan du välja viktiga arbetsuppgifter för en prototyp.

Du måste också mappa de AWS-tjänster som Lambda är beroende av till motsvarande beroenden i Azure.

Mappa AWS Lambda-funktioner till Azure Functions

Tabellerna nedan jämför AWS Lambda-begrepp, resurser och egenskaper med sina motsvarigheter i Azure Functions, speciellt Flex Consumption-värdplanen.

Språk som stöds

Programmeringsspråk Versioner som stöds av AWS Lambda Versioner som stöds av Azure Functions
Node.js 20, 22 20, 22
python 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 Stöds inte 7,4
.NÄT .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Rubin 3.2, 3.3 Anpassade hanterare
Sätt igång Körtid endast för operativsystem Anpassade hanterare
Rost Körtid endast för operativsystem Anpassade hanterare

Programmeringsmodell

Egenskap AWS Lambda Azure-funktioner
Utlösare Integrerar med andra AWS-tjänster via händelsekällor. Tillhandahåller automatiska och programmatiska sätt att länka Lambda-funktioner till händelsekällor. Utlöser en funktion baserat på specifika händelser, till exempel uppdateringar i en databas eller ett nytt meddelande i en kö. En Azure Cosmos DB-utlösare gör till exempel att funktioner automatiskt kan svara på infogningar och uppdateringar i en Azure Cosmos DB-container. Den här åtgärden möjliggör realtidsbearbetning av dataändringar.

Functions integreras också med Azure Event Grid, så att det kan bearbeta händelser från Azure-tjänster, till exempel Azure Storage och Azure Media Services, och externa händelsekällor. Event Grid fungerar som en centraliserad, utökningsbar händelseroutningstjänst som kompletterar Functions-utlösare och möjliggör hög skalbarhet och bred täckning för händelsekällor.
Bindningar Har inga bindningar. Använder AWS SDK:er i Lambda-funktioner för att manuellt hantera interaktioner med andra AWS-tjänster. Bindningar, konfigurerade som indata eller utdata, aktiverar deklarativa anslutningar till tjänster, vilket minimerar behovet av explicit SDK-kod. Du kan till exempel konfigurera bindningar för att läsa från Blob Storage, skriva till Azure Cosmos DB eller skicka e-postmeddelanden via SendGrid utan att hantera integreringarna manuellt.

Händelseutlösare och bindningar

AWS Lambda-utlösare eller tjänst Azure Functions-utlösare Beskrivning
API Gateway: HTTP-begäranden HTTP-utlösare Med de här utlösarna kan du hantera HTTP-begäranden direkt.
Enkel kötjänst (SQS) Azure Queue Storage-utlösare eller Azure Service Bus-utlösare Dessa utlösare kan bearbeta meddelanden i köer.
Enkel meddelandetjänst (SNS) Event Grid-utlösare eller Service Bus-utlösare Dessa utlösare aktiverar meddelandebearbetning.
Kinesis (dataströmmar) Event Hubs-utlösare Dessa utlösare använder dataströmmar.
DynamoDB (tabelländringar) Azure Cosmos DB-utlösare för ändringsflöde Dessa utlösare lyssnar efter ändringar i tabeller.
CloudWatch Events eller EventBridge Scheduler Tidsutlösare Dessa utlösare hanterar schemalagda eller tidsbaserade funktioner.
S3 (objekthändelser) Blob Storage-utlösare Dessa utlösare reagerar på händelser i Blob Storage.
Amazons Relational Database Service (RDS) Azure SQL-utlösare Dessa utlösare reagerar på databasändringar.
Hanterad direktuppspelning för Apache Kafka (MSK) Apache Kafka-utlösare Dessa utlösare reagerar på Kafka-ämnesmeddelanden.
Amazon ElastiCache Azure Redis-utlösare Dessa utlösare reagerar på meddelanden i Redis.
Amazon MQ RabbitMQ-utlösare Dessa utlösare reagerar på meddelanden i RabbitMQ.

Behörigheter

AWS Lambda Azure-funktioner
Lambda-körningsrollen ger Lambda-funktioner behörighet att interagera med andra AWS-tjänster. Varje Lambda-funktion har en associerad roll för identitets- och åtkomsthantering (IAM) som avgör dess behörigheter medan den körs. Hanterade identiteter tillhandahåller en identitet för din funktionsapp som gör att den kan autentisera med andra Azure-tjänster utan att lagra autentiseringsuppgifter i koden. Rollbaserad åtkomstkontroll tilldelar lämpliga roller till den hanterade identiteten i Microsoft Entra-ID för att ge åtkomst till de resurser som krävs.
Resursbaserade policysatser:

- AWSLambda_FullAccess ger fullständig åtkomst till alla Lambda-åtgärder, inklusive att skapa, uppdatera och ta bort funktioner.

– AWSLambda_ReadOnlyAccess ger skrivskyddad åtkomst för att visa Lambda-funktioner och deras konfigurationer.

– Anpassade IAM-policyer.
Resursbaserade inbyggda roller:

– Rollen Ägare ger fullständig åtkomst, inklusive åtkomstbehörighetshantering.

– Rollen Bidragsgivare kan skapa och ta bort funktionsappar, konfigurera inställningar och distribuera kod. Den kan inte hantera åtkomst.

– Rollen Övervakningsläsare kan ge skrivskyddad åtkomst till övervakningsdata och inställningar. Den kan också allokera anpassade roller.

Funktions-URL

AWS Lambda Azure-funktioner
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (ursprungligt, globalt standardvärdnamn)

- <appname>-<randomhash>.<Region>.azurewebsites.net (nytt, unikt standardvärdnamn)

Nätverkande

AWS Lambda Azure-funktioner
Alla Lambda-funktioner körs säkert i ett standardsystemhanterat virtuellt privat moln (VPC). Du kan också konfigurera Lambda-funktionen för att komma åt resurser i en anpassad VPC. Funktionsappar kan skyddas i nätverket och kan komma åt andra tjänster i nätverket. Inkommande nätverksåtkomst kan begränsas till endast en brandväggslista med IP-adresser och till ett specifikt virtuellt nätverk via tjänstslutpunkter eller privata slutpunkter. Utgående nätverksåtkomst aktiveras via integreringsfunktionen för virtuella nätverk. Funktionsappen kan ha all trafik begränsad till ett virtuellt nätverks undernät och kan även komma åt andra tjänster i det virtuella nätverket.

Observerbarhet och övervakning

AWS Lambda Azure-funktioner
Amazon CloudWatch hjälper till med övervakning och observerbarhet genom att samla in och spåra mått, aggregera och analysera loggar, ställa in larm, skapa anpassade instrumentpaneler och implementera automatiserade svar på ändringar i resursprestanda och mått. Azure Monitor tillhandahåller omfattande övervakning och observerbarhet för Azure Functions, särskilt via dess Application Insights-funktion.

Application Insights samlar in telemetridata, till exempel begärandefrekvenser, svarstider och felfrekvenser. Den visualiserar programkomponentrelationer, övervakar prestanda i realtid, loggar detaljerad diagnostik och tillåter anpassad måttspårning. De här funktionerna hjälper till att upprätthålla prestanda, tillgänglighet och tillförlitlighet för Azure Functions, samtidigt som anpassade instrumentpaneler, aviseringar och automatiserade svar aktiveras.
AWS Lambda genererar telemetridata från dina funktionsanrop och kan exportera dessa data med hjälp av OpenTelemetry-semantik. Du kan konfigurera Lambda-funktionerna för att skicka dessa telemetridata till valfri OpenTelemetry-kompatibel slutpunkt. Den här åtgärden möjliggör korrelation av spårningar och loggar, konsekventa standardbaserade telemetridata och integrering med andra observerbarhetsverktyg som stöder OpenTelemetry. Konfigurera funktionsappen för att exportera logg- och spårningsdata i ett OpenTelemetry-format. Du kan exportera telemetridata till valfri kompatibel slutpunkt med hjälp av OpenTelemetry. OpenTelemetry ger fördelar som korrelation av spårningar och loggar, konsekventa standardbaserade telemetridata och integrering med andra leverantörer. Du kan aktivera OpenTelemetry på funktionsappsnivå i värdkonfigurationen och i kodprojektet för att optimera dataexport från funktionskoden. Mer information finns i Använda OpenTelemetry med Azure Functions.

Skalning och samtidighet

AWS Lambda Azure-funktioner
AWS använder en skalningsmodell på begäran. Skala automatiskt din funktionens drift som svar på efterfrågan. Samtidighet, eller antalet begäranden som hanteras av en instans, är alltid 1. Instanser läggs till och tas bort dynamiskt baserat på antalet inkommande händelser och den konfigurerade samtidigheten för varje instans. Du kan konfigurera samtidighetsinställningen till önskat värde.
Samtidighet är alltid 1. Samtidighet kan konfigureras (>1).
Stöder skalning till 0. Stöder skalning till 0.

Kallstartsskydd

AWS Lambda Azure-funktioner
Etablerad samtidighet minskar svarstiden och säkerställer förutsägbar funktionsprestanda genom att initiera ett begärt antal funktionsinstanser i förväg. Tilldelad samtidighet passar svarstidskänsliga applikationer och prissätts separat från standard samtidighet. Med funktionsappar kan du konfigurera samtidighet för varje instans, vilket driver dess skala. Flera jobb kan köras parallellt i samma instans av appen, och efterföljande jobb i instansen påverkas inte av den ursprungliga kalla uppstarten. Funktionsappar har också alltid redo instanser. Kunder kan ange ett antal förvärmda instanser för att eliminera latens vid kallstart och säkerställa konsekvent prestanda. Funktionsappar skalar också ut till fler instanser baserat på efterfrågan, samtidigt som de alltid redo instanserna bibehålls.
Reserverad samtidighet anger det maximala antalet samtidiga instanser som en funktion kan ha. Den här gränsen säkerställer att en del av kontots samtidighetskvot uteslutande reserveras för den funktionen. AWS Lambda skalas ut dynamiskt för att hantera inkommande begäranden även när reserverad samtidighet har angetts, så länge begärandena inte överskrider den angivna gränsen för reserverad samtidighet. Den lägre gränsen för reserverad samtidighet i AWS Lambda är 1. Den övre gränsen för reserverad samtidighet i AWS Lambda bestäms av kontots regionala samtidighetskvot. Som standard är den här gränsen 1 000 samtidiga åtgärder för varje region. Azure Functions har inte någon motsvarande funktion för reserverad samtidighet. För att uppnå liknande funktioner isolerar du specifika funktioner i separata funktionsappar och anger den maximala utskalningsgränsen för varje app. Azure Functions skalas ut dynamiskt eller lägger till fler instanser och skalar in, eller tar bort instanser, inom skalningsgränsuppsättningen. Som standard börjar appar som körs i en Flex Consumption-plan med en konfigurerbar gräns på 100 övergripande instanser. Det lägsta maximala instansantalet är 40 och det högsta högsta antalet instanser som stöds är 1 000. Regionala minneskvoter för prenumerationer kan också begränsa hur mycket funktionsappar som kan skalas ut, men du kan öka den här kvoten genom att anropa supporten.

Prissättning

AWS Lambda Azure-funktioner
– Betala per användning för det totala antalet anrop och för GB/s för varje instans (med en fast samtidighet på 1)

- 1 ms intervall

– Kostnadsfri nivå på 400 000 Gbit/s
– Betala per användning för det totala antalet anrop och för GB/s för varje instans (med konfigurerbara samtidiga anrop)

- 100 ms intervaller

– Kostnadsfri nivå på 100 000 Gbit/s

- Förbrukningsbaserade kostnader

Lagring av källkod

AWS Lambda Azure-funktioner
AWS Lambda hanterar lagringen av funktionskoden i sitt eget hanterade lagringssystem. Du behöver inte tillhandahålla mer lagringsutrymme. Functions kräver en bloblagringscontainer från kunden för att underhålla distributionspaketet som innehåller appens kod. Du kan konfigurera inställningarna så att de använder samma eller ett annat lagringskonto för distributioner och hantera autentiseringsmetoder för åtkomst till containern.

Lokal utveckling

AWS Lambda-funktion Azure Functions-funktion
- SAM CLI

- LocalStack
– Azure Functions Core Tools

– Visual Studio Code

– Visual Studio

– GitHub Codespaces

- VSCode.dev

-Maven

- Koda och testa Azure Functions lokalt

Driftsättning

Egenskap AWS Lambda Azure-funktioner
Distributionspaket – ZIP-fil

– Containeravbildning
ZIP-fil (För distribution av containerbilder använder du den dedikerade SKU:n eller premium SKU:n.)
ZIP-filstorlek (konsol) Maximalt 50 MB Maximalt 500 MB för ZIP-distribution
ZIP-filstorlek (CLI/SDK) Maximalt 250 MB för ZIP-distribution, maximalt 500 MB för uppackad fil Maximalt 500 MB för ZIP-distribution
Containeravbildningsstorlek Maximalt 10 GB Stöd för containrar med flexibel lagring via Azure
Stor artefakthantering Använd containeravbildningar för större distributioner. Bifoga Blob Storage- eller Azure Files-resurser för att få åtkomst till stora filer från appen.
Paketera vanliga beroenden till funktioner Skikt Deployment .Zip, på begäran från lagring eller containrar (endast ACA, dedikerade, EP-SKU:er)
Blågrön utplacering eller funktionsversionering Använd funktionskvalificerare för att referera till ett visst tillstånd för din funktion med hjälp av antingen ett versionsnummer eller ett aliasnamn. Kvalificerare möjliggör versionshantering och gradvisa distributionsstrategier. Använd system för kontinuerlig integrering och kontinuerlig leverans för blågröna distributioner.

Utgångstidsgränser och minnesgränser

Egenskap AWS Lambda-gränser Azure Functions-gränser
Tidsgräns för exekvering 900 sekunder (15 minuter) Standardtidsgränsen är 30 minuter. Den maximala timeouten är obegränsad. Respitperioden för en funktionskörning är dock 60 minuter under inskalning och 10 minuter under plattformsuppdateringar. Mer information finns i Tidsgränsens varaktighet för funktionsapp.
Konfigurerbart minne 128 MB till 10 240 MB, i steg om 64 MB Functions stöder instansstorlekar på 2 GB och 4 GB . Varje region i en viss prenumeration har en minnesgräns på 512 000 MB för alla instanser av appar, vilket du kan öka genom att anropa supporten. Den totala minnesanvändningen för alla instanser i alla funktionsappar i en region måste hålla sig inom den här kvoten.

Även om 2 GB och 4 GB är instansstorleksalternativen kan samtidigheten för varje instans vara högre än 1. Därför kan en enskild instans hantera flera samtidiga körningar, beroende på konfigurationen. Om du konfigurerar samtidighet på rätt sätt kan du optimera resursanvändningen och hantera prestanda. Genom att balansera minnesallokering och samtidighetsinställningar kan du effektivt hantera de resurser som allokerats till dina funktionsappar och säkerställa effektiv prestanda och kostnadskontroll. Mer information finns i Regionala minneskvoter för prenumeration.

Hemlighetshantering

AWS Lambda Azure-funktioner
Med AWS Secrets Manager kan du lagra, hantera och hämta hemligheter som databasautentiseringsuppgifter, API-nycklar och annan känslig information. Lambda-funktioner kan hämta hemligheter med hjälp av AWS SDK. Vi rekommenderar att du använder hemlighetslösa metoder som hanterade identiteter för att ge säker åtkomst till Azure-resurser utan hårdkodning av autentiseringsuppgifter. När hemligheter krävs, till exempel för partnersystem eller äldre system, tillhandahåller Azure Key Vault en säker lösning för att lagra och hantera hemligheter, nycklar och certifikat.
AWS Systems Manager Parameter Store är en tjänst som lagrar konfigurationsdata och hemligheter. Parametrar kan krypteras med hjälp av AWS KMS och hämtas av Lambda-funktioner med hjälp av AWS SDK.
Lambda-funktioner kan lagra konfigurationsinställningar i miljövariabler. Känsliga data kan krypteras med en KMS-nyckel för säker åtkomst.
Azure Functions använder programinställningar för att lagra konfigurationsdata. De här inställningarna mappas direkt till miljövariabler för enkel användning i funktionen. De här inställningarna kan krypteras och lagras på ett säkert sätt i Azure App Service-konfigurationen.
För mer avancerade scenarier tillhandahåller Azure App Configuration robusta funktioner för att hantera flera konfigurationer. Det möjliggör funktionsflagga och stöder dynamiska uppdateringar mellan tjänster.

Statushantering

AWS Lambda Azure-funktioner
AWS Lambda hanterar enkel tillståndshantering med hjälp av tjänster som Amazon S3 för objektlagring, DynamoDB för snabb och skalbar NoSQL-tillståndslagring och SQS för meddelandeköhantering. Dessa tjänster säkerställer databeständighet och konsistens över Lambda-funktionens körningar. Azure Functions använder AzureWebJobsStorage för att hantera tillstånd genom att aktivera bindningar och utlösare med Azure Storage-tjänster som Blob Storage, Queue Storage och Table Storage. Det gör att funktioner enkelt kan läsa och skriva tillstånd. För mer komplex tillståndshantering tillhandahåller Durable Functions avancerade arbetsflödesorkestrerings- och tillståndsbeständighetsfunktioner med hjälp av Azure Storage.

Tillståndsbevarande orkestrering

AWS Lambda Azure-funktioner
Ingen orkestrering av ursprungligt tillstånd. Använd AWS Step Functions för arbetsflöden. Durable Functions hjälper till med komplex tillståndshantering genom att tillhandahålla varaktig arbetsflödesorkestrering och tillståndskänsliga entiteter. Det möjliggör långvariga åtgärder, automatiska kontrollpunkter och tillförlitligt bevarande av tillstånd. Med de här funktionerna kan du skapa invecklade arbetsflöden för att säkerställa feltolerans och skalbarhet för tillståndskänsliga program.

Andra skillnader och överväganden

Egenskap AWS Lambda Azure-funktioner
Grupperingsfunktioner Varje AWS Lambda-funktion är en oberoende entitet. En funktionsapp fungerar som en container för flera funktioner. Den tillhandahåller en kontext och konfiguration för delad körning för de funktioner som den innehåller. Att behandla flera funktioner som en enda entitet förenklar distributionen och hanteringen. Functions använder också en skalningsstrategi per funktion, där varje funktion skalas separat, förutom HTTP-, Blob Storage- och Durable Functions-utlösare. Dessa utlösta funktioner skalas inom sina egna grupper.
Anpassade domäner Aktiverad via API Gateway Du kan konfigurera anpassade domäner direkt i en funktionsapp eller i Azure API Management.
Stöd för anpassad container Stöder anpassade containrar via Lambda Container Image Azure Functions stöder anpassade containrar som körs i en Container Apps-miljö.

Skapa en migreringsplan

  1. Välj viktiga arbetsbelastningar för ett konceptbevis.

    Börja med att välja en till två medelstora, icke-kritiska arbetsbelastningar från ditt totala lager. Dessa arbetsbelastningar utgör grunden för din proof-of-concept-migrering. Du kan testa processen och identifiera potentiella utmaningar utan att riskera större avbrott i verksamheten.

  2. Testa iterativt och samla in feedback.

    Använd konceptbeviset för att samla in feedback, identifiera luckor och finjustera processen innan du skalar till större arbetsbelastningar. Den här iterativa metoden säkerställer att du tar itu med potentiella utmaningar och förfinar processen när du övergår till fullskalig migrering.

Skapa migreringstillgångarna

Det här steget är en övergångsfas för utveckling. Under den här fasen skapar du källkod, infrastruktur som kodmallar (IaC) och distributionspipelines för att representera arbetsbelastningen i Azure. Du måste anpassa funktionskoden för kompatibilitet och metodtips innan du kan utföra migreringen.

Anpassa funktionskod, konfigurationsfiler och infrastruktur som kodfiler

Så här uppdaterar du koden så att den uppfyller kraven för Azure Functions-körning:

Följande kodfragment är exempel på vanlig SDK-kod. AWS Lambda-koden mappar till motsvarande utlösare, bindningar eller SDK-kodfragment i Azure Functions.

Läsa från Amazon S3 jämfört med Azure Blob Storage

AWS Lambda-kod (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());
};       

Azure Functions-kod (utlösare)

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

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

Skriva till Amazon Simple Queue Service (SQS) eller Azure Queue Storage

AWS Lambda-kod (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();
};

Azure Functions-kod (utlösare)

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

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

Skrivning till DynamoDB kontra Azure Cosmos DB

AWS Lambda-kod (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); 
}; 

Azure Functions-kod (utlösare)

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-händelser jämfört med en Azure-timer-trigger

AWS Lambda-kod (SDK)

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

Azure Functions-kod (utlösare)

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) jämfört med en Azure Event Grid-utlösare

AWS Lambda-kod (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(); 
}; 

Azure Functions-kod (utlösare)

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

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

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

}); 

Amazon Kinesis jämfört med en Azure Event Hubs-utlösare

AWS Lambda-kod (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); 
}; 

Azure Functions-kod (utlösare)

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

Se följande GitHub-lagringsplatser för att jämföra AWS Lambda-kod och Azure Functions-kod:

Justera konfigurationsinställningar

Kontrollera att funktionens timeout- och minnesinställningar är kompatibla med Azure Functions. Mer information om konfigurerbara inställningar finns ihost.json referens för Azure Functions.

Följ de rekommenderade metodtipsen för behörigheter, åtkomst, nätverk och distributionskonfigurationer.

Konfigurera behörigheter

Följ metodtipsen när du konfigurerar behörigheter för dina funktionsappar. Mer information finns i Konfigurera funktionsappen och lagringskontot med hanterad identitet.

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}'
  }
}

Mer information finns i rbac.bicep.

Konfigurera nätverksåtkomst

Azure Functions stöder integrering av virtuella nätverk, vilket ger funktionsappen åtkomst till resurser i ditt virtuella nätverk. Efter integreringen dirigerar appen utgående trafik via det virtuella nätverket. Sedan kan din app komma åt privata slutpunkter eller resurser med hjälp av regler som endast tillåter trafik från specifika undernät. Om målet är en IP-adress utanför det virtuella nätverket är käll-IP-adressen en av adresserna som anges i appens egenskaper, såvida du inte konfigurerar en NAT-gateway.

När du aktiverar integrering av virtuella nätverk för dina funktionsappar följer du metodtipsen i TSG för integrering av virtuella nätverk för webbappar och funktionsappar.

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
  }
}

Mer information finns i VNet.bicep och storage-PrivateEndpoint.bicep.

Konfigurera inställningar för distribution

Utrullningar följer en enda väg. När du har skapat projektkoden och komprimerat den till ett programpaket distribuerar du den till en Blob Storage-container. När den startar hämtar appen paketet och kör funktionskoden från det. Som standard fungerar samma lagringskonto som lagrar interna värdmetadata, till exempel AzureWebJobsStorage, som distributionscontainer. Du kan dock använda ett alternativt lagringskonto eller välja önskad autentiseringsmetod genom att konfigurera appens distributionsinställningar. Mer information finns i Information om distributionsteknik och Konfigurera distributionsinställningar.

Generera IaC-filer

  • Använd verktyg som Bicep, Azure Resource Manager-mallar eller Terraform för att skapa IaC-filer för att distribuera Azure-resurser.

  • Definiera resurser som Azure Functions, lagringskonton och nätverkskomponenter i dina IaC-filer.

  • Använd den här IaC-exempellagringsplatsen för exempel som använder Azure Functions-rekommendationer och metodtips.

Använda verktyg för refaktorisering

Använd verktyg som GitHub Copilot i VS Code för hjälp med kodrefaktorisering, manuell refaktorisering för specifika ändringar eller andra migreringshjälpmedel.

Anmärkning

Använd agentläge i GitHub Copilot i VS Code.

Följande artiklar innehåller specifika exempel och detaljerade steg för att underlätta migreringsprocessen:

Utveckla en stegvis process för day-0-migrering

Utveckla redundans- och återställningsstrategier för migreringen och testa dem noggrant i en förproduktionsmiljö. Vi rekommenderar att du utför testning från slutpunkt till slutpunkt innan du slutligen övergår från AWS Lambda till Azure Functions.

  • Verifiera funktioner

    • Koda och testa Azure Functions lokalt.

    • Testa varje funktion noggrant för att säkerställa att den fungerar som förväntat. Dessa tester bör omfatta indata/utdata, händelseutlösare och bindningsverifiering.

    • Använd verktyg som curl- eller REST-klienttillägg i VS Code för att skicka HTTP-begäranden för HTTP-utlösta funktioner.

    • För andra utlösare, till exempel timers eller köer, kontrollerar du att utlösarna utlöses korrekt och att funktionerna körs som förväntat.

  • Verifiera prestanda

    • Utför prestandatestning för att jämföra den nya Azure Functions-distributionen med den tidigare AWS Lambda-distributionen.

    • Övervaka mått som svarstid, körningstid och resursförbrukning.

    • Använd Application Insights för övervakning, logganalys och felsökning under testfasen.

  • Felsök med hjälp av funktionen diagnostisera och lösa problem

    Använd funktionen diagnostisera och lösa problem i Azure-portalen för att felsöka funktionsappen. Det här verktyget innehåller en uppsättning diagnostikfunktioner som hjälper dig att snabbt identifiera och lösa vanliga problem, till exempel programkrascher, prestandaförsämring och konfigurationsproblem. Följ de guidade felsökningsstegen och rekommendationerna som verktyget ger för att åtgärda problem som du identifierar.

Utvärdera sluttillståndet för den migrerade arbetsbelastningen

Innan du inaktiverar resurser i AWS måste du vara säker på att plattformen uppfyller nuvarande arbetsbelastningsförväntningar och att ingenting blockerar arbetsbelastningsunderhåll eller vidareutveckling.

Distribuera och testa funktioner för att verifiera deras prestanda och korrekthet.

Distribuera till Azure

Distribuera arbetsbelastningar med hjälp av VS Code-publiceringsfunktionen. Du kan också distribuera arbetsbelastningar från kommandoraden med hjälp av Azure Functions Core Tools eller Azure CLI. Azure DevOps och GitHub Actions använder också One Deploy.

Utforska exempel på migreringsscenarier

Använd MigrationGetStarted-repon som mall för att börja med din prototyp. Den här lagringsplatsen innehåller ett Azure Functions-projekt som är redo att distribueras med infrastrukturen och källkodsfilerna som hjälper dig att komma igång.

Om du föredrar att använda Terraform använder du MigrationGetStarted-Terraform i stället.

Optimera och övervaka programmets prestanda i Azure

När du har migrerat din arbetsbelastning rekommenderar vi att du utforskar fler funktioner i Azure. De här funktionerna kan hjälpa dig att uppfylla framtida arbetsbelastningskrav och minska luckor.

Använda Application Insights för övervakning och felsökning

Aktivera Application Insights för din funktionsapp för att samla in detaljerade telemetridata för övervakning och felsökning. Du kan aktivera Application Insights via Azure-portalen eller i funktionsappens host.json konfigurationsfil. När du har aktiverat Application Insights kan du:

  • Samla in telemetridata. Application Insights innehåller olika telemetridata, till exempel begärandeloggar, prestandamått, undantag och beroenden.

  • Analysera loggar och mått. Få åtkomst till Application Insights-instrumentpanelen från Azure-portalen för att visualisera och analysera loggar, mått och andra telemetridata. Använd de inbyggda verktygen för att skapa anpassade frågor och visualisera data för att få insikter om funktionsappens prestanda och beteende.

  • Konfigurera aviseringar. Konfigurera aviseringar i Application Insights för att meddela dig om kritiska problem, prestandaförsämring eller specifika händelser. De här aviseringarna hjälper dig att proaktivt övervaka och snabbt svara på problem.

Optimera för kostnad och prestanda

  • Skalning och prestandaoptimering:

    • Använd funktioner för automatisk skalning för att effektivt hantera varierande arbetsbelastningar.

    • Optimera funktionskoden för att förbättra prestanda genom att minska körningstiden, optimera beroenden och använda effektiva kodningsmetoder.

    • Implementera cachelagringsstrategier för att minska upprepad bearbetning och svarstid för data som används ofta.

  • Kostnadshantering:

    • Använd Microsoft Cost Management-verktyg för att övervaka och analysera dina Azure Functions-kostnader.

    • Konfigurera budgeterings- och kostnadsaviseringar för att hantera och förutsäga utgifter effektivt.