Sdílet prostřednictvím


Migrace úloh AWS Lambda do Azure Functions

Migrace bezserverové úlohy, která používá lambda Amazon Web Services (AWS) do Azure Functions, vyžaduje pečlivé plánování a implementaci. Tento článek obsahuje základní pokyny, které vám pomůžou:

  • Uskutečněte proces zjišťování ve vaší stávající pracovní zátěži.
  • Zjistěte, jak provádět klíčové aktivity migrace, jako je plánování předběžné migrace a hodnocení úloh.
  • Vyhodnocení a optimalizace migrované úlohy

Scope

Tento článek popisuje migraci instance AWS Lambda do Azure Functions.

Tento článek se nezabývá:

  • Migrace do vlastního řešení hostování kontejnerů, jako je azure Container Apps
  • Hostování kontejnerů AWS Lambda v Azure
  • Základní přístupy k přijetí Azure vaší organizací, jako jsou cílové zóny Azure nebo jiná témata, která se řeší v metodologii migrace architektury přechodu na cloud.

Režim vlastního chatu pro migraci

Aby bylo snazší migrovat aplikace AWS Lambda do Azure pomocí editoru Visual Studio Code, azure Functions poskytuje vlastní chatovací režim v GitHub Copilotu. Pomocí těchto kroků přidejte vlastní LambdaToFunctionMigration chatový režim do projektu v editoru Visual Studio Code:

  1. Pokud ještě nemáte rozšíření GitHub Copilot pro Azure Visual Studio Code, nainstalujte ho teď.

  2. Otevřete projekt Lambda jako pracovní prostor v editoru Visual Studio Code.

  3. Spusťte tuto výzvu v režimu agenta v GitHub Copilotu:

    Help me migrate my Lambda app to Azure
    
  4. Po zobrazení výzvy v oznamovací oblasti vyberte Nainstalovat a přidejte do LambdaToFunctionMigration projektu vlastní režim chatu.

Teď můžete použít výzvy s asistencí definované v tomto vlastním chatu pro každou fázi migrace. Začněte psát /LambdaMigration v chatu a podívejte se na úplný seznam dostupných příkazů.

Porovnání funkcí

Tento článek mapuje funkce AWS Lambda na ekvivalenty azure Functions, aby se zajistila kompatibilita.

Důležité

Do plánu migrace můžete zahrnout optimalizaci, ale Microsoft doporučuje dvoustupňový proces. Nejprve migrujte funkce like-to-like a pak vyhodnoťte příležitosti optimalizace v Azure.

Optimalizace by měla být průběžná a prováděná prostřednictvím procesů řízení změn vašeho pracovního týmu. Migrace, která během migrace přidává další možnosti, způsobuje riziko a zbytečně rozšiřuje proces.

Perspektiva úloh

Tento článek se zaměřuje na migraci úlohy AWS Lambda do Azure Functions a běžných závislostí pro bezserverové úlohy. Tento proces může zahrnovat několik služeb, protože úlohy obsahují mnoho prostředků a procesů pro správu těchto prostředků. Pokud chcete mít komplexní strategii, musíte zkombinovat doporučení uvedená v tomto článku s větším plánem, který zahrnuje další komponenty a procesy ve vaší úloze.

Proveďte proces zjišťování vaší stávající pracovní zátěže.

Prvním krokem je provést podrobný proces zjišťování, který vyhodnotí vaši stávající úlohu AWS Lambda. Cílem je pochopit, na kterých funkcích a službách AWS vaše úlohy závisí. Zkompilujte komplexní inventář funkcí AWS Lambda pomocí nástrojů AWS, jako jsou sady SDK specifické pro služby, rozhraní API, CloudTrail a AWS CLI, abyste mohli vyhodnotit úlohy v AWS. Měli byste porozumět následujícím klíčovým aspektům inventáře AWS Lambda:

  • Případy použití
  • Konfigurace
  • Nastavení zabezpečení a sítě
  • Nástroje, monitorování, protokolování a mechanismy pozorovatelnosti
  • Závislosti
  • Cíle spolehlivosti a aktuální stav spolehlivosti
  • Náklady na vlastnictví
  • Cíle výkonu a aktuální výkon

Návod

Pomocí tohoto příkazu ve vlastním režimu chatu vygenerujte hodnotící zprávu pro nastavení AWS Lambda.

/LambdaMigration-Phase1-AssessLambdaProject

Předběžné plánování migrace

Než začnete s migrací úloh, musíte namapovat funkce AWS Lambda na Azure Functions, abyste zajistili kompatibilitu a vytvořili plán migrace. Pak můžete vybrat klíčové úlohy pro testování konceptu.

