Delen via


AWS Lambda-workloads migreren naar Azure Functions

Voor het migreren van een serverloze workload die gebruikmaakt van Amazon Web Services (AWS) Lambda naar Azure Functions, is een zorgvuldige planning en implementatie vereist. Dit artikel bevat essentiële richtlijnen om u te helpen:

  • Voer een detectieproces uit op uw bestaande workload.
  • Meer informatie over het uitvoeren van belangrijke migratieactiviteiten, zoals planning van premigratie en workloadevaluatie.
  • Evalueer en optimaliseer een gemigreerde workload.

Omvang

In dit artikel wordt de migratie van een AWS Lambda-exemplaar naar Azure Functions beschreven.

Dit artikel heeft geen betrekking op:

  • Migratie naar uw eigen containerhostingoplossing, bijvoorbeeld via Azure Container Apps.
  • AwS Lambda-containers hosten in Azure.
  • Basisbenaderingen voor Azure-acceptatie door uw organisatie, zoals Azure-landingszones of andere onderwerpen die worden behandeld in de migratiemethodologie van het Cloud Adoption Framework.

Aangepaste chatmodus voor migratiedoeleinden

Azure Functions biedt een aangepaste chatmodus in GitHub Copilot om het eenvoudiger te maken om uw AWS Lambda-apps naar Azure te migreren met behulp van Visual Studio Code. Gebruik deze stappen om de LambdaToFunctionMigration aangepaste chatmodus toe te voegen aan uw project in Visual Studio Code:

  1. Als u de GitHub Copilot-extensie voor Azure Visual Studio Code nog niet hebt, installeert u deze nu.

  2. Open uw Lambda-project als werkruimte in Visual Studio Code.

  3. Voer deze prompt uit in de agentmodus in GitHub Copilot:

    Help me migrate my Lambda app to Azure
    
  4. Wanneer u hierom wordt gevraagd in het systeemvak, selecteert u Installeren om de LambdaToFunctionMigration aangepaste chatmodus aan uw project toe te voegen.

U kunt nu begeleide prompts gebruiken die zijn gedefinieerd in deze aangepaste chat voor elke fase van uw migratie. Begin te typen /LambdaMigration in de chat om de volledige lijst met beschikbare opdrachten weer te geven.

Functionaliteit vergelijken

In dit artikel worden AWS Lambda-functies toegewezen aan Azure Functions-equivalenten om compatibiliteit te garanderen.

Belangrijk

U kunt ervoor kiezen om optimalisatie op te nemen in uw migratieplan, maar Microsoft raadt een proces in twee stappen aan. Migreer eerst 'like-to-like'-functies en evalueer vervolgens optimalisatiemogelijkheden in Azure.

Optimalisatie-inspanningen moeten continu zijn en worden uitgevoerd via de wijzigingenbeheerprocessen van uw workloadteam. Een migratie die meer mogelijkheden toevoegt tijdens een migratie, loopt risico en breidt het proces onnodig uit.

Perspectief op werkbelasting

Dit artikel is gericht op het migreren van een AWS Lambda-workload naar Azure Functions en de algemene afhankelijkheden voor serverloze workloads. Dit proces kan betrekking hebben op verschillende services omdat workloads veel resources en processen omvatten om deze resources te beheren. Als u een uitgebreide strategie wilt hebben, moet u de aanbevelingen in dit artikel combineren met een groter plan dat de andere onderdelen en processen in uw workload bevat.

Een detectieproces uitvoeren op uw bestaande workload

De eerste stap is het uitvoeren van een gedetailleerd detectieproces om uw bestaande AWS Lambda-workload te evalueren. Het doel is om te begrijpen op welke AWS-functies en -services uw workload afhankelijk is. Compileer een uitgebreide inventarisatie van uw AWS Lambda-functies met behulp van AWS-hulpprogramma's zoals servicespecifieke SDK's, API's, CloudTrail en AWS CLI om de workload op AWS te beoordelen. U moet de volgende belangrijke aspecten van uw AWS Lambda-inventaris begrijpen:

  • Gebruikssituaties
  • Configuraties
  • Beveiligings- en netwerkinstellingen
  • Hulpprogramma's, bewaking, logboekregistratie en waarneembaarheidsmechanismen
  • Afhankelijkheden
  • Betrouwbaarheidsdoelstellingen en huidige betrouwbaarheidsstatus
  • Eigendomskosten
  • Prestatiedoelen en huidige prestaties

Aanbeveling

Gebruik deze aangepaste chatmodusprompt om een evaluatierapport te genereren voor uw AWS Lambda-installatie:

/LambdaMigration-Phase1-AssessLambdaProject

Premigratieplanning uitvoeren

Voordat u begint met het migreren van uw workload, moet u AWS Lambda-functies toewijzen aan Azure Functions om compatibiliteit te garanderen en een migratieplan te ontwikkelen. Vervolgens kunt u belangrijke workloads selecteren voor een proof of concept.

