Udostępnij za pomocą


Migrowanie obciążeń lambda platformy AWS do usługi Azure Functions

Migrowanie bezserwerowego obciążenia korzystającego z usługi Amazon Web Services (AWS) lambda do usługi Azure Functions wymaga starannego planowania i implementacji. Ten artykuł zawiera podstawowe wskazówki ułatwiające:

  • Przeprowadź proces odkrywania w istniejącym obciążeniu pracą.
  • Dowiedz się, jak wykonywać kluczowe działania związane z migracją, takie jak planowanie przed migracją i ocena obciążenia.
  • Oceń i zoptymalizuj zmigrowane obciążenie.

Scope

W tym artykule opisano migrację instancji AWS Lambda do usługi Azure Functions.

Ten artykuł nie dotyczy:

  • Migracja do własnego rozwiązania do hostingu kontenerów, takiego jak za pośrednictwem usługi Azure Container Apps.
  • Hostowanie kontenerów lambda platformy AWS na platformie Azure.
  • Podstawowe podejścia wdrażania platformy Azure przez organizację, takie jak strefy docelowe platformy Azure lub inne tematy omówione w metodologii migracji przewodnika Cloud Adoption Framework.

Migracja niestandardowego trybu czatu

Aby ułatwić migrowanie aplikacji lambda platformy AWS na platformę Azure przy użyciu programu Visual Studio Code, usługa Azure Functions udostępnia niestandardowy tryb czatu w narzędziu GitHub Copilot. Wykonaj następujące kroki, aby dodać niestandardowy tryb czatu LambdaToFunctionMigration do projektu w programie Visual Studio Code:

  1. Jeśli nie masz jeszcze rozszerzenia GitHub Copilot dla programu Azure Visual Studio Code, zainstaluj go teraz.

  2. Otwórz projekt Lambda jako obszar roboczy w programie Visual Studio Code.

  3. Uruchom ten monit w trybie agenta w narzędziu GitHub Copilot:

    Help me migrate my Lambda app to Azure
    
  4. Po wyświetleniu monitu w obszarze powiadomień wybierz pozycję Zainstaluj , aby dodać niestandardowy tryb czatu LambdaToFunctionMigration do projektu.

Teraz możesz używać podpowiedzi prowadzących zdefiniowanych w tym niestandardowym czacie na każdym etapie migracji. Zacznij wpisywać /LambdaMigration w czacie, aby wyświetlić pełną listę dostępnych poleceń.

Porównanie funkcji

Ten artykuł mapuje funkcje lambda platformy AWS na odpowiedniki usługi Azure Functions, aby zapewnić zgodność.

Ważne

Możesz uwzględnić optymalizację w planie migracji, ale firma Microsoft zaleca proces dwuetapowy. Najpierw przeprowadź migrację funkcji "like-to-like", a następnie oceń możliwości optymalizacji na platformie Azure.

Działania związane z optymalizacją powinny być ciągłe i przeprowadzane w ramach procesów kontroli zmian zespołu zarządzającego obciążeniami. Migracja, która dodaje więcej możliwości podczas migracji, wiąże się z ryzykiem i niepotrzebnie rozszerza proces.

Perspektywa obciążenia

W tym artykule opisano sposób migrowania obciążenia lambda platformy AWS do usługi Azure Functions i typowych zależności dla obciążeń bezserwerowych. Ten proces może obejmować kilka usług, ponieważ obciążenia składają się z wielu zasobów i procesów do zarządzania tymi zasobami. Aby uzyskać kompleksową strategię, należy połączyć zalecenia przedstawione w tym artykule z większym planem obejmującym inne składniki i procesy w obciążeniu.

Przeprowadź proces identyfikacji w istniejącym obciążeniu pracą

Pierwszym krokiem jest przeprowadzenie szczegółowego procesu odnajdywania w celu oceny istniejącego obciążenia usługi AWS Lambda. Celem jest zrozumienie, na jakich funkcjach i usługach platformy AWS opiera się obciążenie. Skompiluj kompleksowy spis funkcji AWS Lambda przy użyciu narzędzi AWS, takich jak zestawy SDK specyficzne dla usługi, interfejsy API, CloudTrail i AWS CLI, aby ocenić przebieg pracy na platformie AWS. Należy zapoznać się z następującymi kluczowymi aspektami spisu usługi AWS Lambda:

  • Przypadki użycia
  • Konfiguracje
  • Konfiguracje zabezpieczeń i sieci
  • Narzędzia, monitorowanie, rejestrowanie i mechanizmy obserwacji
  • Zależności
  • Cele niezawodności i bieżący stan niezawodności
  • Koszt posiadania
  • Cele wydajności i bieżąca wydajność

Wskazówka

Użyj tego monitu niestandardowego trybu czatu, aby wygenerować raport ewaluacyjny dla konfiguracji AWS Lambda.

/LambdaMigration-Phase1-AssessLambdaProject

Przeprowadzenie planowania przed migracją

Przed rozpoczęciem migracji obciążenia należy zamapować funkcje lambda platformy AWS na usługę Azure Functions, aby zapewnić zgodność i opracowanie planu migracji. Następnie możesz wybrać kluczowe obciążenia w celu weryfikacji koncepcji.

Należy również zamapować usługi AWS , od których zależy lambda, do równoważnych zależności na platformie Azure.

Przypisz cechy AWS Lambda do funkcji Azure Functions

W poniższych tabelach porównano pojęcia, zasoby i właściwości usługi AWS Lambda z odpowiadającymi im odpowiednikami w usłudze Azure Functions, w szczególności w planie hostingu Flex Consumption.