Musíte také přiřadit služby AWS, na které Lambda závisí, na ekvivalentní závislosti v Azure.

Mapování funkcí AWS Lambda na Azure Functions

Následující tabulky porovnávají koncepty, prostředky a vlastnosti AWS Lambda s odpovídajícími ekvivalenty ve službě Azure Functions, konkrétně s plánem hostování Flex Consumption.

Podporované jazyky

Programovací jazyk Podporované verze AWS Lambda Podporované verze 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 Není podporováno 7,4
platforma .NET .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Ruby 3.2, 3.3 Vlastní zpracovatelé
Go Runtime pouze pro OS Vlastní zpracovatelé
Rust Runtime pouze pro OS Vlastní zpracovatelé

Programovací model

Vlastnost AWS Lambda Azure Functions
Spouštěče Integruje se s dalšími službami AWS prostřednictvím zdrojů událostí. Poskytuje automatické a programové způsoby propojení funkcí Lambda se zdroji událostí. Aktivuje funkci na základě konkrétních událostí, jako jsou aktualizace v databázi nebo nová zpráva ve frontě. Trigger služby Azure Cosmos DB například umožňuje funkcím automaticky reagovat na vkládání a aktualizace v kontejneru Azure Cosmos DB. Tato akce umožňuje zpracování změn dat v reálném čase.

Funkce se také integruje s Azure Event Gridem, takže může zpracovávat události ze služeb Azure, jako jsou Azure Storage a Azure Media Services, a externí zdroje událostí. Event Grid slouží jako centralizovaná rozšiřitelná služba směrování událostí, která doplňuje triggery služby Functions a umožňuje vysokou škálovatelnost a široké pokrytí zdroje událostí.
Vazby Nemá vazby. Používá sady AWS SDK v rámci funkcí lambda k ruční správě interakcí s jinými službami AWS. Vazby nakonfigurované jako vstup nebo výstup umožňují deklarativní připojení ke službám, které minimalizují potřebu explicitního kódu sady SDK. Můžete například nakonfigurovat vazby pro čtení ze služby Blob Storage, zápis do služby Azure Cosmos DB nebo odesílání e-mailů přes SendGrid bez ruční správy integrací.

Spouštěče a vazby událostí

Spouštěč nebo služba AWS Lambda Spouštěč Azure Functions Popis
Brána rozhraní API: Požadavky HTTP Spouštěč HTTP Tyto triggery umožňují zpracovávat požadavky HTTP přímo.
Jednoduchá fronta služba (SQS) Trigger služby Azure Queue Storage nebo trigger služby Azure Service Bus Tyto triggery můžou zpracovávat zprávy ve frontách.
Služba SNS (Simple Notification Service) Spouštěč Event Grid nebo spouštěč služby Service Bus Tyto triggery umožňují zpracování oznámení.
Kinesis (datové proudy) Spouštěč Event Hubs Tyto triggery využívají datové proudy.
DynamoDB (změny tabulky) Trigger kanálu změn služby Azure Cosmos DB Tyto triggery naslouchají změnám v tabulkách.
CloudWatch Events nebo EventBridge Scheduler Spoušť časovače Tyto triggery zpracovávají plánované nebo časové funkce.
S3 (události objektů) Spouštěč pro Blob Storage Tyto spouště reagují na události v blobovém úložišti.
Amazon Relational Database Service (RDS) Azure SQL Trigger Tyto triggery reagují na změny databáze.
Spravované streamování pro Apache Kafka (MSK) spouštěč Apache Kafka Tyto spouštěče reagují na zprávy z Kafka témat.
Amazon ElastiCache Spouštěč Azure Redis Tyto triggery reagují na zprávy v Redisu.
Amazon MQ RabbitMQ spouštěč Tyto triggery reagují na zprávy v RabbitMQ.

Povolení

AWS Lambda Azure Functions
Spouštěcí role Lambda uděluje funkcím Lambda oprávnění k interakci s jinými službami AWS. Každá funkce lambda má přidruženou roli správy identit a přístupu (IAM), která určuje svá oprávnění při spuštění. Spravované identity poskytují identitu pro vaši aplikaci funkcí, která umožňuje ověřování s jinými službami Azure bez uložení přihlašovacích údajů v kódu. Řízení přístupu na základě role přiřadí spravované identitě ve službě Microsoft Entra ID odpovídající role, aby bylo možné udělit přístup k požadovaným prostředkům.
Prohlášení o zásadách založených na prostředcích:

– AWSLambda_FullAccess poskytuje úplný přístup ke všem operacím Lambda, včetně vytváření, aktualizace a odstraňování funkcí.

– AWSLambda_ReadOnlyAccess poskytuje přístup jen pro čtení k zobrazení funkcí Lambda a jejich konfigurací.

