Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Migration einer serverlosen Workload, die Amazon Web Services (AWS) Lambda zu Azure Functions verwendet, erfordert eine sorgfältige Planung und Implementierung. Dieser Artikel enthält wichtige Anleitungen, die Ihnen helfen:
- Führen Sie einen Ermittlungsprozess für Ihre vorhandene Workload aus.
- Erfahren Sie, wie Sie wichtige Migrationsaktivitäten wie die Vormigrationsplanung und die Workloadbewertung durchführen.
- Bewerten und Optimieren einer migrierten Workload.
Umfang
In diesem Artikel wird die Migration einer AWS Lambda-Instanz zu Azure Functions beschrieben.
In diesem Artikel wird folgendes nicht behandelt:
- Migration zu Ihrer eigenen Containerhostinglösung, z. B. über Azure-Container-Apps.
- Hosting von AWS Lambda-Containern in Azure.
- Grundlegende Ansätze der Azure-Einführung durch Ihre Organisation, wie z. B. Azure-Zielzonen oder andere Themen, die in der Migrationsmethodik des Cloud Adoption Frameworks behandelt werden.
Vergleich der Funktionalität
Dieser Artikel ordnet die Merkmale von AWS Lambda den entsprechenden Funktionen in Azure zu, um die Kompatibilität sicherzustellen.
Von Bedeutung
Sie können die Optimierung in Ihren Migrationsplan einbeziehen, aber Microsoft empfiehlt einen zweistufigen Prozess. Migrieren Sie zuerst "Like-to-like"-Funktionen, und bewerten Sie dann Optimierungsmöglichkeiten in Azure.
Optimierungsbemühungen sollten kontinuierlich sein und über die Änderungskontrollprozesse Ihres Workload-Teams gesteuert werden. Eine Migration, die während einer Migration mehr Funktionen hinzufügt, führt zu Risiken und erweitert den Prozess unnötig.
Arbeitsauslastungsperspektive
Dieser Artikel befasst sich mit der Migration einer AWS Lambda-Workload zu Azure Functions und den allgemeinen Abhängigkeiten für serverlose Workloads. Dieser Prozess kann mehrere Dienste umfassen, da Workloads viele Ressourcen und Prozesse umfassen, um diese Ressourcen zu verwalten. Um eine umfassende Strategie zu haben, müssen Sie die in diesem Artikel vorgestellten Empfehlungen mit einem größeren Plan kombinieren, der die anderen Komponenten und Prozesse in Ihrer Workload enthält.
Durchführung eines Ermittlungsprozesses für Ihre vorhandene Workload
Der erste Schritt besteht darin, einen detaillierten Ermittlungsprozess durchzuführen, um Ihre vorhandene AWS Lambda-Workload zu bewerten. Ziel ist es zu verstehen, welche AWS-Features und -Dienste Ihre Workload benötigt. Kompilieren Sie einen umfassenden Bestand Ihrer AWS Lambda-Funktionen mithilfe von AWS-Tools wie servicespezifische SDKs, APIs, CloudTrail und AWS CLI, um die Workload auf AWS zu bewerten. Sie sollten die folgenden wichtigen Aspekte Ihres AWS Lambda-Inventars verstehen:
- Anwendungsfälle
- Konfigurationen
- Sicherheits- und Netzwerkeinrichtung
- Werkzeuge, Überwachung, Protokollierung und Beobachtbarkeitsmechanismen
- Abhängigkeiten
- Zuverlässigkeitsziele und aktueller Zuverlässigkeitsstatus
- Die Betriebskosten
- Leistungsziele und aktuelle Leistung
Durchführen der Vormigrationsplanung
Bevor Sie mit der Migration Ihrer Workload beginnen, müssen Sie AWS Lambda-Features Azure Functions zuordnen, um Kompatibilität sicherzustellen und einen Migrationsplan zu entwickeln. Anschließend können Sie wichtige Workloads für einen Machbarkeitsnachweis auswählen.
Sie müssen die AWS-Dienste, von denen Lambda abhängig ist, auch den entsprechenden Abhängigkeiten in Azure zuordnen.
Zuordnen von AWS Lambda-Features zu Azure Functions
In den folgenden Tabellen werden AWS Lambda-Konzepte, Ressourcen und Eigenschaften mit ihren entsprechenden Entsprechungen in Azure Functions verglichen, insbesondere mit dem Flex-Verbrauch-Hostingplan.
- Unterstützte Sprachen
- Programmiermodell
- Ereignistrigger und Bindungen
- Erlaubnisse
- Funktions-URL
- Vernetzung
- Beobachtbarkeit und Monitoring
- Skalierung und Parallelität
- Kaltstartschutz
- Preise
- Quellcodespeicher
- Lokale Entwicklung
- Einsatz
- Timeout- und Speicherbeschränkungen
- Verwaltung von Geheimnissen
- Zustandsverwaltung
- Zustandsbehaftete Orchestrierung
- Weitere Unterschiede und Überlegungen
Unterstützte Sprachen
Programmiersprache | Unterstützte AWS Lambda-Versionen | Unterstützte Versionen von Azure-Funktionen |
---|---|---|
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 | Nicht unterstützt | 7.4 |
.NET | .NET 8 | .NET 8, .NET 9, .NET Framework 4.8.1 |
Rubin | 3.2, 3.3 | Benutzerdefinierte Handler |
Go | Betriebssystemsspezifische Runtime | Benutzerdefinierte Handler |
Rost | Betriebssystemsspezifische Runtime | Benutzerdefinierte Handler |
Programmiermodell
Merkmal | AWS Lambda | Azure-Funktionen |
---|---|---|
Auslöser | Integriert mit anderen AWS-Diensten mittels Ereignisquellen. Bietet automatische und programmgesteuerte Methoden zum Verknüpfen von Lambda-Funktionen mit Ereignisquellen. | Eine Funktion mithilfe spezifischer Ereignisse auslösen, wie beispielsweise bei Aktualisierungen in einer Datenbank oder einer neuen Nachricht in einer Warteschlange. Beispielsweise ermöglicht ein Azure Cosmos DB-Trigger Funktionen automatisch auf Einfügungen und Updates in einem Azure Cosmos DB-Container zu reagieren. Diese Aktion ermöglicht die Echtzeitverarbeitung von Datenänderungen. Funktionen sind auch in Azure Event Grid integriert, sodass Ereignisse aus Azure-Diensten wie Azure Storage und Azure Media Services und externen Ereignisquellen verarbeitet werden können. Event Grid dient als zentralisierter, erweiterbarer Ereignisroutingdienst, der Funktionentrigger ergänzt und eine hohe Skalierbarkeit und breite Ereignisquellenabdeckung ermöglicht. |
Bindungen | Hat keine Bindungen. Verwendet AWS-SDKs innerhalb von Lambda-Funktionen, um Interaktionen mit anderen AWS-Diensten manuell zu verwalten. | Bindungen, die als Eingabe oder Ausgabe konfiguriert sind, ermöglichen deklarative Verbindungen mit Diensten, die den Bedarf an expliziten SDK-Code minimieren. Sie können z. B. Bindungen so konfigurieren, dass sie aus Blob Storage lesen, in Azure Cosmos DB schreiben oder E-Mails über SendGrid senden, ohne die Integrationen manuell zu verwalten. |
Ereignistrigger und Bindungen
AWS Lambda-Trigger oder -Dienst | Auslöser für Azure Functions | BESCHREIBUNG |
---|---|---|
API-Gateway: HTTP-Anforderungen | HTTP-Trigger | Mit diesen Triggern können Sie HTTP-Anforderungen direkt verarbeiten. |
Einfacher Warteschlangendienst (SQS) | Azure Queue Storage Trigger oder Azure Service Bus Trigger | Diese Trigger können Nachrichten in Warteschlangen verarbeiten. |
Einfacher Benachrichtigungsdienst (Simple Notification Service, SNS) | Event Grid-Trigger oder Service Bus-Trigger | Diese Trigger ermöglichen die Benachrichtigungsverarbeitung. |
Kinesis (Datenströme) | Event Hubs-Trigger | Diese Trigger nutzen Datenströme. |
DynamoDB (Tabellenänderungen) | Azure Cosmos DB – Änderungsfeedauslöser | Diese Trigger lauschen auf Änderungen in Tabellen. |
CloudWatch Events oder EventBridge Scheduler | Timertrigger | Diese Trigger behandeln geplante oder zeitbasierte Funktionen. |
S3 (Objektereignisse) | Blob Storage-Trigger | Diese Trigger reagieren auf Ereignisse im Blobspeicher. |
Amazon Relational Database Service (RDS) | Azure SQL-Trigger | Diese Trigger reagieren auf Datenbankänderungen. |
Verwaltetes Streaming für Apache Kafka (MSK) | Apache Kafka-Trigger | Diese Trigger reagieren auf Kafka-Themenmeldungen. |
Amazon ElastiCache | Azure Redis-Trigger | Diese Trigger reagieren auf Nachrichten in Redis. |
Amazon MQ | RabbitMQ-Trigger | Diese Trigger reagieren auf Nachrichten in RabbitMQ. |
Erlaubnisse
AWS Lambda | Azure-Funktionen |
---|---|
Die Lambda-Ausführungsrolle gewährt Lambda-Funktionen Berechtigungen für die Interaktion mit anderen AWS-Diensten. Jede Lambda-Funktion verfügt über eine zugeordnete Identitäts- und Zugriffsverwaltungsrolle (IAM), die ihre Berechtigungen bestimmt, während sie ausgeführt wird. | Verwaltete Identitäten stellen eine Identität für Ihre Funktions-App bereit, die es ermöglicht, sich bei anderen Azure-Diensten zu authentifizieren, ohne Anmeldeinformationen im Code zu speichern. Die rollenbasierte Zugriffssteuerung weist der verwalteten Identität in der Microsoft Entra-ID geeignete Rollen zu, um Zugriff auf die benötigten Ressourcen zu gewähren. |
Ressourcenbasierte Richtlinienanweisungen: - AWSLambda_FullAccess bietet vollzugriff auf alle Lambda-Vorgänge, einschließlich Erstellen, Aktualisieren und Löschen von Funktionen. – AWSLambda_ReadOnlyAccess ermöglicht schreibgeschützten Zugriff auf die Ansicht von Lambda-Funktionen und deren Konfigurationen. – Benutzerdefinierte IAM-Richtlinien. |
Ressourcenbasierte integrierte Rollen: – Die Rolle "Besitzer" gewährt vollzugriff, einschließlich der Zugriffsberechtigungsverwaltung. – Die Rolle "Mitwirkender" kann Funktions-Apps erstellen und löschen, Einstellungen konfigurieren und Code bereitstellen. Es kann den Zugriff nicht verwalten. – Die Rolle „Überwachungsleser” kann schreibgeschützten Zugriff auf Überwachungsdaten und -einstellungen gewähren. Sie kann auch benutzerdefinierte Rollen zuweisen. |
Funktions-URL
AWS Lambda | Azure-Funktionen |
---|---|
https://<url-id>.lambda-url.<region>.on.aws |
- <appname>.azurewebsites.net (originaler, globaler Standardhostname) - <appname>-<randomhash>.<Region>.azurewebsites.net (neuer, eindeutiger Standardhostname) |
Vernetzung
AWS Lambda | Azure-Funktionen |
---|---|
Alle Lambda-Funktionen werden sicher in einer standardmäßigen vom System verwalteten virtuellen privaten Cloud (VM) ausgeführt. Sie können Ihre Lambda-Funktion auch so konfigurieren, dass sie auf Ressourcen in einer benutzerdefinierten VPC zugreifen kann. | Funktions-Apps können netzwerksicher sein und auf andere Dienste innerhalb des Netzwerks zugreifen. Der eingehende Netzwerkzugriff kann nur auf eine Firewallliste mit IP-Adressen und auf ein bestimmtes virtuelles Netzwerk über Dienstendpunkte oder private Endpunkte beschränkt werden. Der ausgehende Netzwerkzugriff wird über das Feature für die Integration des virtuellen Netzwerks aktiviert. Die Funktions-App kann den gesamten Datenverkehr auf das Subnetz eines virtuellen Netzwerks beschränken und auch auf andere Dienste innerhalb dieses virtuellen Netzwerks zugreifen. |
Einblick und Überwachung
AWS Lambda | Azure-Funktionen |
---|---|
Amazon CloudWatch hilft bei der Überwachung und Beobachtbarkeit, indem Metriken gesammelt und nachverfolgt, Protokolle aggregiert und analysiert werden, Alarme festgelegt, benutzerdefinierte Dashboards erstellt und automatisierte Antworten auf Änderungen der Ressourcenleistung und -metrik implementiert werden. | Azure Monitor bietet umfassende Überwachung und Beobachtbarkeit für Azure Functions, insbesondere durch die Funktion "Application Insights". Application Insights sammelt Telemetriedaten wie Anforderungsraten, Reaktionszeiten und Fehlerraten. Es visualisiert Anwendungskomponentenbeziehungen, überwacht die Leistung in Echtzeit, protokolliert detaillierte Diagnosen und ermöglicht die benutzerdefinierte Metrikverfolgung. Diese Funktionen tragen dazu bei, die Leistung, Verfügbarkeit und Zuverlässigkeit von Azure-Funktionen aufrechtzuerhalten und gleichzeitig benutzerdefinierte Dashboards, Warnungen und automatisierte Antworten zu aktivieren. |
AWS Lambda generiert Telemetriedaten aus Ihren Funktionsaufrufen und kann diese Daten mithilfe der OpenTelemetry-Semantik exportieren. Sie können Ihre Lambda-Funktionen so konfigurieren, dass diese Telemetriedaten an einen beliebigen OpenTelemetry-kompatiblen Endpunkt gesendet werden. Diese Aktion ermöglicht die Korrelation von Traces und Protokollen, konsistenten, standardbasierten Telemetriedaten und die Integration mit anderen Überwachungstools, die OpenTelemetry unterstützen. | Konfigurieren Sie Ihre Funktionen-App so, dass Protokoll- und Ablaufverfolgungsdaten in einem OpenTelemetry-Format exportiert werden. Sie können Telemetriedaten mithilfe von OpenTelemetry in einen beliebigen kompatiblen Endpunkt exportieren. OpenTelemetry bietet Vorteile wie die Korrelation von Ablaufverfolgungen und Protokollen, konsistente standardbasierte Telemetriedaten und die Integration mit anderen Anbietern. Sie können OpenTelemetry auf Der Ebene der Funktions-App in der Hostkonfiguration und in Ihrem Codeprojekt aktivieren, um den Datenexport aus Dem Funktionscode zu optimieren. Weitere Informationen finden Sie unter Verwenden von OpenTelemetry mit Azure-Funktionen. |
Skalierung und Parallelität
AWS Lambda | Azure-Funktionen |
---|---|
AWS verwendet ein On-Demand-Skalierungsmodell. Skalieren Sie ihren Funktionsvorgang automatisch als Reaktion auf den Bedarf. Die Nebenläufigkeit, also die Anzahl der Anfragen, die von einer Instanz verarbeitet werden, beträgt immer 1. | Instanzen werden basierend auf der Anzahl der eingehenden Ereignisse und der konfigurierten Parallelität für jede Instanz dynamisch hinzugefügt und entfernt. Sie können die Parallelitätseinstellung auf ihren gewünschten Wert konfigurieren. |
Nebenläufigkeit ist immer 1. | Parallelität ist konfigurierbar (>1). |
Unterstützt die Skalierung auf 0. | Unterstützt die Skalierung auf 0. |
Kaltstartschutz
AWS Lambda | Azure-Funktionen |
---|---|
Die bereitgestellte Parallelität reduziert die Latenz und sorgt für vorhersehbare Funktionsleistung, indem eine angeforderte Anzahl von Funktionsinstanzen vorab initialisiert wird. Vorgesehene Parallelität eignet sich für Anwendungen, die empfindlich auf Latenz sind, und wird separat von der Standardparallelität abgerechnet. | Mit Funktions-Apps können Sie die Parallelität für jede Instanz konfigurieren, die die Skalierung steuert. Mehrere Aufträge können in derselben Instanz der App parallel ausgeführt werden, und nachfolgende Aufträge in der Instanz führen nicht zum anfänglichen Kaltstart. Funktions-Apps haben auch immer einsatzbereite Instanzen. Kunden können eine Anzahl vorgewärmter Instanzen angeben, um die Kaltstartlatenz zu beseitigen und eine konsistente Leistung sicherzustellen. Funktions-Apps lassen sich je nach Bedarf auf weitere Instanzen aufskalieren, wobei die immer verfügbaren Instanzen erhalten bleiben. |
Reservierte Parallelität gibt die maximale Anzahl gleichzeitiger Instanzen an, die eine Funktion aufweisen kann. Dieser Grenzwert stellt sicher, dass ein Teil des Parallelitätskontingents Ihres Kontos ausschließlich für diese Funktion reserviert wird. AWS Lambda skaliert dynamisch, um eingehende Anforderungen zu verarbeiten, auch wenn reservierte Parallelität festgelegt ist, solange die Anforderungen den angegebenen reservierten Parallelitätsgrenzwert nicht überschreiten. Die untere Grenze für reservierte Parallelität in AWS Lambda ist 1. Die obere Grenze für die reservierte Parallelität in AWS Lambda wird durch das regionale Parallelitätskontingent des AWS-Kontos bestimmt. Dieser Grenzwert beträgt standardmäßig 1.000 gleichzeitige Vorgänge für jede Region. | Azure Functions verfügt nicht über ein entsprechendes Feature zur reservierten Parallelität. Um ähnliche Funktionen zu erzielen, isolieren Sie bestimmte Funktionen in separate Funktions-Apps, und legen Sie die maximale Skalierungsgrenze für jede App fest. Azure Functions skaliert dynamisch nach außen, indem es weitere Instanzen hinzufügt, und skaliert nach innen, indem es Instanzen entfernt, und bleibt dabei innerhalb der festgelegten Skalierungsgrenzen. Standardmäßig beginnen Apps, die in einem Flex-Verbrauchsplan ausgeführt werden, mit einem konfigurierbaren Grenzwert von insgesamt 100 Instanzen. Der niedrigste maximal zulässige Instanzanzahlswert ist 40, und der höchste unterstützte maximale Instanzenanzahlswert beträgt 1.000. Regionale Abonnementspeicherkontingente können auch einschränken, wie viele Funktions-Apps skaliert werden können, aber Sie können dieses Kontingent durch Aufrufen der Unterstützung erhöhen. |
Preisgestaltung
AWS Lambda | Azure-Funktionen |
---|---|
– Nutzungsbasierte Zahlung für die Gesamtzahl der Aufrufe und für die verbrauchten GB pro Sekunde für jede Instanz (bei einer festen Nebenläufigkeit von 1) – Inkremente von 1 ms - 400.000 Gbps kostenloser Stufe |
- Bezahlen Sie pro Verwendung für die Gesamtzahl der Aufrufe und für die GB/s jeder Instanz (mit konfigurierbaren gleichzeitigen Aufrufen) – Inkremente von 100 ms – 100.000 GBit/s Free-Tarif - Verbrauchsbasierte Kosten |
Quellcodespeicher
AWS Lambda | Azure-Funktionen |
---|---|
AWS Lambda verwaltet den Speicher Ihres Funktionscodes in einem eigenen verwalteten Speichersystem. Sie müssen keinen weiteren Speicher bereitstellen. | Funktionen erfordern einen vom Kunden bereitgestellten Blob Storage-Container, um das Bereitstellungspaket zu verwalten, das den Code Ihrer App enthält. Sie können die Einstellungen für die Verwendung desselben oder eines anderen Speicherkontos für Bereitstellungen konfigurieren und Authentifizierungsmethoden für den Zugriff auf den Container verwalten. |
Lokale Entwicklung
AWS Lambda-Funktion | Das Azure Functions-Feature |
---|---|
- SAM CLI - LocalStack |
– Azure Functions Core Tools - Visual Studio Code - Visual Studio - GitHub Codespaces - VSCode.dev – Maven - Code und lokales Testen von Azure Functions |
Einsatz
Merkmal | AWS Lambda | Azure-Funktionen |
---|---|---|
Bereitstellungspaket | - ZIP-Datei - Containerabbild |
ZIP-Datei (verwenden Sie für die Bereitstellung von Containerimages die dedizierte oder Premium-SKU.) |
ZIP-Dateigröße (Konsole) | 50 MB maximal | maximal 500 MB für ZIP-Bereitstellung |
ZIP-Dateigröße (CLI/SDK) | maximal 250 MB für ZIP-Bereitstellung, maximal 500 MB für entpackt | maximal 500 MB für ZIP-Bereitstellung |
Größe des Containerimage | maximal 10 GB | Containerunterstützung mit flexiblem Speicher über Azure |
Umgang mit großen Artefakten | Verwenden Sie Containerimages für größere Bereitstellungen. | Fügen Sie Blob Storage- oder Azure Files-Freigaben an, um auf große Dateien aus der App zuzugreifen. |
Packen allgemeiner Abhängigkeiten in Funktionen | Schichten | Bereitstellung von ZIP-Dateien, auf Abruf aus dem Speicher oder Containern (nur ACA, dedizierte, EP-SKUs) |
Blau-Grün-Bereitstellung oder Funktionsversionsverwaltung | Verwenden Sie Funktionsqualifizierer, um auf einen bestimmten Status Ihrer Funktion zu verweisen, indem Sie entweder eine Versionsnummer oder einen Aliasnamen verwenden. Qualifizierer ermöglichen Versionsverwaltung und Strategien für schrittweise Bereitstellung. | Verwenden Sie kontinuierliche Integration und kontinuierliche Bereitstellungssysteme für blaugrüne Bereitstellungen. |
Timeout- und Speicherbeschränkungen
Merkmal | AWS Lambda-Grenzwerte | Azure Functions-Grenzwerte |
---|---|---|
Ausführungstimeout | 900 Sekunden (15 Minuten) | Das Standardtimeout beträgt 30 Minuten. Der maximale Timeout ist ungebunden. Die an eine Funktionsausführung übergebene Karenzzeit beträgt jedoch 60 Minuten während der Skalierung und 10 Minuten während Plattformupdates. Weitere Informationen finden Sie unter Funktions-App-Timeoutdauer. |
Konfigurierbarer Speicher | 128 MB bis 10.240 MB, in Schritten von 64 MB | Funktionen unterstützen 2-GB- und 4-GB-Instanzengrößen . Jede Region in einem bestimmten Abonnement hat eine Speichergrenze von 512.000 MB für alle Instanzen von Apps, die Sie durch Aufrufen der Unterstützung erhöhen können. Die Gesamtspeicherauslastung aller Instanzen in allen Funktions-Apps in einer Region muss innerhalb dieses Kontingents bleiben. Obwohl 2 GB und 4 GB die Instanzengrößenoptionen sind, kann die Parallelität für jede Instanz höher als 1 sein. Daher kann eine einzelne Instanz je nach Konfiguration mehrere gleichzeitige Ausführungen verarbeiten. Das geeignete Konfigurieren der Parallelität kann dazu beitragen, die Ressourcennutzung zu optimieren und die Leistung zu verwalten. Durch das Ausgleichen der Speicherzuweisung und Parallelitätseinstellungen können Sie die Ressourcen, die Ihren Funktions-Apps zugeordnet sind, effektiv verwalten und eine effiziente Leistung und Kostenkontrolle gewährleisten. Weitere Informationen finden Sie unter "Speicherkontingente für regionale Abonnements". |
Verwaltung von Geheimnissen
AWS Lambda | Azure-Funktionen |
---|---|
MIT AWS Secrets Manager können Sie geheime Schlüssel wie Datenbankanmeldeinformationen, API-Schlüssel und andere vertrauliche Informationen speichern, verwalten und abrufen. Lambda-Funktionen können geheime Schlüssel mithilfe des AWS SDK abrufen. | Es wird empfohlen, geheimnislose Ansätze wie verwaltete Identitäten zu verwenden, um einen sicheren Zugriff auf Azure-Ressourcen ohne fest codierte Anmeldeinformationen zu ermöglichen. Wenn geheime Schlüssel erforderlich sind, z. B. für Partner- oder Legacysysteme, bietet Azure Key Vault eine sichere Lösung zum Speichern und Verwalten von Geheimschlüsseln, Schlüsseln und Zertifikaten. |
AWS Systems Manager Parameter Store ist ein Dienst, der Konfigurationsdaten und geheime Schlüssel speichert. Parameter können mithilfe von AWS KMS verschlüsselt und von Lambda-Funktionen mithilfe des AWS SDK abgerufen werden. Lambda-Funktionen können Konfigurationseinstellungen in Umgebungsvariablen speichern. Vertrauliche Daten können mit einem KMS-Schlüssel für den sicheren Zugriff verschlüsselt werden. |
Azure Functions verwendet Anwendungseinstellungen zum Speichern von Konfigurationsdaten. Diese Einstellungen werden direkt Umgebungsvariablen zugeordnet, um die Benutzerfreundlichkeit innerhalb der Funktion zu erleichtern. Diese Einstellungen können verschlüsselt und sicher in der Azure App Service-Konfiguration gespeichert werden. Für erweiterte Szenarien bietet die Azure App-Konfiguration robuste Features für die Verwaltung mehrerer Konfigurationen. Sie ermöglicht das Kennzeichnen von Features und unterstützt dynamische Updates über Dienste hinweg. |
Zustandsverwaltung
AWS Lambda | Azure-Funktionen |
---|---|
AWS Lambda verarbeitet einfache Zustandsverwaltung mithilfe von Diensten wie Amazon S3 für Objektspeicherung, Amazon DynamoDB für schnelle und skalierbare NoSQL-Zustandsspeicherung und Amazon SQS für die Behandlung von Nachrichtenwarteschlangen. Diese Dienste stellen die Datenpersistenz und Konsistenz über Lambda-Funktionsausführungen hinweg sicher. | Azure Functions verwendet AzureWebJobsStorage zur Zustandsverwaltung, indem es Bindungen und Trigger mit Azure Storage-Diensten wie Blob Storage, Warteschlangenspeicher und Tabellenspeicher aktiviert. Sie ermöglicht Funktionen das einfache Lesen und Schreiben des Zustands. Für komplexere Zustandsverwaltung bietet Durable Functions erweiterte Workflow-Orchestrierungs- und Zustandspersistenzfunktionen mithilfe von Azure Storage. |
Zustandsbehaftete Orchestrierung
AWS Lambda | Azure-Funktionen |
---|---|
Keine Orchestrierung im nativen Zustand. Verwenden Sie AWS-Schrittfunktionen für Workflows. | Dauerhafte Funktionen helfen bei der komplexen Zustandsverwaltung, indem dauerhafte Workflow-Orchestrierung und zustandsbehaftete Entitäten bereitgestellt werden. Es ermöglicht lang andauernde Vorgänge, automatische Prüfpunkte und zuverlässige Speicherung des Zustands. Mit diesen Features können komplexe Workflows erstellt werden, um Fehlertoleranz und Skalierbarkeit für zustandsbehaftete Anwendungen zu gewährleisten. |
Weitere Unterschiede und Überlegungen
Merkmal | AWS Lambda | Azure-Funktionen |
---|---|---|
Gruppieren von Funktionen | Jede AWS Lambda-Funktion ist eine unabhängige Entität. | Eine Funktions-App dient als Container für mehrere Funktionen. Sie stellt einen freigegebenen Ausführungskontext und eine Konfiguration für die darin enthaltenen Funktionen bereit. Das Behandeln mehrerer Funktionen als einzelne Entität vereinfacht die Bereitstellung und Verwaltung. Funktionen verwenden auch eine Skalierungsstrategie pro Funktion, bei der jede Funktion unabhängig skaliert wird, mit Ausnahme von HTTP-, Blob Storage- und Durable Functions-Triggern. Diese ausgelösten Funktionen werden in ihren eigenen Gruppen skaliert. |
Benutzerdefinierte Domänen | Aktiviert über das API-Gateway | Sie können benutzerdefinierte Domänen direkt in einer Funktions-App oder in Azure API Management konfigurieren. |
Benutzerdefinierte Containerunterstützung | Unterstützt benutzerdefinierte Container über Lambda-Container-Image | Azure Functions unterstützt benutzerdefinierte Container, die in einer Container-Apps-Umgebung ausgeführt werden. |
Erstellen eines Migrationsplans
Wählen Sie wichtige Workloads für einen Machbarkeitsnachweis aus.
Wählen Sie zunächst eine bis zwei mittelgroße, nicht kritische Workloads aus Ihrem Gesamtbestand aus. Diese Workloads dienen als Grundlage für Ihre Machbarkeitsstudie zur Migration. Sie können den Prozess testen und potenzielle Herausforderungen erkennen, ohne eine erhebliche Unterbrechung Ihres Betriebs zu riskieren.
Testen Sie iterativ, und sammeln Sie Feedback.
Verwenden Sie den Machbarkeitsnachweis, um Feedback zu sammeln, Lücken zu identifizieren und den Prozess zu optimieren, bevor Sie auf größere Workloads skalieren. Mit diesem iterativen Ansatz wird sichergestellt, dass Sie durch den Wechsel zur vollständigen Migration potenzielle Herausforderungen bewältigen und den Prozess verfeinern.
Erstellen der Migrationsressourcen
Dieser Schritt ist eine Übergangsentwicklungsphase. In dieser Phase erstellen Sie Quellcode, Infrastruktur-als-Code (IaC)-Vorlagen und Bereitstellungspipelines, um die Workload in Azure darzustellen. Sie müssen Funktionscode für Kompatibilität und bewährte Methoden anpassen, bevor Sie die Migration ausführen können.
- Anpassen von Funktionscode, Konfigurationsdateien und Infrastruktur als Codedateien
- Anpassen von Konfigurationseinstellungen
- Generieren von IaC-Dateien
- Verwenden von Tools für die Umgestaltung
Anpassen von Funktionscode, Konfigurationsdateien und Infrastruktur als Codedateien
So aktualisieren Sie Code für Azure Functions-Laufzeitanforderungen:
Ändern Sie Ihren Code so, dass er dem Programmiermodell von Azure Functions entspricht. Passen Sie beispielsweise Ihre Funktionssignaturen an das Format an, das Azure Functions erfordert. Weitere Informationen zum Funktionsdefinitions- und Ausführungskontext finden Sie in den Entwicklerhandbüchern für Azure Functions.
Verwenden Sie das Azure Functions-Erweiterungsbundle , um verschiedene Bindungen und Trigger zu verarbeiten, die aws-Diensten ähneln. Für .NET-Anwendungen sollten Sie die entsprechenden NuGet-Pakete anstelle des Erweiterungsbundles verwenden.
Verwenden Sie das Erweiterungsbundle, um sie in andere Azure-Dienste wie Azure Storage, Azure Service Bus und Azure Cosmos DB zu integrieren, ohne jede Bindung über SDKs manuell konfigurieren zu müssen. Weitere Informationen finden Sie unter Verbinden von Funktionen mit Azure-Diensten mithilfe von Bindungen und Azure Functions-Bindungsausdrucksmustern.
Die folgenden Codeausschnitte sind Beispiele für gängigen SDK-Code. Der AWS Lambda-Code ist den entsprechenden Triggern, Bindungen oder SDK-Codeausschnitten in Azure Functions zugeordnet.
Lesen von Amazon S3 im Vergleich zu 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());
};
Azure Functions-Code (Trigger)
import { app } from '@azure/functions';
app.storageblob('blobTrigger', {
path: 'my-container/{blobName}',
connection: 'AzureWebJobsStorage',
}, async (context, myBlob) => {
context.log(`Blob content:
${myBlob.toString()}`);
});
Schreiben in Amazon Simple Queue Service (SQS) im Vergleich zum 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();
};
Azure Functions-Code (Trigger)
import { app } from '@azure/functions';
app.queue('queueTrigger', {
queueName: 'myqueue-items',
connection: 'AzureWebJobsStorage',
}, async (context, queueMessage) => {
context.log(`Queue message:
${queueMessage}`);
});
Schreiben zu DynamoDB im Vergleich zu 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);
};
Azure Functions-Code (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-Ereignisse im Vergleich zu einem Azure-Timertrigger
AWS Lambda-Code (SDK)
exports.handler = async (event) => {
console.log('Scheduled event:', event);
};
Azure Functions-Code (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) im Vergleich zu einem 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();
};
Azure Functions-Code (Trigger)
import { app } from '@azure/functions';
app.eventGrid('eventGridTrigger', {},
async (context, eventGridEvent) => {
context.log(`Event Grid event:
${JSON.stringify(eventGridEvent)}`);
});
Amazon Kinesis im Vergleich zu einem 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);
};
Azure Functions-Code (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}`);
});
});
Sehen Sie sich die folgenden GitHub-Repositorys an, um AWS Lambda-Code und Azure Functions-Code zu vergleichen:
- AWS Lambda-Code
- Azure Functions-Code
- Azure-Beispiel-Repository, das Starter-, IaC- und End-to-End-Beispiele für Azure Functions enthält
Anpassen von Konfigurationseinstellungen
Stellen Sie sicher, dass die Timeout- und Speichereinstellungen Ihrer Funktion mit Azure-Funktionen kompatibel sind. Weitere Informationen zu konfigurierbaren Einstellungen finden Sie unter host.json Referenz für Azure Functions.
Befolgen Sie die empfohlenen bewährten Methoden für Berechtigungen, Zugriff, Netzwerk und Bereitstellungskonfigurationen.
Konfigurieren von Berechtigungen
Befolgen Sie bewährte Methoden, wenn Sie Berechtigungen für Ihre Funktions-Apps einrichten. Weitere Informationen finden Sie unter Konfigurieren Ihrer Funktions-App und ihres Speicherkontos mit verwalteter Identität.
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}'
}
}
Weitere Informationen finden Sie unter rbac.bicep.
Konfigurieren des Netzwerkzugriffs
Azure Functions unterstützt die Integration virtueller Netzwerke, wodurch Ihre Funktions-App Zugriff auf Ressourcen in Ihrem virtuellen Netzwerk erhält. Nach der Integration leitet Ihre App ausgehenden Datenverkehr über das virtuelle Netzwerk weiter. Anschließend kann Ihre App auf private Endpunkte oder Ressourcen zugreifen, indem Sie Regeln verwenden, die nur Datenverkehr von bestimmten Subnetzen zulassen. Wenn es sich bei dem Ziel um eine IP-Adresse außerhalb des virtuellen Netzwerks handelt, handelt es sich bei der Quell-IP-Adresse um eine der Adressen, die in den Eigenschaften Ihrer App aufgeführt sind, es sei denn, Sie konfigurieren ein NAT-Gateway.
Wenn Sie die Integration virtueller Netzwerke für Ihre Funktions-Apps aktivieren, befolgen Sie die bewährten Methoden in TSG für die Integration virtueller Netzwerke für Web-Apps und Funktions-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
}
}
Weitere Informationen finden Sie unter VNet.bicep und storage-PrivateEndpoint.bicep.
Konfigurieren von Bereitstellungseinstellungen
Bereitstellungen folgen einem einzigen Pfad. Nachdem Sie den Projektcode erstellt und in ein Anwendungspaket gezippt haben, stellen Sie ihn in einem Blob Storage-Container bereit. Wenn sie gestartet wird, ruft Ihre App das Paket ab und führt den Funktionscode daraus aus. Standardmäßig dient dasselbe Speicherkonto, das interne Hostmetadaten speichert, wie zum Beispiel AzureWebJobsStorage
, auch als Bereitstellungscontainer. Sie können jedoch ein alternatives Speicherkonto verwenden oder Ihre bevorzugte Authentifizierungsmethode auswählen, indem Sie die Bereitstellungseinstellungen Ihrer App konfigurieren. Weitere Informationen finden Sie unter Bereitstellungstechnologiedetails und Konfigurieren von Bereitstellungseinstellungen.
Generieren von IaC-Dateien
Verwenden Sie Tools wie Bicep, Azure Resource Manager-Vorlagen oder Terraform, um IaC-Dateien zum Bereitstellen von Azure-Ressourcen zu erstellen.
Definieren Sie Ressourcen wie Azure-Funktionen, Speicherkonten und Netzwerkkomponenten in Ihren IaC-Dateien.
Verwenden Sie dieses IaC-Beispiel-Repository für Beispiele, die Azure Functions-Empfehlungen und bewährte Methoden verwenden.
Verwenden von Tools für das Refactoring
Verwenden Sie Tools wie GitHub Copilot in VS Code, um Hilfe bei der Codeumgestaltung, der manuellen Umgestaltung für bestimmte Änderungen oder anderen Migrationshilfen zu erhalten.
Hinweis
Verwenden Sie den Agent-Modus in GitHub Copilot in VS Code.
Die folgenden Artikel enthalten spezifische Beispiele und detaillierte Schritte zur Erleichterung des Migrationsprozesses:
Entwickeln eines schrittweisen Prozesses für die Day-0-Migration
Entwickeln Sie Failover- und Failbackstrategien für Ihre Migration, und testen Sie sie gründlich in einer Vorproduktionsumgebung. Es wird empfohlen, End-to-End-Tests durchzuführen, bevor Sie schließlich von AWS Lambda zu Azure Functions wechseln.
Überprüfen der Funktionalität
Testen Sie jede Funktion sorgfältig, um sicherzustellen, dass sie erwartungsgemäß funktioniert. Diese Tests sollten Eingabe-/Ausgabe-, Ereignistrigger- und Bindungsüberprüfungen umfassen.
Verwenden Sie Tools wie curl- oder REST-Clienterweiterungen in VS Code, um HTTP-Anforderungen für HTTP-ausgelöste Funktionen zu senden.
Stellen Sie bei anderen Triggern wie Timern oder Warteschlangen sicher, dass die Trigger ordnungsgemäß ausgelöst werden und die Funktionen wie erwartet ausgeführt werden.
Überprüfen der Leistung
Führen Sie Leistungstests durch, um die neue Azure Functions-Bereitstellung mit der vorherigen AWS Lambda-Bereitstellung zu vergleichen.
Überwachen Sie Metriken wie Antwortzeit, Laufzeit und Ressourcenverbrauch.
Verwenden Sie Application Insights zur Überwachung, Protokollanalyse und Problembehandlung während der Testphase.
Problembehandlung mithilfe des Features "Diagnostizieren und Beheben von Problemen"
Verwenden Sie das Feature "Diagnostizieren und Lösen von Problemen " im Azure-Portal, um Ihre Funktions-App zu beheben. Dieses Tool bietet eine Reihe von Diagnosefeatures, mit denen Sie häufige Probleme wie Anwendungsabstürzen, Leistungsbeeinträchtigungen und Konfigurationsprobleme schnell erkennen und beheben können. Führen Sie die geführten Schritte zur Problembehandlung und Empfehlungen aus, die das Tool bereitstellt, um Probleme zu beheben, die Sie identifizieren.
Auswertung des Endzustands der migrierten Arbeitslast
Bevor Sie Ressourcen in AWS außer Betrieb setzen, müssen Sie sicher sein, dass die Plattform die aktuellen Workload-Erwartungen erfüllt und dass nichts die Workloadwartung oder weiterentwicklung blockiert.
Stellen Sie Funktionen bereit, und testen Sie sie, um ihre Leistung und Korrektheit zu überprüfen.
In Azure bereitstellen
Stellen Sie Workloads bereit, indem Sie die VS Code-Veröffentlichungsfunktion verwenden. Sie können Workloads auch über die Befehlszeile bereitstellen, indem Sie Azure Functions Core Tools oder die Azure CLI verwenden. Azure DevOps - und GitHub-Aktionen verwenden auch One Deploy.
Azure Functions Core Tools: Stellen Sie Ihre Funktions-App mithilfe von Azure Functions Core Tools mit dem
func azure functionapp publish <FunctionAppName>
Befehl bereit.CI/CD-Pipelines (Continuous Integration und Continuous Delivery): Richten Sie eine CI/CD-Pipeline mit Diensten wie GitHub Actions, Azure DevOps oder anderen CI/CD-Tools ein.
Weitere Informationen finden Sie unter "Kontinuierliche Übermittlung" mithilfe von GitHub-Aktionen oder der kontinuierlichen Übermittlung mit Azure-Pipelines.
Erkunden von Beispielmigrationsszenarien
Verwenden Sie das MigrationGetStarted-Repository als Vorlage, um den Machbarkeitsnachweis zu beginnen. Dieses Repository enthält ein sofort einsatzbereites Azure Functions-Projekt, das über die Infrastruktur- und Quellcodedateien verfügt, die Ihnen bei den ersten Schritten helfen.
Wenn Sie Terraform bevorzugen, verwenden Sie stattdessen MigrationGetStarted-Terraform .
Optimieren und Überwachen der Leistung der Anwendung in Azure
Nachdem Sie Ihre Workload migriert haben, empfiehlt es sich, weitere Features in Azure zu erkunden. Diese Features können Ihnen helfen, zukünftige Workloadanforderungen zu erfüllen und Lücken zu schließen.
Verwenden von Application Insights zur Überwachung und Problembehandlung
Aktivieren Sie Application Insights für Ihre Funktions-App, um detaillierte Telemetriedaten zur Überwachung und Problembehandlung zu sammeln. Sie können Application Insights über das Azure-Portal oder in der host.json Konfigurationsdatei der Funktions-App aktivieren. Nachdem Sie Application Insights aktiviert haben, können Sie:
Sammeln von Telemetriedaten. Application Insights bietet verschiedene Telemetriedaten wie Anforderungsprotokolle, Leistungsmetriken, Ausnahmen und Abhängigkeiten.
Analysieren Sie Protokolle und Metriken. Greifen Sie über das Azure-Portal auf das Application Insights-Dashboard zu, um Protokolle, Metriken und andere Telemetriedaten zu visualisieren und zu analysieren. Verwenden Sie die integrierten Tools, um benutzerdefinierte Abfragen zu erstellen und Daten zu visualisieren, um Einblicke in die Leistung und das Verhalten Ihrer Funktions-App zu erhalten.
Einrichten von Warnungen. Konfigurieren Sie Warnungen in Application Insights, um Sie über kritische Probleme, Leistungsbeeinträchtigungen oder bestimmte Ereignisse zu informieren. Diese Warnungen helfen Ihnen dabei, Probleme proaktiv zu überwachen und schnell zu reagieren.
Optimieren für Kosten und Leistung
Skalierungs- und Leistungsoptimierung:
Verwenden Sie automatische Skalierungsfeatures, um unterschiedliche Workloads effizient zu verarbeiten.
Optimieren Sie Funktionscode, um die Leistung zu verbessern, indem Sie die Laufzeit reduzieren, Abhängigkeiten optimieren und effiziente Codierungsmethoden verwenden.
Implementieren Sie Zwischenspeicherungsstrategien, um wiederholte Verarbeitung und Latenz für häufig aufgerufene Daten zu reduzieren.
Kostenmanagement:
Verwenden Sie Microsoft Cost Management-Tools , um Ihre Azure Functions-Kosten zu überwachen und zu analysieren.
Richten Sie Budgetierungs- und Kostenwarnungen ein, um Ausgaben effektiv zu verwalten und vorherzusagen.