Obsługiwane języki

Język programowania Obsługiwane wersje platformy AWS Lambda Obsługiwane wersje usługi 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 Niewspierane 7,4
.NET .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Ruby 3.2, 3.3 Niestandardowe procedury obsługi
Go Środowisko uruchomieniowe tylko systemu operacyjnego Niestandardowe procedury obsługi
Rust Środowisko uruchomieniowe tylko systemu operacyjnego Niestandardowe procedury obsługi

Model programowania

Funkcja AWS Lambda Azure Functions
Wyzwalaczy Integruje się z innymi usługami AWS za pośrednictwem źródeł zdarzeń. Zapewnia automatyczne i programowe sposoby łączenia funkcji lambda ze źródłami zdarzeń. Wyzwala funkcję na podstawie określonych zdarzeń, takich jak aktualizacje w bazie danych lub nowy komunikat w kolejce. Na przykład wyzwalacz usługi Azure Cosmos DB umożliwia funkcjom automatyczne reagowanie na wstawiania i aktualizacji w kontenerze usługi Azure Cosmos DB. Ta akcja umożliwia przetwarzanie zmian danych w czasie rzeczywistym.

Funkcje integrują się również z usługą Azure Event Grid, dzięki czemu mogą przetwarzać zdarzenia z usług platformy Azure, takich jak Azure Storage i Azure Media Services, oraz zewnętrzne źródła zdarzeń. Usługa Event Grid służy jako scentralizowana, rozszerzalna usługa routingu zdarzeń, która uzupełnia wyzwalacze usługi Functions i zapewnia wysoką skalowalność i szerokie pokrycie źródła zdarzeń.
Powiązania Nie ma powiązań. Używa zestawów SDK platformy AWS w funkcjach Lambda do ręcznego zarządzania interakcjami z innymi usługami AWS. Powiązania, skonfigurowane jako dane wejściowe lub wyjściowe, umożliwiają deklaratywne połączenia z usługami, co minimalizuje potrzebę jawnego kodu zestawu SDK. Można na przykład skonfigurować powiązania do odczytu z usługi Blob Storage, zapisu w usłudze Azure Cosmos DB lub wysyłania wiadomości e-mail za pośrednictwem usługi SendGrid bez ręcznego zarządzania integracją.

Wyzwalacze i powiązania zdarzeń

Wyzwalacz lub usługa lambda platformy AWS Wyzwalacz usługi Azure Functions Opis
Brama interfejsu API: żądania HTTP Wyzwalacz HTTP Te wyzwalacze umożliwiają bezpośrednie obsługiwanie żądań HTTP.
Simple Queue Service (SQS) Wyzwalacz usługi Azure Queue Storage lub wyzwalacz usługi Azure Service Bus Te wyzwalacze mogą przetwarzać komunikaty w kolejkach.
Prosta usługa powiadomień (SNS) Wyzwalacz usługi Event Grid lub wyzwalacz usługi Service Bus Te wyzwalacze umożliwiają przetwarzanie powiadomień.
Kinesis (strumienie danych) Wyzwalacz usługi Event Hubs Te wyzwalacze konsumują strumienie danych.
DynamoDB (zmiany tabeli) Wyzwalacz strumienia zmian usługi Azure Cosmos DB Te wyzwalacze nasłuchują zmian w tabelach.
CloudWatch Events lub EventBridge Scheduler Wyzwalacz czasomierza Te wyzwalacze obsługują funkcje zaplanowane lub oparte na czasie.
S3 (zdarzenia obiektu) Wyzwalacz usługi Blob Storage Te wyzwalacze reagują na zdarzenia w magazynie danych BLOB.
Usługa relacyjnej bazy danych Amazon (RDS) Wyzwalacz usługi Azure SQL Te wyzwalacze reagują na zmiany bazy danych.
Zarządzane przesyłanie strumieniowe dla platformy Apache Kafka (MSK) Wyzwalacz Apache Kafka Te wyzwalacze reagują na komunikaty z tematów Kafki.
Amazon ElastiCache Wyzwalacz Azure Redis Te wyzwalacze reagują na komunikaty w usłudze Redis.
Amazon MQ Wyzwalacz RabbitMQ Te wyzwalacze reagują na komunikaty w RabbitMQ.

Uprawnienia

AWS Lambda Azure Functions
Rola wykonywania Lambda przyznaje uprawnienia funkcji Lambda do interakcji z innymi usługami AWS. Każda funkcja Lambda ma skojarzoną rolę zarządzania tożsamościami i dostępem (IAM), która określa jej uprawnienia podczas działania. Tożsamości zarządzane zapewniają tożsamość aplikacji funkcyjnej, która umożliwia jej uwierzytelnianie w innych usługach platformy Azure bez przechowywania poświadczeń w kodzie. Kontrola dostępu oparta na rolach przypisuje odpowiednie role do tożsamości zarządzanej w usłudze Microsoft Entra ID w celu udzielenia dostępu do zasobów, których potrzebuje.
Oświadczenia dotyczące zasad opartych na zasobach

— AWSLambda_FullAccess zapewnia pełny dostęp do wszystkich operacji lambda, w tym tworzenia, aktualizowania i usuwania funkcji.

— AWSLambda_ReadOnlyAccess zapewnia dostęp tylko do odczytu do wyświetlania funkcji lambda i ich konfiguracji.

- Niestandardowe zasady IAM.
Wbudowane role oparte na zasobach:

— Rola Właściciel zapewnia pełny dostęp, w tym zarządzanie uprawnieniami dostępu.