- Vlastní politiky IAM.
Předdefinované role založené na prostředcích:

– Role Vlastník poskytuje úplný přístup, včetně správy přístupových oprávnění.

– Role Přispěvatel může vytvářet a odstraňovat funkční aplikace, konfigurovat nastavení a spouštět kód. Nemůže spravovat přístup.

– Role Monitorovací čtenář může udělit pouze přístup ke čtení k monitorovacím datům a nastavením. Může také přidělit vlastní role.

Adresa URL funkce

AWS Lambda Azure Functions
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (původní, globální výchozí název hostitele)

- <appname>-<randomhash>.<Region>.azurewebsites.net (nový, jedinečný výchozí název hostitele)

Sítě

AWS Lambda Azure Functions
Všechny funkce Lambda běží bezpečně uvnitř výchozího virtuálního privátního cloudu spravovaného systémem (VPC). Funkci Lambda můžete také nakonfigurovat tak, aby přistupovala k prostředkům ve vlastním VPC. Aplikace funkcí můžou být zabezpečené v síti a můžou přistupovat k dalším službám v síti. Příchozí síťový přístup lze omezit pouze na seznam IP adres firewallu a na konkrétní virtuální síť prostřednictvím služebních koncových bodů nebo privátních koncových bodů. Odchozí síťový přístup je povolený prostřednictvím funkce integrace virtuální sítě. Aplikace funkcí může mít veškerý provoz omezený na podsíť virtuální sítě a může také přistupovat k jiným službám v této virtuální síti.

Pozorovatelnost a monitorování

AWS Lambda Azure Functions
Amazon CloudWatch pomáhá s monitorováním a pozorovatelnostmi shromažďováním a sledováním metrik, agregací a analýzou protokolů, nastavením alarmů, vytvářením vlastních řídicích panelů a implementací automatizovaných odpovědí na změny výkonu a metrik prostředků. Azure Monitor poskytuje komplexní monitorování a pozorovatelnost pro Azure Functions, zejména prostřednictvím funkce Application Insights.

Application Insights shromažďuje telemetrická data, jako jsou frekvence požadavků, doby odezvy a míra selhání. Vizualizuje vztahy komponent aplikací, monitoruje výkon v reálném čase, zaznamenává podrobné diagnostiky a umožňuje vlastní sledování metrik. Tyto funkce pomáhají udržovat výkon, dostupnost a spolehlivost služby Azure Functions a zároveň povolit vlastní řídicí panely, výstrahy a automatizované odpovědi.
AWS Lambda generuje telemetrická data z volání vaší funkce a může tato data exportovat pomocí sémantiky OpenTelemetry. Funkce Lambda můžete nakonfigurovat tak, aby odesílaly tato telemetrická data do libovolného koncového bodu kompatibilního s OpenTelemetry. Tato akce umožňuje korelaci trasování a protokolů, konzistentních telemetrických dat založených na standardech a integraci s dalšími nástroji pozorovatelnosti, které podporují OpenTelemetry. Nakonfigurujte aplikaci funkcí tak, aby exportovala data protokolu a trasování ve formátu OpenTelemetry. Telemetrická data můžete exportovat do libovolného kompatibilního koncového bodu pomocí OpenTelemetry. OpenTelemetry poskytuje výhody, jako je korelace trasování a protokolů, konzistentní telemetrická data založená na standardech a integrace s jinými poskytovateli. OpenTelemetry můžete povolit na úrovni aplikace funkcí v konfiguraci hostitele a v projektu kódu za účelem optimalizace exportu dat z kódu funkce. Další informace najdete v tématu Použití OpenTelemetry se službou Azure Functions.

Škálování a souběžnost

AWS Lambda Azure Functions
AWS používá model škálování na vyžádání. Automatické škálování operace funkce v reakci na poptávku Souběžnost, nebo počet požadavků, které zpracovává instance, je vždy 1. Instance se dynamicky přidávají a odebírají na základě počtu příchozích událostí a nakonfigurované souběžnosti pro každou instanci. Nastavení souběžnosti můžete nakonfigurovat na požadovanou hodnotu.
Souběžnost je vždy 1. Souběžnost je konfigurovatelná (>1).
Podporuje škálování na 0. Podporuje škálování na 0.

Ochrana proti studenému startu