U moet ook de AWS-services in kaart brengen waarvan Lambda afhankelijk is, naar de gelijkwaardige afhankelijkheden in Azure.

AWS Lambda-functies toewijzen aan Azure Functions

In de volgende tabellen worden AWS Lambda-concepten, -resources en -eigenschappen vergeleken met de bijbehorende equivalenten in Azure Functions, met name het hostingabonnement flexverbruik.

Ondersteunde talen

Programmeertaal ondersteunde versies van AWS Lambda ondersteunde versies van 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, 3.12, 3.13
Java 8, 11, 17, 21 8, 11, 17, 21
PowerShell Niet ondersteund 7.4
.NET .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Robijn 3.2, 3.3 Aangepaste handlers
Ga runtime van het besturingssysteem alleen Aangepaste handlers
Roest runtime van het besturingssysteem alleen Aangepaste handlers

Programmeermodel

Eigenschap AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Aanleidingen Kan worden geïntegreerd met andere AWS-services via gebeurtenisbronnen. Biedt automatische en programmatische manieren om Lambda-functies te koppelen aan gebeurtenisbronnen. Hiermee wordt een functie geactiveerd op basis van specifieke gebeurtenissen, zoals updates in een database of een nieuw bericht in een wachtrij. Met een Azure Cosmos DB-trigger kunnen functies bijvoorbeeld automatisch reageren op invoegingen en updates in een Azure Cosmos DB-container. Met deze actie kunt u realtime gegevenswijzigingen verwerken.

Functies kunnen ook worden geïntegreerd met Azure Event Grid, zodat gebeurtenissen van Azure-services, zoals Azure Storage en Azure Media Services, en externe gebeurtenisbronnen kunnen worden verwerkt. Event Grid fungeert als een gecentraliseerde, uitbreidbare service voor gebeurtenisroutering die een aanvulling vormt op Functions-triggers en een hoge schaalbaarheid en een brede dekking van de gebeurtenisbron mogelijk maakt.
Verbindingen Heeft geen bindingen. Maakt gebruik van AWS SDK's binnen Lambda-functies om interacties met andere AWS-services handmatig te beheren. Bindingen, geconfigureerd als invoer of uitvoer, maken declaratieve verbindingen met services mogelijk, waardoor expliciete SDK-code niet meer nodig is. U kunt bijvoorbeeld bindingen configureren om te lezen vanuit Blob Storage, schrijven naar Azure Cosmos DB of e-mailberichten verzenden via SendGrid zonder de integraties handmatig te beheren.

Gebeurtenistriggers en koppelingen

AWS Lambda-trigger of -service Azure Functions-trigger Beschrijving
API-gateway: HTTP-aanvragen HTTP-trigger Met deze triggers kunt u HTTP-aanvragen rechtstreeks verwerken.
Simple Queue Service (SQS) Azure Queue Storage-trigger of Azure Service Bus-trigger Deze triggers kunnen berichten in wachtrijen verwerken.
Simple Notification Service (SNS) event grid-trigger of service bus-trigger Met deze triggers kunt u meldingsverwerking inschakelen.
Kinesis (gegevensstromen) Event Hubs-trigger Deze triggers verbruiken gegevensstromen.
DynamoDB (tabelwijzigingen) azure Cosmos DB-wijzigingenfeedtrigger Deze triggers luisteren naar wijzigingen in tabellen.
CloudWatch Events of EventBridge-planningsprogramma timer-trigger Deze triggers verwerken geplande of op tijd gebaseerde functies.
S3 (object-gebeurtenissen) Blob Storage-trigger Deze triggers reageren op gebeurtenissen in blob storage.
Amazon relationele database-service (RDS) Azure SQL-trigger Deze triggers reageren op databasewijzigingen.
Beheerde streaming voor Apache Kafka (MSK) Apache Kafka-trigger Deze triggers reageren op Kafka-onderwerpberichten.
Amazon ElastiCache Azure Redis-trigger Deze triggers reageren op berichten in Redis.
Amazon MQ RabbitMQ-trigger Deze triggers reageren op berichten in RabbitMQ.

Machtigingen

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
De lambda-uitvoeringsrol verleent Lambda-functies machtigingen om te communiceren met andere AWS-services. Elke Lambda-functie heeft een bijbehorende rol voor identiteits- en toegangsbeheer (IAM) die de machtigingen bepaalt terwijl deze wordt uitgevoerd. Beheerde identiteiten bieden een identiteit voor uw functie-app waarmee deze kan worden geverifieerd met andere Azure-services zonder referenties op te slaan in de code. Op rollen gebaseerd toegangsbeheer wijst de juiste rollen toe aan de beheerde identiteit in Microsoft Entra-id om toegang te verlenen tot de resources die hiervoor nodig zijn.
Beleidsinstructies op basis van resources:

- AWSLambda_FullAccess biedt volledige toegang tot alle Lambda-bewerkingen, waaronder het maken, bijwerken en verwijderen van functies.

- AWSLambda_ReadOnlyAccess biedt leesrechten om Lambda-functies en hun configuraties te bekijken.

- Aangepast IAM-beleid.
Ingebouwde rollen op basis van resources:

- De rol Eigenaar geeft volledige toegang, inclusief toegangsmachtigingenbeheer.

- De rol Inzender kan functie-apps maken en verwijderen, instellingen configureren en code implementeren. De toegang kan niet worden beheerd.

- De rol Bewakingslezer kan alleen-leesrechten verlenen tot bewakingsgegevens en instellingen. Het kan ook aangepaste rollen toewijzen.

URL voor functie

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (oorspronkelijke, algemene standaardhostnaam)

- <appname>-<randomhash>.<Region>.azurewebsites.net (nieuwe, unieke standaardhostnaam)

Netwerken

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Alle Lambda-functies worden veilig uitgevoerd in een standaard door het systeem beheerde virtuele privécloud (VPC). U kunt uw Lambda-functie ook configureren voor toegang tot resources in een aangepaste VPC. Functie-apps kunnen netwerkbeveiligd worden en ze kunnen toegang hebben tot andere services binnen het netwerk. Binnenkomende netwerktoegang kan worden beperkt tot alleen een firewalllijst met IP-adressen en een specifiek virtueel netwerk via service-eindpunten of privé-eindpunten. Uitgaande netwerktoegang is ingeschakeld via de functie voor integratie van virtuele netwerken. De functie-app kan al het verkeer beperken tot het subnet van een virtueel netwerk en heeft ook toegang tot andere services binnen dat virtuele netwerk.

Waarneembaarheid en bewaking

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Amazon CloudWatch helpt bij het bewaken en observeren van metrische gegevens, het verzamelen en analyseren van logboeken, het instellen van waarschuwingen, het maken van aangepaste dashboards en het implementeren van geautomatiseerde reacties op wijzigingen in resourceprestaties en metrische gegevens. Azure Monitor biedt uitgebreide bewaking en waarneembaarheid voor Azure Functions, met name via de Application Insights-functie.

Application Insights verzamelt telemetriegegevens, zoals aanvraagsnelheden, reactietijden en foutpercentages. Het visualiseert relaties tussen toepassingsonderdelen, bewaakt realtime prestaties, registreert gedetailleerde diagnostische gegevens en maakt aangepaste metrische gegevens bijhouden mogelijk. Deze mogelijkheden helpen de prestaties, beschikbaarheid en betrouwbaarheid van Azure Functions te behouden, terwijl aangepaste dashboards, waarschuwingen en geautomatiseerde antwoorden worden ingeschakeld.
AWS Lambda genereert telemetriegegevens uit uw functieaanroepen en kan deze gegevens exporteren met behulp van OpenTelemetry-semantiek. U kunt uw Lambda-functies configureren om deze telemetriegegevens naar elk openTelemetry-compatibel eindpunt te verzenden. Deze actie maakt correlatie mogelijk van traceringen en logboeken, consistente op standaarden gebaseerde telemetriegegevens en integratie met andere hulpprogramma's voor waarneembaarheid die Ondersteuning bieden voor OpenTelemetry. Configureer uw functie-app voor het exporteren van log- en traceringsgegevens in een OpenTelemetry-indeling. U kunt telemetriegegevens exporteren naar elk compatibel eindpunt met behulp van OpenTelemetry. OpenTelemetry biedt voordelen zoals correlatie van traceringen en logboeken, consistente op standaarden gebaseerde telemetriegegevens en integratie met andere providers. U kunt OpenTelemetry inschakelen op het niveau van de functie-app in de hostconfiguratie en in uw codeproject om gegevensexport uit uw functiecode te optimaliseren. Zie OpenTelemetry gebruiken met Azure Functions voor meer informatie.

Schaalbaarheid en gelijktijdigheid

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
AWS maakt gebruik van een schaalmodel op aanvraag. Uw functiebewerking automatisch schalen als reactie op de vraag. Gelijktijdigheid, of het aantal aanvragen dat door een instantie wordt verwerkt, is altijd 1. Exemplaren worden dynamisch toegevoegd en verwijderd op basis van het aantal binnenkomende gebeurtenissen en de geconfigureerde gelijktijdigheid voor elk exemplaar. U kunt de gelijktijdigheidsinstelling configureren op de gewenste waarde.
Gelijktijdigheid is altijd 1. Gelijktijdigheid kan worden geconfigureerd (>1).
Ondersteunt het schalen van belasting naar 0. Ondersteunt het schalen van belasting naar 0.