— Rola Contributor może tworzyć i usuwać aplikacje funkcji, konfigurować ustawienia i wdrażać kod. Nie może zarządzać dostępem.

— Rola Czytelnika monitorowania może zapewnić dostęp tylko do odczytu do danych monitorowania i ustawień. Może również przydzielić role niestandardowe.

Adres URL funkcji

AWS Lambda Azure Functions
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (oryginalna, globalna domyślna nazwa hosta)

- <appname>-<randomhash>.<Region>.azurewebsites.net (nowa, unikatowa domyślna nazwa hosta)

Sieć

AWS Lambda Azure Functions
Wszystkie funkcje lambda działają bezpiecznie wewnątrz domyślnej wirtualnej chmury prywatnej zarządzanej przez system. Możesz również skonfigurować funkcję Lambda, aby uzyskiwać dostęp do zasobów w niestandardowym VPC. Aplikacje funkcji mogą być zabezpieczone przed dostępem zewnętrznym i mogą mieć dostęp do innych usług wewnątrz sieci. Przychodzący dostęp sieciowy może być ograniczony tylko do zaporowej listy adresów IP oraz do określonej sieci wirtualnej za pośrednictwem punktów końcowych usługi sieciowej lub prywatnych punktów końcowych. Dostęp do sieci wychodzącej jest włączony za pośrednictwem funkcji integracji z siecią wirtualną. Aplikacja funkcjonalna może mieć cały ruch ograniczony do podsieci sieci wirtualnej i może również uzyskiwać dostęp do innych usług wewnątrz tej sieci.

Obserwowanie i monitorowanie

AWS Lambda Azure Functions
Usługa Amazon CloudWatch ułatwia monitorowanie i obserwowanie przez zbieranie i śledzenie metryk, agregowanie i analizowanie dzienników, ustawianie alarmów, tworzenie niestandardowych pulpitów nawigacyjnych i implementowanie automatycznych odpowiedzi na zmiany wydajności zasobów i metryk. Usługa Azure Monitor zapewnia kompleksowe monitorowanie i wgląd w usługę Azure Functions, szczególnie za pośrednictwem funkcji usługi Application Insights.

Usługa Application Insights zbiera dane telemetryczne, takie jak współczynniki żądań, czasy odpowiedzi i współczynniki awarii. Wizualizuje relacje składników aplikacji, monitoruje wydajność w czasie rzeczywistym, rejestruje szczegółową diagnostykę i umożliwia śledzenie metryk niestandardowych. Te możliwości pomagają zachować wydajność, dostępność i niezawodność usługi Azure Functions, umożliwiając jednocześnie niestandardowe pulpity nawigacyjne, alerty i automatyczne odpowiedzi.
Platforma AWS Lambda generuje dane telemetryczne z wywołań funkcji i może eksportować te dane przy użyciu semantyki OpenTelemetry. Funkcje lambda można skonfigurować tak, aby wysyłały te dane telemetryczne do dowolnego punktu końcowego zgodnego ze standardem OpenTelemetry. Ta akcja umożliwia korelację śladów i dzienników, spójnych danych telemetrycznych opartych na standardach oraz integrację z innymi narzędziami do obserwacji, które obsługują bibliotekę OpenTelemetry. Skonfiguruj aplikację funkcji, aby eksportować dane dziennika i śledzenia w formacie OpenTelemetry. Dane telemetryczne można wyeksportować do dowolnego zgodnego punktu końcowego przy użyciu funkcji OpenTelemetry. Funkcja OpenTelemetry zapewnia korzyści, takie jak korelacja śladów i dzienników, spójne dane telemetryczne oparte na standardach i integracja z innymi dostawcami. OpenTelemetry można włączyć na poziomie aplikacji funkcji w konfiguracji hosta oraz w projekcie kodu, aby zoptymalizować eksport danych z kodu funkcji. Aby uzyskać więcej informacji, zobacz Use OpenTelemetry with Azure Functions (Używanie biblioteki OpenTelemetry z usługą Azure Functions).

Skalowanie i współbieżność

AWS Lambda Azure Functions
Platforma AWS używa modelu skalowania na żądanie. Automatyczne skalowanie operacji funkcji w odpowiedzi na zapotrzebowanie. Współbieżność, czyli liczba żądań obsługiwanych przez instancję, jest zawsze 1. Wystąpienia są dynamicznie dodawane i usuwane na podstawie liczby zdarzeń przychodzących i skonfigurowanej współbieżności dla każdego wystąpienia. Ustawienie współbieżności można skonfigurować na żądaną wartość.
Współbieżność zawsze wynosi 1. Współbieżność można skonfigurować (>1).
Obsługuje skalowanie do 0. Obsługuje skalowanie do 0.

Ochrona przed zimnym startem