AWS Lambda Azure Functions
Zřízená souběžnost snižuje latenci a zajišťuje předvídatelný výkon funkce tím, že předem inicializuje požadovaný počet instancí funkcí. Zřízená souběžnost vyhovuje aplikacím citlivým na latenci a stojí odděleně od standardní souběžnosti. Aplikace funkcí umožňují nakonfigurovat souběžnost pro každou instanci, která řídí její škálování. Několik úloh může běžet paralelně ve stejné instanci aplikace a následné úlohy v instanci nevyžadují počáteční prodlevu. Aplikace funkcí mají také vždy připravené instance. Zákazníci můžou zadat počet předehřátých instancí, aby se eliminovala latence studeného spuštění a zajistila konzistentní výkon. Aplikace funkcí také škálují na více instancí na základě poptávky a současně udržují vždy připravené instance.
Rezervovaná souběžnost určuje maximální počet souběžných instancí, které může funkce mít. Tento limit zajišťuje, aby část kvóty souběžnosti vašeho účtu byla pro tuto funkci vyhrazena výhradně. AWS Lambda dynamicky škáluje kapacitu tak, aby zpracovávala příchozí požadavky i v případě, že je nastavená rezervovaná souběžnost, pokud požadavky nepřekročí zadaný limit rezervované souběžnosti. Nižší limit pro rezervovanou souběžnost v AWS Lambda je 1. Horní limit rezervované souběžnosti v AWS Lambda je určen kvótou regionální souběžnosti účtu. Ve výchozím nastavení je tento limit 1 000 souběžných operací pro každou oblast. Azure Functions nemá ekvivalentní funkci pro rezervovanou souběžnost. Pokud chcete dosáhnout podobné funkčnosti, izolujte konkrétní funkce do samostatných funkčních aplikací a nastavte maximální limit škálování pro každou z aplikací. Azure Functions dynamicky škáluje nahoru, nebo přidává další instance, a škáluje dolů, nebo odebírá instance, v rámci nastavených limitů škálování. Aplikace, které běží v plánu Flex Consumption, ve výchozím nastavení začínají konfigurovatelným limitem 100 celkových instancí. Nejnižší maximální hodnota počtu instancí je 40 a nejvyšší podporovaná maximální hodnota počtu instancí je 1 000. Kvóty paměti regionálního předplatného mohou také omezovat míru škálování aplikací funkcí, ale tuto kvótu lze zvýšit kontaktováním podpory.

Cenotvorba

AWS Lambda Azure Functions
– Platba za užití za celkový počet volání a GB/s pro každou instanci (s pevnou souběžností nastavenou na 1)

- přírůstky po 1 ms

- 400 000 Gb/s úroveň zdarma
– Platba za použití pro celkový počet vyvolání a GB/s pro každou instanci (s konfigurovatelnými souběžnými vyvoláními)

- přírůstky po 100 ms

– Bezplatná úroveň 100 000 Gb/s

- Náklady na základě spotřeby

Úložiště zdrojového kódu

AWS Lambda Azure Functions
AWS Lambda spravuje úložiště kódu funkce ve vlastním spravovaném systému úložiště. Nemusíte zadávat další úložiště. Služba Functions vyžaduje kontejner Blob Storage zadaný zákazníkem, který udržuje balíček nasazení, který obsahuje kód vaší aplikace. Nastavení můžete nakonfigurovat tak, aby pro nasazení používala stejný účet úložiště nebo jiný účet úložiště, a spravovat metody ověřování pro přístup ke kontejneru.

Místní vývoj

Funkce AWS Lambda Funkce Azure Functions
– SAM CLI

- LocalStack
– Azure Functions Core Tools

– Visual Studio Code

– Visual Studio

– GitHub Codespaces

- VSCode.dev

- Odborník

- Místní kódování a testování služby Azure Functions

Nasazení

Vlastnost AWS Lambda Azure Functions
Balíček pro nasazení - ZIP soubor

– Image kontejneru
Soubor ZIP (pro nasazení kontejnerového obrazu použijte vyhrazené nebo prémiové SKU.)
Velikost souboru ZIP (konzola) Maximálně 50 MB Maximálně 500 MB pro nasazení SOUBORU ZIP
Velikost souboru ZIP (CLI/SDK) Maximálně 250 MB pro nasazení ZIP, maximálně 500 MB pro nerozbalené soubory Maximálně 500 MB pro nasazení SOUBORU ZIP
Velikost obrazu kontejneru Maximálně 10 GB Podpora kontejnerů s flexibilním úložištěm prostřednictvím Azure
Zpracování velkých artefaktů Použijte obrazy kontejnerů pro větší nasazení Připojte úložiště Blob Storage nebo sdílené složky Azure Files ke zpřístupnění velkých souborů z aplikace.
Balení běžných závislostí do funkcí Vrstvy Nasazení .Zip souboru, na vyžádání z úložiště nebo kontejnerů (pouze pro SKU ACA, dedikované a EP).
Modrá-zelená implementace nebo verzování funkcí Pomocí kvalifikátorů funkcí můžete odkazovat na konkrétní stav funkce pomocí čísla verze nebo názvu aliasu. Kvalifikátory umožňují správu verzí a strategie postupného nasazení. Používejte systémy kontinuální integrace a průběžného doručování pro modro-zelené nasazení.