Beveiliging tegen koude start

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Ingerichte gelijktijdigheid vermindert de latentie en zorgt voor voorspelbare functieprestaties door een aangevraagd aantal functie-exemplaren vooraf te initialiseren. Ingerichte gelijktijdigheid is geschikt voor latentiegevoelige toepassingen en is afzonderlijk geprijsd van standaard gelijktijdigheid. Met functie-apps kunt u de gelijktijdigheid voor elk exemplaar configureren, wat de schaal beïnvloedt. Meerdere opdrachten kunnen parallel worden uitgevoerd in hetzelfde exemplaar van de app, en de volgende opdrachten in het exemplaar leiden niet tot de aanvankelijke koude start. Functie-apps hebben ook altijd gereed instanties. Klanten kunnen een aantal vooraf opgewarmde exemplaren opgeven om latentie met koude start te elimineren en consistente prestaties te garanderen. Functie-apps schalen ook op naar meer instanties op basis van vraag, terwijl de altijd gereed staande instanties worden onderhouden.
Gereserveerde gelijktijdigheid geeft het maximum aantal gelijktijdige instanties aan dat een functie kan hebben. Deze limiet zorgt ervoor dat een deel van het gelijktijdigheidsquotum van uw account exclusief wordt gereserveerd voor die functie. AWS Lambda schaalt dynamisch uit om binnenkomende aanvragen te verwerken, zelfs wanneer gereserveerde gelijktijdigheid is ingesteld, zolang de aanvragen de opgegeven limiet voor gereserveerde gelijktijdigheid niet overschrijden. De ondergrens voor gereserveerde gelijktijdigheid in AWS Lambda is 1. De bovengrens voor gereserveerde gelijktijdigheid in AWS Lambda wordt bepaald door het regionale gelijktijdigheidsquotum van het account. Deze limiet is standaard 1000 gelijktijdige bewerkingen voor elke regio. Azure Functions heeft geen equivalente functie voor gereserveerde gelijktijdigheid. Als u vergelijkbare functionaliteit wilt bereiken, moet u specifieke functies isoleren in afzonderlijke functie-apps en de maximale uitschaallimiet voor elke app instellen. Azure Functions schaalt dynamisch uit of voegt meer exemplaren toe en schaalt in of verwijdert exemplaren binnen de uitschaallimietset. Standaard beginnen apps die worden uitgevoerd in een Flex Consumption-abonnement met een configureerbare limiet van 100 exemplaren. De laagste waarde voor het maximumaantal exemplaren is 40 en de hoogste ondersteunde maximumaantal exemplaren is 1000. geheugenquota voor regionale abonnementen kunnen ook beperken hoeveel functie-apps kunnen worden uitgeschaald, maar u kunt dit quotum verhogen door ondersteuning aan te roepen.

Prijsstelling

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
- Gebruikskosten op basis van het totale aantal aanroepen en voor de GB/s per instantie (met een vast gelijktijdigheidsniveau van 1)

- 1 ms verhogingen

- Gratis niveau van 400.000 Gbps
- Betalen per gebruik voor het totale aantal aanroepen en voor de GB/s van elke instantie (met configureerbare gelijktijdige aanroepen)

- stappen van 100 milliseconden

- 100.000 Gbps gratis tier

- kosten op basis van verbruik

Broncodeopslag

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
AWS Lambda beheert de opslag van uw functiecode in een eigen beheerd opslagsysteem. U hoeft niet meer opslagruimte op te geven. Voor Functions is een door de klant geleverde Blob Storage-container vereist om het implementatiepakket te onderhouden dat de code van uw app bevat. U kunt de instellingen configureren voor het gebruik van hetzelfde of een ander opslagaccount voor implementaties en het beheren van verificatiemethoden voor toegang tot de container.

Lokale ontwikkeling

AWS Lambda-functie Azure Functions-functie
- SAM CLI

- LocalStack
- Azure Functions Core Tools

- Visual Studio Code

- Visual Studio

- GitHub Codespaces

- VSCode.dev

-Maven

- Codeer en test Azure Functions lokaal

Uitrol

Eigenschap AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Implementatiepakket -Zipfile