AWS Lambda Azure Functions
Aprowizowana współbieżność zmniejsza opóźnienie i zapewnia przewidywalną wydajność funkcji przez wstępne zainicjowanie żądanej liczby wystąpień funkcji. Aprowizowana współbieżność odpowiada aplikacjom wrażliwym na opóźnienia i jest wyceniana oddzielnie od standardowej współbieżności. Aplikacje funkcji umożliwiają skonfigurowanie współbieżności dla każdego wystąpienia, co napędza jego skalę. Wiele zadań może być uruchamianych równolegle w tej samej instancji aplikacji, a kolejne zadania w tej instancji nie powodują początkowego zimnego startu. Aplikacje funkcji mają również zawsze gotowe wystąpienia. Klienci mogą określić liczbę wstępnie uruchomionych instancji, aby wyeliminować opóźnienie zimnego startu i zapewnić stałą wydajność. Aplikacje funkcji są skalowane poziomo do większej liczby wystąpień na podstawie zapotrzebowania, przy zachowaniu zawsze gotowych wystąpień.
Zarezerwowana współbieżność określa maksymalną liczbę współbieżnych wystąpień, które może mieć funkcja. Ten limit gwarantuje, że część kwoty współbieżności konta zostanie zarezerwowana wyłącznie dla tej funkcji. Platforma AWS Lambda dynamicznie rozszerza zasoby, aby obsłużyć przychodzące żądania nawet wtedy, gdy ustawiono zarezerwowaną współbieżność, o ile żądania nie przekraczają określonego limitu zarezerwowanej współbieżności. Niższy limit dla zarezerwowanej współbieżności w usłudze AWS Lambda wynosi 1. Górny limit zarezerwowanej współbieżności w usłudze AWS Lambda jest określany przez regionalny limit współbieżności konta. Domyślnie ten limit obejmuje 1000 operacji współbieżnych dla każdego regionu. Usługa Azure Functions nie posiada odpowiednika zarezerwowanej współbieżności. Aby uzyskać podobną funkcjonalność, wyodrębnij określone funkcje do oddzielnych aplikacji funkcji i ustaw maksymalny limit skalowania dla każdej z nich. Usługa Azure Functions dynamicznie skaluje poziomo, czyli dodaje więcej wystąpień, i skaluje w dół, czyli usuwa wystąpienia, w ramach ustalonego limitu skalowania poziomego. Domyślnie aplikacje uruchamiane w planie Flex Consumption zaczynają się od konfigurowalnego limitu 100 ogólnych wystąpień. Najniższa maksymalna wartość liczby wystąpień to 40, a maksymalna obsługiwana wartość liczby wystąpień to 1000. Regionalne limity przydziału pamięci subskrypcji mogą również ograniczać skalowalność aplikacji funkcji, ale możesz zwiększyć ten limit przydziału, kontaktując się z pomocą techniczną.

Ceny

AWS Lambda Azure Functions
- Opłata za użycie w zależności od całkowitej liczby wywołań oraz GB/s dla każdej instancji (ze stałą współbieżnością równą 1)

1 ms kroki

- Bezpłatny poziom 400 000 Gb/s
- Płać za użycie na podstawie łącznej liczby wywołań i GB/s dla każdego wystąpienia (przy konfigurowalnej liczbie współbieżnych wywołań)

- przyrosty co 100 ms

- Bezpłatny poziom 100 000 Gb/s

- Koszty oparte na zużyciu

Magazyn kodu źródłowego

AWS Lambda Azure Functions
Platforma AWS Lambda zarządza przechowywaniem kodu funkcji w zarządzanym przez siebie systemie przechowywania. Nie musisz dostarczać więcej miejsca do magazynowania. Funkcje wymagają kontenera usługi Blob Storage dostarczonego przez klienta w celu obsługi pakietu wdrożeniowego zawierającego kod aplikacji. Możesz skonfigurować ustawienia tak, aby używały tego samego lub innego konta magazynu na potrzeby wdrożeń i zarządzać metodami uwierzytelniania na potrzeby uzyskiwania dostępu do kontenera.

Rozwój lokalny

Funkcja lambda platformy AWS Funkcja usługi Azure Functions
— Interfejs wiersza polecenia SAM (SAM CLI)

- Lokalny stos
— Podstawowe narzędzia usługi Azure Functions

— Visual Studio Code

— Visual Studio

— GitHub Codespaces

- VSCode.dev

-Maven

- Kod i testowanie usługi Azure Functions lokalnie

Wdrożenie

Funkcja AWS Lambda Azure Functions
Pakiet wdrożeniowy - Plik ZIP

— Obraz kontenera
Plik ZIP (w przypadku wdrożenia obrazu kontenera użyj dedykowanej lub premium wersji SKU).
Rozmiar pliku ZIP (konsola) Maksymalna 50 MB Maksymalna wielkość 500 MB dla wdrożenia pliku ZIP
Rozmiar pliku ZIP (CLI/SDK) Maksymalnie 250 MB dla wdrożenia w formacie ZIP, maksymalnie 500 MB dla wdrożenia rozpakowanego. Maksymalna wielkość 500 MB dla wdrożenia pliku ZIP
Rozmiar obrazu kontenera Maksymalna 10 GB Obsługa kontenerów z elastycznym przechowywaniem danych w Azure
Obsługa dużych artefaktów Stosuj obrazy kontenerów przy większych wdrożeniach. Podłącz usługi Blob Storage lub Azure Files, aby uzyskać dostęp do dużych plików z aplikacji.
Pakowanie typowych zależności do funkcji Warstwy Wdrażanie zip, na żądanie z magazynu lub kontenerów (tylko SKU ACA, dedykowanych, EP)
Blue-green deployment or function versioning (Wdrażanie niebieskie lub przechowywanie wersji funkcji) Użyj kwalifikatorów funkcji, aby odwołać się do określonego stanu funkcji przy użyciu numeru wersji lub nazwy aliasu. Kwalifikatory umożliwiają zarządzanie wersjami i strategię stopniowego wdrażania. Używaj systemów ciągłej integracji i ciągłego dostarczania dla wdrożeń typu blue-green.

Limity czasowe i pamięci