Limity času a paměti

Vlastnost Omezení AWS Lambda Omezení služby Azure Functions
Časový limit pro provedení 900 sekund (15 minut) Výchozí časový limit je 30 minut. Maximální časový limit je nevázaný. Je však stanoveno, že období odkladu pro provádění funkce je 60 minut během škálování dolů a 10 minut během aktualizací platformy. Pro další informace se podívejte na Časový limit funkční aplikace.
Konfigurovatelná paměť 128 MB až 10 240 MB v přírůstcích po 64 MB Funkce podporují velikosti 2 GB a 4 GB instancí. Každá oblast v daném předplatném má limit paměti 512 000 MB pro všechny instance aplikací, které můžete zvýšit voláním podpory. Celkové využití paměti všech instancí napříč všemi aplikacemi funkcí v oblasti musí zůstat v rámci této kvóty.

I když jsou možnosti velikosti instance 2 GB a 4 GB, souběžnost pro každou instanci může být vyšší než 1. Proto může jedna instance zpracovávat více souběžných spuštění v závislosti na konfiguraci. Odpovídající konfigurace souběžnosti může pomoct optimalizovat využití prostředků a spravovat výkon. Vyvážením přidělení paměti a nastavení souběžnosti můžete efektivně spravovat prostředky přidělené vašim aplikacím funkcí a zajistit efektivní výkon a řízení nákladů. Další informace najdete v části Kvóty paměti regionálního předplatného.

Správa tajemství

AWS Lambda Azure Functions
AWS Secrets Manager umožňuje ukládat, spravovat a načítat tajné kódy, jako jsou přihlašovací údaje databáze, klíče rozhraní API a další citlivé informace. Funkce lambda můžou načítat tajné kódy pomocí sady AWS SDK. Doporučujeme používat přístupy bez tajných údajů, jako jsou spravované identity, aby byl umožněn bezpečný přístup k prostředkům Azure bez pevného zakódování přihlašovacích údajů. Pokud se vyžadují tajné kódy, například pro partnerské nebo starší systémy, azure Key Vault poskytuje zabezpečené řešení pro ukládání a správu tajných kódů, klíčů a certifikátů.
Úložiště parametrů AWS Systems Manageru je služba, která ukládá konfigurační data a tajné kódy. Parametry je možné šifrovat pomocí služby AWS KMS a načíst funkcemi lambda pomocí sady AWS SDK.
Funkce lambda můžou ukládat nastavení konfigurace do proměnných prostředí. Citlivá data je možné zašifrovat pomocí klíče Služby správy klíčů pro zabezpečený přístup.
Azure Functions používá nastavení aplikace k ukládání konfiguračních dat. Tato nastavení přímo odpovídají proměnným prostředí pro snadné použití v rámci funkce. Tato nastavení je možné zašifrovat a bezpečně uložit v konfiguraci služby Azure App Service.
Pro pokročilejší scénáře poskytuje Azure App Configuration robustní funkce pro správu více konfigurací. Umožňuje označování funkcí a podporuje dynamické aktualizace napříč službami.

Správa stavu

AWS Lambda Azure Functions
AWS Lambda zpracovává jednoduchou správu stavu pomocí služeb jako Amazon S3 pro úložiště objektů, DynamoDB pro rychlé a škálovatelné úložiště stavu NoSQL a SQS pro zpracování front zpráv. Tyto služby zajišťují trvalost a konzistenci dat napříč prováděními funkcí Lambda. Azure Functions používá AzureWebJobsStorage ke správě stavu, povolování vazeb a triggerů se službami Azure Storage, jako je Blob Storage, Queue Storage a Table Storage. Umožňuje funkcím snadno číst a zapisovat stav. Pro složitější správu stavu poskytuje Durable Functions pokročilé možnosti orchestrace pracovních postupů a trvalosti stavu pomocí Azure Storage.

Stavová orchestrace

AWS Lambda Azure Functions
Žádná vlastní orchestrace systému. Použití AWS Step Functions pro pracovní postupy. Durable Functions pomáhá při složité správě stavu poskytováním trvalé orchestraci pracovních postupů a stavových entit. Umožňuje dlouhotrvající operace, automatické vytváření kontrolních bodů a trvalost spolehlivého stavu. Tyto funkce umožňují vytvářet složité pracovní postupy, které zajišťují odolnost proti chybám a škálovatelnost stavových aplikací.

Další rozdíly a důležité informace

