Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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:
Jeśli nie masz jeszcze rozszerzenia GitHub Copilot dla programu Azure Visual Studio Code, zainstaluj go teraz.
Otwórz projekt Lambda jako obszar roboczy w programie Visual Studio Code.
Uruchom ten monit w trybie agenta w narzędziu GitHub Copilot:
Help me migrate my Lambda app to AzurePo wyświetleniu monitu w obszarze powiadomień wybierz pozycję Zainstaluj , aby dodać niestandardowy tryb czatu
LambdaToFunctionMigrationdo 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
- Model programowania
- Wyzwalacze i powiązania zdarzeń
- uprawnienia
- Adres URL funkcji
- Sieć komputerowa
- Obserwowanie i monitorowanie
- Skalowanie i współbieżność
- Ochrona przed zimnym startem
- Cennik
- Magazyn kodu źródłowego
- Programowanie lokalne
- Wdrożenie
- Limity czasu i pamięci
- Zarządzanie wpisami tajnymi
- Zarządzanie stanem
- Orkiestracja stanowa
- Inne różnice i zagadnienia
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
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.
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-GetStatusUż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
Wskazówka
Użyj tego niestandardowego monitu trybu czatu, by rozpocząć proces migracji kodu.
/LambdaMigration-Phase2-MigrateLambdaCode - Dostosowywanie ustawień konfiguracji
- Generowanie plików IaC
- Używanie narzędzi do refaktoryzacji
Dostosowywanie kodu funkcji, plików konfiguracji i infrastruktury jako plików kodu
Aby zaktualizować kod dla wymagań środowiska uruchomieniowego usługi Azure Functions:
Zmodyfikuj kod, aby był zgodny z modelem programowania usługi Azure Functions. Na przykład dostosuj podpisy funkcji do formatu wymaganego przez usługę Azure Functions. Aby uzyskać więcej informacji na temat definicji funkcji i kontekstu wykonywania, zobacz Przewodniki dla deweloperów usługi Azure Functions.
Użyj pakietu rozszerzeń usługi Azure Functions , aby obsługiwać różne powiązania i wyzwalacze podobne do usług AWS. W przypadku aplikacji platformy .NET należy użyć odpowiednich pakietów NuGet zamiast pakietu rozszerzeń.
Pakiet rozszerzeń umożliwia integrację z innymi usługami platformy Azure, takimi jak Azure Storage, Azure Service Bus i Azure Cosmos DB bez konieczności ręcznego konfigurowania każdego powiązania za pomocą zestawów SDK. Aby uzyskać więcej informacji, zobacz Łączenie funkcji z usługami platformy Azure przy użyciu powiązań i wzorców wyrażeń powiązań 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:
- Kod AWS Lambda
- Kod usługi Azure Functions
- Repozytorium przykładów platformy Azure, w tym starter, IaC i kompleksowe przykłady dla 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-GenerateFunctionsInfraZdefiniuj 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:
- Azure dla specjalistów AWS
- Lokalne opracowywanie usługi Azure Functions przy użyciu narzędzi Core Tools
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
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-ValidateCodeUż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-ValidateInfraUsł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.