Funkcja Limity usługi AWS Lambda Limity usługi Azure Functions
Przekroczenie limitu czasu wykonywania 900 sekund (15 minut) Domyślny limit czasu wynosi 30 minut. Maksymalny limit czasu jest niezwiązany. Jednak okres prolongaty dla wykonywania funkcji wynosi 60 minut w czasie skalowania w poziomie i 10 minut podczas aktualizacji platformy. Aby uzyskać więcej informacji, zobacz Czas trwania limitu czasu aplikacji funkcjonalnej.
Konfigurowalna pamięć Od 128 MB do 10 240 MB, w przyrostach co 64 MB Funkcje obsługują rozmiary wystąpień 2 GB i 4 GB . Każdy region w danej subskrypcji ma limit pamięci wynoszący 512 000 MB dla wszystkich wystąpień aplikacji, co można zwiększyć, wywołując pomoc techniczną. Całkowite użycie pamięci wszystkich wystąpień we wszystkich aplikacjach funkcji w regionie musi pozostać w ramach limitu.

Mimo że opcje rozmiaru wystąpienia obejmują 2 GB i 4 GB, współbieżność dla każdego wystąpienia może przekraczać 1. W związku z tym pojedyncze wystąpienie może obsługiwać wiele współbieżnych wykonań, w zależności od konfiguracji. Odpowiednie konfigurowanie współbieżności może pomóc w optymalizacji użycia zasobów i zarządzaniu wydajnością. Równoważąc alokację pamięci i ustawienia współbieżności, można efektywnie zarządzać zasobami przydzielonych do aplikacji funkcji i zapewnić wydajną wydajność i kontrolę kosztów. Aby uzyskać więcej informacji, zobacz Regionalne limity przydziału pamięci subskrypcji.

Zarządzanie sekretami

AWS Lambda Azure Functions
Usługa AWS Secrets Manager umożliwia przechowywanie i pobieranie wpisów tajnych, takich jak poświadczenia bazy danych, klucze interfejsu API i inne poufne informacje, oraz zarządzanie nimi. Funkcje Lambda mogą pobierać tajemnice przy użyciu zestawu SDK AWS. Zalecamy używanie podejść niewymagających użycia tajnych danych, takich jak tożsamości zarządzane przez system, aby umożliwić bezpieczny dostęp do zasobów platformy Azure bez konieczności na stałe wpisywania poświadczeń. Gdy wpisy tajne są wymagane, takie jak w przypadku systemów partnerskich lub starszych, usługa Azure Key Vault zapewnia bezpieczne rozwiązanie do przechowywania wpisów tajnych, kluczy i certyfikatów oraz zarządzania nimi.
Magazyn parametrów programu AWS Systems Manager to usługa, która przechowuje dane konfiguracji i wpisy tajne. Parametry mogą być szyfrowane przy użyciu usługi AWS KMS i pobierane przez funkcje lambda przy użyciu zestawu AWS SDK.
Funkcje lambda mogą przechowywać ustawienia konfiguracji w zmiennych środowiskowych. Poufne dane mogą być szyfrowane przy użyciu klucza usługi KMS w celu zapewnienia bezpiecznego dostępu.
Usługa Azure Functions używa ustawień aplikacji do przechowywania danych konfiguracji. Te ustawienia są mapowane bezpośrednio na zmienne środowiskowe, aby były łatwiejsze w użyciu wewnątrz funkcji. Te ustawienia można szyfrować i bezpiecznie przechowywać w konfiguracji usługi Azure App Service.
W przypadku bardziej zaawansowanych scenariuszy usługa Azure App Configuration udostępnia niezawodne funkcje do zarządzania wieloma konfiguracjami. Umożliwia ona flagowanie funkcji i obsługuje aktualizacje dynamiczne w usługach.

Zarządzanie stanem

AWS Lambda Azure Functions
Platforma AWS Lambda obsługuje proste zarządzanie stanem przy użyciu usług takich jak Amazon S3 na potrzeby magazynu obiektów, bazy danych DynamoDB w celu szybkiego i skalowalnego magazynu stanów NoSQL oraz sqS na potrzeby obsługi kolejek komunikatów. Te usługi zapewniają trwałość i spójność danych w wykonaniach funkcji lambda. Usługa Azure Functions wykorzystuje AzureWebJobsStorage do zarządzania stanem poprzez aktywację powiązań i wyzwalaczy za pomocą usług Azure Storage, takich jak Blob Storage, Queue Storage i Table Storage. Umożliwia ona łatwe odczytywanie i zapisywanie stanu funkcji. Aby uzyskać bardziej złożone zarządzanie stanem, rozszerzenie Durable Functions zapewnia zaawansowane możliwości orkiestracji przepływu pracy i trwałości stanu przy użyciu usługi Azure Storage.

Orkiestracja stanowa

AWS Lambda Azure Functions
Brak natywnej orkiestracji stanu. Używanie funkcji kroków platformy AWS dla przepływów pracy. Rozszerzenie Durable Functions pomaga w złożonym zarządzaniu stanem, zapewniając orkiestrację trwałych przepływów pracy oraz jednostki stanowe. Umożliwia długotrwałe operacje, automatyczne tworzenie punktów kontrolnych i trwałość niezawodnego stanu. Te cechy umożliwiają budowanie złożonych przepływów pracy w celu zapewnienia odporności na uszkodzenia i skalowalności dla aplikacji z danymi stanowymi.

Inne różnice i zagadnienia