Vlastnost AWS Lambda Azure Functions
Seskupovací funkce Každá funkce AWS Lambda je nezávislá entita. Aplikace funkcí slouží jako kontejner pro více funkcí. Poskytuje sdílený kontext spuštění a konfiguraci pro funkce, které obsahuje. Zacházení s více funkcemi jako s jednou entitou zjednodušuje nasazení a správu. Funkce také používají strategii škálování jednotlivých funkcí, kdy se každá funkce škáluje nezávisle, s výjimkou triggerů HTTP, Blob Storage a Durable Functions. Tyto aktivované funkce se škálují ve svých vlastních skupinách.
Vlastní domény Povoleno přes bránu rozhraní API Vlastní domény můžete nakonfigurovat přímo v aplikaci funkcí nebo ve službě Azure API Management.
Podpora vlastních kontejnerů Podporuje vlastní kontejnery pomocí kontejnerového obrazu Lambda. Azure Functions podporuje vlastní kontejnery, které běží v prostředí Container Apps.

Vytvoření plánu migrace

  1. Výběr klíčových úloh pro testování konceptu

    Začněte výběrem jedné až dvou středně velkých, nekritických úloh z celkového inventáře. Tyto úlohy slouží jako základ pro migraci v rámci proof-of-concept. Proces můžete otestovat a identifikovat potenciální výzvy bez rizika velkého přerušení vašich operací.

  2. Testujte iterativním způsobem a shromážděte zpětnou vazbu.

    Návod

    Pomocí této výzvy v režimu vlastního chatu můžete kdykoli zkontrolovat aktuální stav procesu migrace:

    /LambdaMigration-GetStatus
    

    Pomocí testování konceptu můžete shromáždit zpětnou vazbu, identifikovat mezery a doladit proces před škálováním na větší úlohy. Tento iterativní přístup zajišťuje, že v době, kdy přejdete na úplnou migraci, vyřešíte potenciální výzvy a proces zpřesníte.

Vytvořit zdroje pro migraci

Tento krok je přechodovou fází vývoje. Během této fáze sestavíte zdrojový kód, infrastrukturu jako kód (IaC) a kanály nasazení, které představují úlohy v Azure. Před provedením migrace musíte přizpůsobit kód funkce pro kompatibilitu a osvědčené postupy.

Přizpůsobení kódu funkce, konfiguračních souborů a infrastruktury jako souborů kódu

Aktualizace kódu pro požadavky modulu runtime Azure Functions:

  • Upravte kód tak, aby dodržoval programovací model Azure Functions. Přizpůsobte si například podpisy funkcí tak, aby odpovídaly formátu, který služba Azure Functions vyžaduje. Další informace o definici funkce a kontextu spuštění najdete v příručkách pro vývojáře azure Functions.

  • Sada rozšíření Azure Functions slouží ke zpracování různých vazeb a triggerů, které jsou podobné službám AWS. Pro aplikace .NET byste měli místo sady rozšíření použít příslušné balíčky NuGet.

  • Sadu rozšíření použijte k integraci s dalšími službami Azure, jako jsou Azure Storage, Azure Service Bus a Azure Cosmos DB, aniž byste museli ručně konfigurovat každou vazbu prostřednictvím sad SDK. Další informace najdete v tématu Připojení funkcí ke službám Azure pomocí vazeb a vzorů vazeb vazeb Azure Functions.

Tyto fragmenty kódu jsou příklady běžných kódů sady SDK. Kód AWS Lambda se mapuje na příslušné triggery, vazby nebo fragmenty kódu SDK ve službě Azure Functions.

Čtení z Amazonu S3 oproti Azure Blob Storage

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

Kód Azure Functions (spouštěč)

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

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

Zápis do služby Amazon Simple Queue Service (SQS) versus Azure Queue Storage

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

Kód Azure Functions (spouštěč)

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

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

Zápis do DynamoDB versus Azure Cosmos DB

Kód 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); 
}; 

Kód Azure Functions (spouštěč)

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

Události Amazon CloudWatch proti spouštěči časovače Azure

Kód AWS Lambda (SDK)

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

Kód Azure Functions (spouštěč)

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

app.timer('timerTrigger', { schedule: '0 */5 * * * *', // Runs every 5 minutes }, async (context, myTimer) => { if (myTimer.isPastDue) { context.log('Timer is running late!'); } context.log(Timer function executed at: ${new Date().toISOString()}); });

Amazon Simple Notification Service (SNS) versus aktivační událost služby Azure Event Grid

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

Kód Azure Functions (spouštěč)

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

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

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

}); 

Amazon Kinesis versus Azure Event Hubs trigger

Kód 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); 
}; 

Kód Azure Functions (spouštěč)

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

Porovnání kódu AWS Lambda a kódu Azure Functions najdete v následujících úložištích GitHubu:

Úprava nastavení konfigurace

Ujistěte se, že jsou nastavení časového limitu a paměti vaší funkce kompatibilní se službou Azure Functions. Další informace o konfigurovatelných nastaveních najdete v tématuhost.json referenční informace ke službě Azure Functions.

Postupujte podle doporučených osvědčených postupů pro oprávnění, přístup, sítě a konfigurace nasazení.

Konfigurace oprávnění

Při nastavování oprávnění k aplikacím funkcí dodržujte osvědčené postupy. Další informace najdete v tématu Konfigurace aplikace funkcí a účtu úložiště se spravovanou identitou.

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

Další informace najdete v tématu rbac.bicep.

Konfigurace síťového přístupu

Azure Functions podporuje integraci virtuální sítě, která vaší aplikaci funkcí poskytuje přístup k prostředkům ve vaší virtuální síti. Po integraci vaše aplikace směruje odchozí provoz přes virtuální síť. Aplikace pak může přistupovat k privátním koncovým bodům nebo prostředkům pomocí pravidel, která povolují provoz jenom z konkrétních podsítí. Pokud je cílem IP adresa mimo virtuální síť, je zdrojová IP adresa jednou z adres uvedených ve vlastnostech vaší aplikace, pokud nenakonfigurujete bránu NAT.

Když povolíte integraci virtuální sítě pro funkční aplikace, postupujte podle osvědčených postupů v průvodci osvědčenými postupy pro integraci virtuální sítě pro webové a funkční aplikace.

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

Další informace najdete v tématu VNet.bicep a storage-PrivateEndpoint.bicep.

Konfigurace nastavení nasazení

Nasazení se řídí jednou cestou. Jakmile vytvoříte kód projektu a zazipujete ho do balíčku aplikace, nasaďte ho do kontejneru Blob Storage. Když se aplikace spustí, načte balíček a spustí váš funkční kód. Ve výchozím nastavení slouží stejný účet úložiště, který ukládá interní metadata hostitele, například AzureWebJobsStoragetaké jako kontejner nasazení. Můžete ale použít alternativní účet úložiště nebo zvolit upřednostňovanou metodu ověřování tím, že nakonfigurujete nastavení nasazení vaší aplikace. Další informace najdete v tématu Podrobnosti o technologii nasazení a Konfigurace nastavení nasazení.

Generování souborů IaC

  • Pomocí nástrojů, jako jsou Bicep, šablony Azure Resource Manageru nebo Terraform, můžete vytvářet soubory IaC pro nasazení prostředků Azure.

    Návod

    Pomocí této výzvy v režimu vlastního chatu můžete generovat soubory infrastruktury jako kódu (IaC) pro Azure Functions:

    /LambdaMigration-Phase3-GenerateFunctionsInfra
    
  • Definujte prostředky, jako jsou Azure Functions, účty úložiště a síťové komponenty v souborech IaC.

  • Toto úložiště ukázek IaC použijte pro ukázky , které používají doporučení a osvědčené postupy Azure Functions.

Použijte nástroje pro refaktoring

Používejte nástroje, jako je GitHub Copilot ve VS Code, které vám pomohou s refaktoringem kódu, provádějte ruční refaktoring pro konkrétní změny nebo využijte další pomůcky pro migraci.

Poznámka:

V editoru VS Code použijte režim agenta na GitHubu Copilot.

Následující články obsahují konkrétní příklady a podrobné kroky pro usnadnění procesu migrace:

Vyvinout postup krok za krokem pro migraci v nultý den

Vyvíjejte strategie převzetí služeb při selhání a navrácení služeb po obnovení pro migraci a důkladně je otestujte v předprodukčním prostředí. Před dokončením přechodu z AWS Lambda na Azure Functions doporučujeme provést kompletní testování.

  • Ověření funkčnosti

    • Kód a místní testování služby Azure Functions

    • Důkladně otestujte každou funkci, abyste měli jistotu, že funguje podle očekávání. Tyto testy by měly zahrnovat ověření vstupu a výstupu, triggerů událostí a vazeb.

      Návod

      Použijte tento vlastní režim chatu k ověření migrovaného kódu Azure Functions:

      /LambdaMigration-Phase4-ValidateCode
      
    • Pomocí nástrojů, jako jsou rozšíření curl nebo REST Client v editoru VS Code, můžete odesílat požadavky HTTP pro funkce aktivované protokolem HTTP.

    • U jiných triggerů, jako jsou časovače nebo fronty, se ujistěte, že se triggery aktivují správně, a funkce se spouštějí podle očekávání.

  • Ověření výkonu

    • Proveďte testování výkonu a porovnejte nové nasazení Azure Functions s předchozím nasazením AWS Lambda.

    • Monitorujte metriky, jako je doba odezvy, doba běhu a spotřeba prostředků.

      Návod

      K ověření konfigurace infrastruktury použijte tento vlastní režim chatu:

      /LambdaMigration-Phase5-ValidateInfra
      
    • Application Insights můžete použít k monitorování, analýze protokolů a řešení potíží během testovací fáze.

  • Řešení potíží pomocí funkce diagnostiky a řešení problémů

    K řešení potíží s aplikací funkcí použijte funkci diagnostika a řešení problémů na webu Azure Portal. Tento nástroj poskytuje sadu diagnostických funkcí, které vám můžou pomoct rychle identifikovat a řešit běžné problémy, jako jsou chyby aplikací, snížení výkonu a problémy s konfigurací. Postupujte podle návodu k řešení potíží a doporučení, které nástroj poskytuje k řešení problémů, které identifikujete.