- Containerafbeelding
ZIP-bestand (voor implementatie van containerafbeeldingen gebruikt u de toegewijde of premium SKU.)
ZIP-bestandsgrootte (console) Maximaal 50 MB Maximaal 500 MB voor ZIP-implementatie
ZIP-bestandsgrootte (CLI/SDK) Maximaal 250 MB voor ZIP-bestand, maximaal 500 MB voor uitgepakt bestand. Maximaal 500 MB voor ZIP-implementatie
Grootte van de containerafbeelding Maximaal 10 GB Containerondersteuning met flexibele opslag via Azure
Verwerking van grote artefacten Gebruik containerinstallatiekopieën voor grotere implementaties. Voeg Blob Storage- of Azure Files-shares toe om vanuit de app toegang te krijgen tot grote bestanden.
Algemene afhankelijkheden voor functies verpakken Lagen Implementatie als zipbestand, op aanvraag vanuit opslag of containers (alleen ACA, dedicated, EP SKU's)
Blauwgroene implementatie of functieversiebeheer Gebruik functiekwalificaties om te verwijzen naar een specifieke status van uw functie met behulp van een versienummer of een aliasnaam. Kwalificaties maken versiebeheer en geleidelijke implementatiestrategieën mogelijk. Gebruik systemen voor continue integratie en continue levering voor blauwgroene implementaties.

Time-out en geheugenlimieten

Eigenschap AWS Lambda-limieten Limieten voor Azure Functions
Uitvoeringstijdslimiet 900 seconden (15 minuten) De standaardtime-out is 30 minuten. De maximale time-out is onbegrensd. De respijtperiode die aan een functie-uitvoering is gegeven, is echter 60 minuten tijdens het inschalen en 10 minuten tijdens platformupdates. Voor meer informatie, zie de time-outduur van de functie-app .
Configureerbaar geheugen 128 MB tot 10.240 MB, in stappen van 64 MB Functions ondersteunt 2 GB en 4 GB instantiegrootten. Elke regio in een bepaald abonnement heeft een geheugenlimiet van 512.000 MB voor alle exemplaren van apps, die u kunt verhogen door ondersteuning te bellen. Het totale geheugengebruik van alle exemplaren in alle functie-apps in een regio moet binnen dit quotum blijven.

Hoewel 2 GB en 4 GB de opties voor de instantiegrootte zijn, kan de concurrentie voor elke instantie hoger zijn dan 1. Daarom kan één exemplaar meerdere gelijktijdige uitvoeringen verwerken, afhankelijk van de configuratie. Het configureren van gelijktijdigheid kan helpen bij het optimaliseren van resourcegebruik en het beheren van prestaties. Door geheugentoewijzing en gelijktijdigheidsinstellingen te verdelen, kunt u de resources die zijn toegewezen aan uw functie-apps effectief beheren en efficiënte prestaties en kostenbeheer garanderen. Zie geheugenquota voor regionale abonnementenvoor meer informatie.

Geheimenbeheer

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Met AWS Secrets Manager kunt u geheimen opslaan, beheren en ophalen, zoals databasereferenties, API-sleutels en andere gevoelige informatie. Lambda-functies kunnen geheimen ophalen met behulp van de AWS SDK. Wij raden aan benaderingen zonder geheimen, zoals beheerde identiteiten, te gebruiken om beveiligde toegang tot Azure-resources mogelijk te maken zonder het hardcoderen van inloggegevens. Wanneer geheimen vereist zijn, zoals voor partner- of verouderde systemen, biedt Azure Key Vault een veilige oplossing voor het opslaan en beheren van geheimen, sleutels en certificaten.
AWS Systems Manager Parameter Store is een service waarmee configuratiegegevens en geheimen worden opgeslagen. Parameters kunnen worden versleuteld met behulp van AWS KMS en opgehaald door Lambda-functies met behulp van de AWS SDK.
Lambda-functies kunnen configuratie-instellingen opslaan in omgevingsvariabelen. Gevoelige gegevens kunnen worden versleuteld met een KMS-sleutel voor beveiligde toegang.
Azure Functions maakt gebruik van toepassingsinstellingen voor het opslaan van configuratiegegevens. Deze instellingen worden rechtstreeks toegewezen aan omgevingsvariabelen voor gebruiksgemak binnen de functie. Deze instellingen kunnen worden versleuteld en veilig worden opgeslagen in de Azure App Service-configuratie.
Voor geavanceerdere scenario's biedt Azure App Configuration robuuste functies voor het beheren van meerdere configuraties. Het maakt functievlaggen mogelijk en biedt ondersteuning voor dynamische updates voor alle services.

Toestandbeheer

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
AWS Lambda verwerkt eenvoudig statusbeheer met behulp van services zoals Amazon S3 voor objectopslag, DynamoDB voor snelle en schaalbare NoSQL-statusopslag en SQS voor verwerking van berichtenwachtrijen. Deze services zorgen voor gegevenspersistentie en consistentie tussen lambda-functieuitvoeringen. Azure Functions maakt gebruik van AzureWebJobsStorage om de status te beheren door bindingen en triggers in te schakelen met Azure Storage-services zoals Blob Storage, Queue Storage en Table Storage. Hiermee kunnen functies de status eenvoudig lezen en schrijven. Voor complexere statusbeheer biedt Durable Functions geavanceerde mogelijkheden voor werkstroomindeling en statuspersistentie met behulp van Azure Storage.

Stateful orkestratie

AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Geen systeemeigen orkestratie. Gebruik AWS Step Functions voor werkstromen. Durable Functions helpt bij complex statusbeheer door gebruik te maken van duurzame orkestratie van werkstromen en staatvolle entiteiten. Het maakt langdurige bewerkingen, automatische controlepunten en betrouwbare statuspersistentie mogelijk. Met deze functies kunt u complexe werkstromen bouwen om fouttolerantie en schaalbaarheid voor stateful toepassingen te garanderen.

Andere verschillen en overwegingen

Eigenschap AWS Lambda Azure Functions (serverloze computerdiensten van Azure)
Groeperingsfuncties Elke AWS Lambda-functie is een onafhankelijke entiteit. Een functie-app fungeert als een container voor meerdere functies. Het biedt een gedeelde uitvoeringscontext en -configuratie voor de functies die deze bevat. Het behandelen van meerdere functies als één entiteit vereenvoudigt de implementatie en het beheer. Functions maakt ook gebruik van een strategie voor schalen per functie, waarbij elke functie onafhankelijk wordt geschaald, met uitzondering van HTTP-, Blob Storage- en Durable Functions-triggers. Deze geactiveerde functies schalen in hun eigen groepen.
Aangepaste domeinen Ingeschakeld via API Gateway U kunt aangepaste domeinen rechtstreeks configureren in een functie-app of in Azure API Management.
Ondersteuning voor aangepaste containers Ondersteunt aangepaste containers via Lambda Container Image Azure Functions ondersteunt aangepaste containers die worden uitgevoerd in een Container Apps-omgeving.

Een migratieplan maken

  1. Selecteer belangrijke workloads voor een proof of concept.

    Selecteer eerst één tot twee middelgrote, niet-kritieke workloads uit uw totale voorraad. Deze workloads dienen als de basis voor uw proof of concept migratie. U kunt het proces testen en potentiële uitdagingen identificeren zonder grote onderbreking van uw activiteiten te riskeren.

  2. Test iteratief en verzamel feedback.

    Aanbeveling

    Gebruik deze aangepaste chatmodusprompt om de huidige status van het migratieproces op elk gewenst moment te controleren:

    /LambdaMigration-GetStatus
    

    Gebruik het proof-of-concept om feedback te verzamelen, hiaten te identificeren en het proces af te stemmen voordat u naar grotere workloads schaalt. Deze iteratieve benadering zorgt ervoor dat u tegen de tijd dat u overstapt op migratie op volledige schaal, potentiële uitdagingen aanpakt en het proces verfijnt.

De migratieassets bouwen

Deze stap is een overgangsfase voor ontwikkeling. Tijdens deze fase bouwt u broncode-, IaC-sjablonen (Infrastructure as Code) en implementatiepijplijnen om de workload in Azure weer te geven. U moet functiecode aanpassen voor compatibiliteit en aanbevolen procedures voordat u de migratie kunt uitvoeren.

Functiecode, configuratiebestanden en infrastructuur aanpassen als codebestanden

Code bijwerken voor de runtimevereisten van Azure Functions:

  • Pas uw code aan om te voldoen aan het Azure Functions-programmeermodel. Pas uw functiehandtekeningen bijvoorbeeld aan zodat deze overeenkomen met de indeling die Azure Functions nodig heeft. Zie azure Functions-ontwikkelaarshandleidingen voor meer informatie over functiedefinities en uitvoeringscontext.

  • Gebruik de Azure Functions-uitbreidingsbundel om verschillende bindingen en triggers af te handelen die vergelijkbaar zijn met AWS-services. Voor .NET-toepassingen moet u de juiste NuGet-pakketten gebruiken in plaats van de uitbreidingsbundel.

  • Gebruik de uitbreidingsbundel om te integreren met andere Azure-services, zoals Azure Storage, Azure Service Bus en Azure Cosmos DB, zonder dat u elke binding handmatig hoeft te configureren via SDK's. Zie Connect functions to Azure Services by using bindings and Azure Functions binding expression patterns(s) (Functies verbinden met Azure-services) voor meer informatie.

Deze codefragmenten zijn voorbeelden van algemene SDK-code. De AWS Lambda-code wordt toegewezen aan de bijbehorende triggers, bindingen of SDK-codefragmenten in Azure Functions.

Lezen vanuit Amazon S3 versus Azure Blob Storage

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

Code voor Azure Functions (trigger)

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

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

Verschillen tussen schrijven naar Amazon Simple Queue Service (SQS) en Azure Queue Storage

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

Code voor Azure Functions (trigger)

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

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

Schrijven naar DynamoDB versus Azure Cosmos DB

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

Code voor Azure Functions (trigger)

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 een Azure-timertrigger

AWS Lambda-code (SDK)

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

Code voor Azure Functions (trigger)

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) versus een Azure Event Grid-trigger

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