Funkcja AWS Lambda Azure Functions
Funkcje grupowania Każda funkcja lambda platformy AWS jest niezależną jednostką. Aplikacja funkcji służy jako kontener dla wielu funkcji. Zapewnia on współużytkowany kontekst wykonywania i konfigurację funkcji, które zawiera. Traktowanie wielu funkcji jako pojedynczej jednostki upraszcza wdrażanie i zarządzanie. Funkcje używają również strategii skalowania poszczególnych funkcji, w której każda funkcja jest skalowana niezależnie, z wyjątkiem wyzwalaczy HTTP, Blob Storage i Durable Functions. Te wyzwalane funkcje są skalowane we własnych grupach.
Domeny niestandardowe Włączone za pośrednictwem bramy interfejsu API Domeny niestandardowe można skonfigurować bezpośrednio w aplikacji funkcji lub w usłudze Azure API Management.
Obsługa kontenerów niestandardowych Obsługuje niestandardowe kontenery przy użyciu obrazu kontenera AWS Lambda Usługa Azure Functions obsługuje kontenery niestandardowe uruchamiane w środowisku usługi Container Apps.

Tworzenie planu migracji

  1. Wybierz kluczowe obciążenia, aby sprawdzić koncepcję.

    Zacznij od wybrania jednego lub dwóch średniej wielkości, niekrytycznych obciążeń z pełnego spisu. Te obciążenia robocze stanowią podstawę migracji dowodu koncepcji. Możesz przetestować proces i zidentyfikować potencjalne wyzwania bez ryzyka poważnych zakłóceń w operacjach.

  2. Przeprowadzaj testowanie iteracyjne i zbieraj informacje zwrotne.

    Wskazówka

    Użyj tego niestandardowego polecenia trybu czatu, aby sprawdzić bieżący stan procesu migracji w każdym momencie.

    /LambdaMigration-GetStatus
    

    Użyj weryfikacji koncepcji, aby zebrać opinie, zidentyfikować luki i dostosować proces przed skalowaniem do większych obciążeń. Takie podejście iteracyjne gwarantuje, że do czasu przejścia do migracji na pełną skalę można sprostać potencjalnym wyzwaniom i udoskonalić proces.

Tworzenie zasobów migracji

Ten krok jest etapem przejściowym rozwoju. W tej fazie utworzysz kod źródłowy, szablony IaC (infrastruktury jako kodu) oraz potoki wdrażania, które reprezentują obciążenie na platformie Azure. Przed przeprowadzeniem migracji należy dostosować kod funkcji pod kątem zgodności i najlepszych rozwiązań.

Dostosowywanie kodu funkcji, plików konfiguracji i infrastruktury jako plików kodu

Aby zaktualizować kod dla wymagań środowiska uruchomieniowego usługi Azure Functions:

Te fragmenty kodu to przykłady wspólnego kodu zestawu SDK. Kod AWS Lambda jest mapowany na odpowiednie wyzwalacze, połączenia lub fragmenty kodu zestawu SDK w usłudze Azure Functions.

Odczytywanie z usługi Amazon S3 w porównaniu z usługą Azure Blob Storage

Kod AWS Lambda (SDK)

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

exports.handler = async (event) => {
const params = {
Bucket: 'my-bucket',
Key: 'my-object.txt',
};
const data = await
s3.getObject(params).promise();
console.log('File content:',
data.Body.toString());
};       

Kod usługi Azure Functions (wyzwalacz)

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

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

Zapisywanie w usłudze Amazon Simple Queue Service (SQS) w porównaniu z usługą Azure Queue Storage

Kod AWS Lambda (SDK)

const AWS = require('aws-sdk');
const sqs = new AWS.SQS(); 

exports.handler = async (event) => {
const params = {
QueueUrl:
'https://sqs.amazonaws.com/123456789012/MyQueue',
MessageBody: 'Hello, world!',
};
await
sqs.sendMessage(params).promise();
};

Kod usługi Azure Functions (wyzwalacz)

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

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

Zapisywanie do DynamoDB versus do Azure Cosmos DB

Kod AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const dynamoDb = new AWS.DynamoDB.DocumentClient();   

exports.handler = async (event) => { 
const params = { 
TableName: 'my-table', 
Key: { id: '123' }, 
}; 
const data = await dynamoDb.get(params).promise(); 
console.log('DynamoDB record:', data.Item); 
}; 

Kod usługi Azure Functions (wyzwalacz)

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

Zdarzenia Amazon CloudWatch a wyzwalacz czasomierza Azure

Kod AWS Lambda (SDK)

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

Kod usługi Azure Functions (wyzwalacz)

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

Usługa Amazon Simple Notification Service (SNS) a wyzwalacz usługi Azure Event Grid

Kod AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const sns = new AWS.SNS();   

exports.handler = async (event) => { 
const params = { 
Message: 'Hello, Event Grid!', 
TopicArn: 'arn:aws:sns:us-east-1:123456789012:MyTopic', 
}; 
await sns.publish(params).promise(); 
}; 

Kod usługi Azure Functions (wyzwalacz)

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

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

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

}); 

Amazon Kinesis kontra wyzwalacz usługi Azure Event Hubs

Kod AWS Lambda (SDK)

const AWS = require('aws-sdk'); 
const kinesis = new AWS.Kinesis();   

exports.handler = async (event) => { 
const records = 
event.Records.map(record => 
Buffer.from(record.kinesis.data, 
'base64').toString()); 
console.log('Kinesis records:', records); 
}; 

Kod usługi Azure Functions (wyzwalacz)

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

Zobacz następujące repozytoria GitHub, aby porównać kod lambda platformy AWS i kod usługi Azure Functions:

Dostosowywanie ustawień konfiguracji

Upewnij się, że ustawienia limitu czasu i pamięci funkcji są zgodne z usługą Azure Functions. Aby uzyskać więcej informacji na temat konfigurowalnych ustawień, zobacz host.json dokumentację dotyczącą usługi Azure Functions.