Vyhodnocení koncového stavu migrované úlohy

Než v AWS vyřadíte prostředky z provozu, musíte mít jistotu, že platforma splňuje aktuální očekávání úloh a že nic neblokuje údržbu úloh nebo další vývoj.

Nasaďte a otestujte funkce pro ověření jejich výkonu a správnosti.

Nasazení do Azure

Návod

Použijte tento vlastní režim chatu k nasazení ověřeného projektu do Azure:

/LambdaMigration-Phase6-DeployToAzure

Nasaďte úlohy pomocí funkce publikování VS Code . Úlohy můžete také nasadit z příkazového řádku pomocí nástrojů Azure Functions Core Tools nebo Azure CLI. Azure DevOps a GitHub Actions také používají One Deploy.

  • Azure Functions Core Tools: Nasaďte aplikaci funkcí pomocí nástrojů Azure Functions Core Tools s příkazem func azure functionapp publish <FunctionAppName> .

  • Kanály kontinuální integrace a průběžného nasazování (CI/CD): Nastavte kanál CI/CD pomocí služeb, jako jsou GitHub Actions, Azure DevOps nebo jiný nástroj CI/CD.

Další informace najdete v tématu Průběžné doručování pomocí GitHub Actions nebo průběžného doručování pomocí Azure Pipelines.

Prozkoumání ukázkových scénářů migrace

Pomocí úložiště MigrationGetStarted jako šablony zahajte testování konceptu. Toto úložiště obsahuje projekt Azure Functions připravený k nasazení, který má infrastrukturu a soubory zdrojového kódu, které vám pomůžou začít.

Pokud raději používáte Terraform, použijte místo toho MigrationGetStarted-Terraform .

Optimalizace a monitorování výkonu aplikace v Azure

Po migraci úloh doporučujeme prozkoumat další funkce v Azure. Tyto funkce vám můžou pomoct splnit budoucí požadavky na úlohy a pomoci zavřít mezery.

Použití Application Insights k monitorování a řešení potíží

Povolte Application Insights pro vaši aplikaci funkcí, abyste mohli shromažďovat podrobná telemetrická data pro účely monitorování a řešení potíží. Application Insights můžete povolit prostřednictvím webu Azure Portal nebo v konfiguračním souboru aplikace funkcí host.json. Po povolení Application Insights můžete:

  • Shromážděte telemetrická data. Application Insights poskytuje různá telemetrická data, jako jsou protokoly požadavků, metriky výkonu, výjimky a závislosti.

  • Analyzujte protokoly a metriky. Přístup k řídicímu panelu Application Insights z webu Azure Portal vám umožní vizualizovat a analyzovat protokoly, metriky a další telemetrická data. Pomocí integrovaných nástrojů můžete vytvářet vlastní dotazy a vizualizovat data, abyste získali přehled o výkonu a chování aplikace funkcí.

  • Nastavte upozornění. Nakonfigurujte upozornění ve službě Application Insights, která vás upozorní na kritické problémy, snížení výkonu nebo konkrétní události. Tato upozornění vám pomůžou aktivně monitorovat a rychle reagovat na problémy.

Optimalizace nákladů a výkonu

  • Optimalizace škálování a výkonu:

    • Efektivní zpracování různých úloh pomocí funkcí automatického škálování

    • Optimalizujte kód funkce, abyste zlepšili výkon tím, že zkracují dobu běhu, optimalizují závislosti a používají efektivní postupy kódování.

    • Implementujte strategie ukládání do mezipaměti, abyste snížili opakované zpracování a latenci pro často přístupná data.

  • Správa nákladů:

    • Pomocí nástrojů Microsoft Cost Management můžete monitorovat a analyzovat náklady na Azure Functions.

    • Nastavte si upozornění na rozpočet a náklady pro efektivní správu a predikci výdajů.