Code voor Azure Functions (trigger)

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

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

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

}); 

Amazon Kinesis versus een Azure Event Hubs-trigger

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

Code voor Azure Functions (trigger)

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

Zie de volgende GitHub-opslagplaatsen om AWS Lambda-code en Azure Functions-code te vergelijken:

Configuratie-instellingen aanpassen

Zorg ervoor dat de time-out- en geheugeninstellingen van uw functie compatibel zijn met Azure Functions. Zie host.json naslaginformatie voor Azure Functions voor meer informatie over configureerbare instellingen.

Volg de aanbevolen beste praktijken voor machtigingen, toegang, netwerken en configuraties voor implementatie.

Machtigingen configureren

Volg de aanbevolen procedures wanneer u machtigingen voor uw functie-apps instelt. Zie Uw functie-app en opslagaccount configureren met beheerde identiteit voor meer informatie.

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

Zie rbac.bicep voor meer informatie.

Netwerktoegang configureren

Azure Functions biedt ondersteuning voor integratie van virtuele netwerken, waardoor uw functie-app toegang heeft tot resources in uw virtuele netwerk. Na de integratie routeert uw app uitgaand verkeer via het virtuele netwerk. Vervolgens heeft uw app toegang tot privé-eindpunten of resources met behulp van regels die alleen verkeer van specifieke subnetten toestaan. Als het doel een IP-adres buiten het virtuele netwerk is, is het bron-IP-adres een van de adressen die worden vermeld in de eigenschappen van uw app, tenzij u een NAT-gateway configureert.