Postępuj zgodnie z zalecanymi najlepszymi rozwiązaniami dotyczącymi uprawnień, dostępu, sieci i konfiguracji wdrażania.

Konfigurowanie uprawnień

Postępuj zgodnie z najlepszymi praktykami podczas konfigurowania uprawnień do aplikacji funkcyjnych. Aby uzyskać więcej informacji, zobacz Konfigurowanie aplikacji funkcjonalnych i konta magazynu przy użyciu tożsamości zarządzanej.

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

Aby uzyskać więcej informacji, zobacz rbac.bicep.

Konfigurowanie dostępu do sieci

Usługa Azure Functions obsługuje integrację sieci wirtualnej, która zapewnia aplikacji funkcji dostęp do zasobów w sieci wirtualnej. Po integracji aplikacja kieruje ruch wychodzący przez sieć wirtualną. Następnie aplikacja może uzyskiwać dostęp do prywatnych punktów końcowych lub zasobów przy użyciu reguł, które zezwalają tylko na ruch z określonych podsieci. Jeśli miejsce docelowe jest adresem IP spoza sieci wirtualnej, źródłowy adres IP jest jednym z adresów wymienionych we właściwościach aplikacji, chyba że skonfigurowano bramę translatora adresów sieciowych.

Po włączeniu integracji sieci wirtualnej dla aplikacji funkcjonalnych, postępuj zgodnie z najlepszymi praktykami w specyfikacji dotyczącej integracji sieci wirtualnej dla aplikacji internetowych i funkcjonalnych.

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

Aby uzyskać więcej informacji, zobacz VNet.bicep i storage-PrivateEndpoint.bicep.

Konfigurowanie ustawień wdrażania

Wdrożenia podążają za pojedynczą ścieżką. Po skompiluj kod projektu i spakuj go w pakiecie aplikacji, wdróż go w kontenerze usługi Blob Storage. Po uruchomieniu aplikacja pobiera pakiet i uruchamia z niego kod funkcji. Domyślnie to samo konto magazynowe, które przechowuje wewnętrzne metadane hosta, takie jak AzureWebJobsStorage, służy również jako kontener wdrożeniowy. Możesz jednak użyć alternatywnego konta przechowywania lub wybrać preferowaną metodę uwierzytelniania, konfigurując ustawienia wdrożenia aplikacji. Aby uzyskać więcej informacji, zobacz Szczegóły technologii wdrażania i Konfigurowanie ustawień wdrażania.

Generowanie plików IaC

  • Użyj narzędzi, takich jak Bicep, szablony usługi Azure Resource Manager lub narzędzie Terraform, aby utworzyć pliki IaC w celu wdrożenia zasobów platformy Azure.

    Wskazówka

    Użyj tego niestandardowego monitu trybu czatu, aby wygenerować pliki infrastruktury jako kodu (IaC) dla usługi Azure Functions:

    /LambdaMigration-Phase3-GenerateFunctionsInfra
    
  • Zdefiniuj zasoby, takie jak Azure Functions, konta na potrzeby magazynowania i składniki sieciowe w plikach IaC.

  • Skorzystaj z tego repozytorium przykładów IaC , aby uzyskać przykłady korzystające z zaleceń i najlepszych rozwiązań usługi Azure Functions.

Używanie narzędzi do refaktoryzacji

Użyj narzędzi takich jak GitHub Copilot w programie VS Code, aby uzyskać pomoc dotyczącą refaktoryzacji kodu, ręcznych zmian dla określonych zmian lub innych narzędzi wspierających migrację.

Uwaga / Notatka

Użyj trybu agenta w narzędziu GitHub Copilot w programie VS Code.

Poniższe artykuły zawierają konkretne przykłady i szczegółowe kroki ułatwiające proces migracji:

Opracuj szczegółowy, krok-po-kroku proces migracji na dzień 0

Opracuj strategie przejścia w tryb failover i powrotu po awarii dla migracji i dokładnie przetestuj je w środowisku przedprodukcyjnym. Zalecamy przeprowadzenie kompleksowego testowania przed przejściem z usługi AWS Lambda do usługi Azure Functions.

  • Weryfikowanie funkcjonalności

    • Koduj i testuj usługę Azure Functions lokalnie.

    • Dokładnie przetestuj każdą funkcję, aby upewnić się, że działa zgodnie z oczekiwaniami. Te testy powinny obejmować dane wejściowe/wyjściowe, wyzwalacze zdarzeń i weryfikację powiązań.

      Wskazówka

      Użyj tego niestandardowego monitu trybu czatu, aby zweryfikować zmigrowany kod usługi Azure Functions:

      /LambdaMigration-Phase4-ValidateCode
      
    • Użyj narzędzi, takich jak curl lub rozszerzenia klienta REST w programie VS Code, aby wysyłać żądania HTTP dla funkcji wyzwalanych przez protokół HTTP.

    • W przypadku innych wyzwalaczy, takich jak czasomierze lub kolejki, upewnij się, że wyzwalacze są uruchamiane poprawnie, a funkcje działają zgodnie z oczekiwaniami.

  • Weryfikowanie wydajności

    • Przeprowadź testy wydajnościowe, aby porównać nowe wdrożenie usługi Azure Functions z poprzednim wdrożeniem usługi AWS Lambda.

    • Monitoruj metryki, takie jak czas odpowiedzi, czas wykonywania i zużycie zasobów.

      Wskazówka

      Użyj tego niestandardowego monitu trybu czatu, aby zweryfikować konfigurację infrastruktury:

      /LambdaMigration-Phase5-ValidateInfra
      
    • Usługa Application Insights służy do monitorowania, analizy dzienników i rozwiązywania problemów w fazie testowania.

  • Rozwiązywanie problemów za pomocą funkcji diagnozowania i rozwiązywania problemów

    Użyj funkcji diagnozowania i rozwiązywania problemów w witrynie Azure Portal, aby rozwiązać problemy z aplikacją funkcji. To narzędzie udostępnia zestaw funkcji diagnostycznych, które mogą pomóc w szybkim identyfikowaniu i rozwiązywaniu typowych problemów, takich jak awarie aplikacji, obniżenie wydajności i problemy z konfiguracją. Postępuj zgodnie z instrukcjami rozwiązywania problemów i zaleceniami, które narzędzie udostępnia, aby rozwiązać problemy, które można zidentyfikować.

Ocena stanu końcowego migrowanego obciążenia

Przed likwidacją zasobów na platformie AWS należy mieć pewność, że platforma spełnia bieżące oczekiwania dotyczące obciążeń i że nic nie blokuje konserwacji obciążeń ani dalszego programowania.

Wdrażanie i testowanie funkcji w celu zweryfikowania ich wydajności i poprawności.

Wdrażanie na platformie Azure

Wskazówka

Użyj tego niestandardowego monitu trybu czatu, aby wdrożyć zweryfikowany projekt na platformie Azure:

/LambdaMigration-Phase6-DeployToAzure

Wdrażaj obciążenia, korzystając z funkcji publikowania w VS Code. Obciążenia można również wdrażać z poziomu wiersza polecenia przy użyciu narzędzi Azure Functions Core Tools lub interfejsu wiersza polecenia platformy Azure. Usługi Azure DevOps i GitHub Actions również używają rozwiązania One Deploy.

  • Azure Functions Core Tools: wdrażaj aplikację funkcji przy użyciu narzędzi Azure Functions Core Tools za pomocą polecenia func azure functionapp publish <FunctionAppName>.

  • Potoki ciągłej integracji i ciągłego wdrażania (CI/CD): skonfiguruj potok ciągłej integracji/ciągłego wdrażania przy użyciu usług, takich jak GitHub Actions, Azure DevOps lub inne narzędzie ciągłej integracji/ciągłego wdrażania.

Aby uzyskać więcej informacji, zobacz Ciągłe dostarczanie przy użyciu funkcji GitHub Actions lub Ciągłe dostarczanie w usłudze Azure Pipelines.

Eksplorowanie przykładowych scenariuszy migracji

Użyj repozytorium MigrationGetStarted jako szablonu, aby rozpocząć weryfikację koncepcji. To repozytorium zawiera gotowy do wdrożenia projekt usługi Azure Functions, który zawiera pliki infrastruktury i kodu źródłowego ułatwiające rozpoczęcie pracy.

Jeśli wolisz używać narzędzia Terraform, zamiast tego użyj polecenia MigrationGetStarted-Terraform .

Optymalizowanie i monitorowanie wydajności aplikacji na platformie Azure

Po przeprowadzeniu migracji obciążenia zalecamy zapoznanie się z bardziej funkcjami na platformie Azure. Te funkcje mogą pomóc spełnić przyszłe wymagania dotyczące obciążeń i pomóc w zamknięciu luk.

Monitorowanie i rozwiązywanie problemów przy użyciu usługi Application Insights

Włącz usługę Application Insights dla aplikacji funkcji, aby zbierać szczegółowe dane telemetryczne na potrzeby monitorowania i rozwiązywania problemów. Usługę Application Insights można włączyć za pośrednictwem witryny Azure Portal lub w pliku konfiguracji host.json aplikacji funkcji. Po włączeniu usługi Application Insights można wykonywać następujące czynności:

  • Zbieranie danych telemetrycznych. Usługa Application Insights udostępnia różne dane telemetryczne, takie jak dzienniki żądań, metryki wydajności, wyjątki i zależności.

  • Analizowanie dzienników i metryk. Uzyskaj dostęp do pulpitu nawigacyjnego usługi Application Insights z witryny Azure Portal, aby wizualizować i analizować dzienniki, metryki i inne dane telemetryczne. Użyj wbudowanych narzędzi, aby tworzyć niestandardowe zapytania i wizualizować dane, aby uzyskać wgląd w wydajność i zachowanie aplikacji funkcji.

  • Konfigurowanie alertów. Skonfiguruj alerty w usłudze Application Insights, aby otrzymywać powiadomienia o krytycznych problemach, pogorszeniu wydajności lub określonych zdarzeniach. Te alerty ułatwiają proaktywne monitorowanie i szybkie reagowanie na problemy.

Optymalizowanie pod kątem kosztów i wydajności

  • Optymalizacja skalowania i wydajności:

    • Korzystaj z funkcji skalowania automatycznego, aby wydajnie obsługiwać różne obciążenia.

    • Zoptymalizuj kod funkcji, aby poprawić wydajność, skracając czas wykonywania, optymalizując zależności i korzystając z wydajnych praktyk kodowania.

    • Zaimplementuj strategie buforowania, aby zmniejszyć powtarzające się przetwarzanie i opóźnienia dla często używanych danych.

  • Zarządzanie kosztami:

    • Użyj narzędzi microsoft Cost Management , aby monitorować i analizować koszty usługi Azure Functions.

    • Konfigurowanie alertów dotyczących budżetowania i kosztów w celu efektywnego zarządzania kosztami i przewidywania wydatków.