Wanneer u integratie van virtuele netwerken inschakelt voor uw functie-apps, volgt u de aanbevolen procedures in TSG voor integratie van virtuele netwerken voor web-apps en functie-apps.

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

Zie VNet.bicep en storage-PrivateEndpoint.bicep voor meer informatie.

Implementatie-instellingen configureren

Implementaties volgen één pad. Nadat u de projectcode hebt gebouwd en in een toepassingspakket hebt gezipt, implementeert u deze in een Blob Storage-container. Zodra uw app wordt gestart, haalt het het pakket op en voert uw functiecode uit. Standaard fungeert hetzelfde opslagaccount dat interne hostmetagegevens opslaat, zoals AzureWebJobsStorage, ook als de implementatiecontainer. U kunt echter een alternatief opslagaccount gebruiken of uw voorkeursverificatiemethode kiezen door de implementatie-instellingen van uw app te configureren. Zie De details van de implementatietechnologie en de implementatie-instellingen configureren voor meer informatie.

IaC-bestanden genereren

  • Gebruik hulpprogramma's zoals Bicep, Azure Resource Manager-sjablonen of Terraform om IaC-bestanden te maken om Azure-resources te implementeren.

    Aanbeveling

    Gebruik deze aangepaste chatmodusprompt om infrastructuur als codebestanden (IaC) te genereren voor Azure Functions:

    /LambdaMigration-Phase3-GenerateFunctionsInfra
    
  • Definieer resources zoals Azure Functions, opslagaccounts en netwerkonderdelen in uw IaC-bestanden.

  • Gebruik deze opslagplaats voor IaC-voorbeelden voor voorbeelden die gebruikmaken van aanbevelingen en aanbevolen procedures van Azure Functions.

Hulpprogramma's gebruiken voor het herstructureren

Gebruik hulpprogramma's zoals GitHub Copilot in VS Code voor hulp bij het herstructureren van code, handmatige herstructurering voor specifieke wijzigingen of andere migratiehulpmiddelen.

Opmerking

Gebruik de agentmodus in GitHub Copilot in VS Code.

De volgende artikelen bevatten specifieke voorbeelden en gedetailleerde stappen om het migratieproces te vergemakkelijken:

Een stapsgewijs proces ontwikkelen voor dag-0-migratie

Ontwikkel failover- en failbackstrategieën voor uw migratie en test deze grondig in een preproductieomgeving. U wordt aangeraden end-to-end tests uit te voeren voordat u ten slotte overstapt van AWS Lambda naar Azure Functions.

  • Functionaliteit valideren

    • Code schrijven en testen van Azure Functions lokaal.

    • Test elke functie grondig om ervoor te zorgen dat deze werkt zoals verwacht. Deze tests moeten invoer/uitvoer, gebeurtenistriggers en bindingsverificatie bevatten.

      Aanbeveling

      Gebruik deze aangepaste chatmodusprompt om de gemigreerde Azure Functions-code te valideren:

      /LambdaMigration-Phase4-ValidateCode
      
    • Gebruik hulpprogramma's zoals curl- of REST-clientextensies in VS Code om HTTP-aanvragen te verzenden voor door HTTP geactiveerde functies.

    • Voor andere triggers, zoals timers of wachtrijen, moet u ervoor zorgen dat de triggers correct worden geactiveerd en dat de functies worden uitgevoerd zoals verwacht.

  • Prestaties valideren

    • Voer prestatietests uit om de nieuwe Azure Functions-implementatie te vergelijken met de vorige AWS Lambda-implementatie.

    • Bewaak metrische gegevens, zoals reactietijd, uitvoeringstijd en resourceverbruik.

      Aanbeveling

      Gebruik deze aangepaste chatmodusprompt om de infrastructuurconfiguratie te valideren:

      /LambdaMigration-Phase5-ValidateInfra
      
    • Gebruik Application Insights voor bewaking, logboekanalyse en probleemoplossing tijdens de testfase.

  • Problemen oplossen met behulp van de functie Problemen vaststellen en oplossen

    Gebruik de functie Problemen vaststellen en oplossen in Azure Portal om problemen met uw functie-app op te lossen. Dit hulpprogramma biedt een set diagnostische functies waarmee u snel veelvoorkomende problemen kunt identificeren en oplossen, zoals crashes van toepassingen, prestatievermindering en configuratieproblemen. Volg de stappen en aanbevelingen voor begeleide probleemoplossing die het hulpprogramma biedt om problemen op te lossen die u identificeert.

De eindstatus van de gemigreerde workload evalueren

Voordat u resources buiten bedrijf gaat stellen in AWS, moet u er zeker van zijn dat het platform voldoet aan de huidige verwachtingen voor workloads en dat niets het onderhoud van workloads of verdere ontwikkeling blokkeert.

Implementeer en test functies om hun prestaties en juistheid te valideren.

Implementeren in Azure

Aanbeveling

Gebruik deze aangepaste chatmodusprompt om het gevalideerde project in Azure te implementeren:

/LambdaMigration-Phase6-DeployToAzure

Implementeer workloads met behulp van de VS Code-publicatiefunctie . U kunt ook workloads vanaf de opdrachtregel implementeren met behulp van Azure Functions Core Tools of de Azure CLI. Azure DevOps en GitHub Actions maken ook gebruik van One Deploy.

  • Azure Functions Core Tools: Implementeer uw functie-app met behulp van Azure Functions Core Tools met de func azure functionapp publish <FunctionAppName> opdracht.

  • Pijplijnen voor continue integratie en continue implementatie (CI/CD): stel een CI/CD-pijplijn in met behulp van services zoals GitHub Actions, Azure DevOps of een ander CI/CD-hulpprogramma.

Zie Continue levering met behulp van GitHub Actions of Continue levering met Azure Pipelines voor meer informatie.

Voorbeeldmigratiescenario's verkennen

Gebruik de MigrationGetStarted-opslagplaats als sjabloon om te beginnen met uw proof-of-concept. Deze opslagplaats bevat een kant-en-klaar Azure Functions-project met de infrastructuur- en broncodebestanden om u op weg te helpen.

Als u liever Terraform gebruikt, gebruik dan MigrationGetStarted-Terraform.

De prestaties van de toepassing in Azure optimaliseren en bewaken

Nadat u uw workload hebt gemigreerd, raden we u aan om meer functies in Azure te verkennen. Deze functies kunnen u helpen te voldoen aan toekomstige workloadvereisten en helpen hiaten te sluiten.

Application Insights gebruiken voor bewaking en probleemoplossing

Schakel Application Insights in voor uw functie-app om gedetailleerde telemetriegegevens te verzamelen voor bewaking en probleemoplossing. U kunt Application Insights inschakelen via Azure Portal of in het host.json configuratiebestand van de functie-app. Nadat u Application Insights hebt ingeschakeld, kunt u het volgende doen:

  • Telemetriegegevens verzamelen. Application Insights biedt verschillende telemetriegegevens, zoals aanvraaglogboeken, metrische gegevens over prestaties, uitzonderingen en afhankelijkheden.

  • Analyseer logboeken en metrische gegevens. Open het Application Insights-dashboard vanuit Azure Portal om logboeken, metrische gegevens en andere telemetriegegevens te visualiseren en analyseren. Gebruik de ingebouwde hulpprogramma's om aangepaste query's te maken en gegevens te visualiseren om inzicht te krijgen in de prestaties en het gedrag van uw functie-app.

  • Waarschuwingen instellen. Configureer waarschuwingen in Application Insights om u op de hoogte te stellen van kritieke problemen, prestatievermindering of specifieke gebeurtenissen. Deze waarschuwingen helpen u proactief bij het bewaken en snel reageren op problemen.

Optimaliseren voor kosten en prestaties

  • Optimalisatie van schalen en prestaties:

    • Gebruik functies voor automatisch schalen om verschillende workloads efficiënt te verwerken.

    • Optimaliseer functiecode om de prestaties te verbeteren door runtime te verminderen, afhankelijkheden te optimaliseren en efficiënte coderingsprocedures te gebruiken.

    • Implementeer cachestrategieën om herhaalde verwerking en latentie voor veelgebruikte gegevens te verminderen.

  • Kostenbeheer:

    • Gebruik Microsoft Cost Management-hulpprogramma's om uw Azure Functions-kosten te bewaken en te analyseren.

    • Stel budgetterings- en kostenwaarschuwingen in om uitgaven effectief te beheren en te voorspellen.