Megosztás a következőn keresztül:


AWS Lambda számítási feladatok migrálása az Azure Functionsbe

Az Amazon Web Services (AWS) Lambdát használó kiszolgáló nélküli számítási feladatok Azure Functionsbe való migrálása gondos tervezést és megvalósítást igényel. Ez a cikk alapvető útmutatást nyújt a segítségére:

  • Végezzen felderítési folyamatot a meglévő számítási feladaton.
  • Megtudhatja, hogyan hajthat végre olyan kulcsfontosságú migrálási tevékenységeket, mint a premigráció tervezése és a számítási feladatok felmérése.
  • Migrált számítási feladatok kiértékelése és optimalizálása.

Hatókör

Ez a cikk egy AWS Lambda-példány Azure Functionsbe való migrálását ismerteti.

Ez a cikk nem foglalkozik a következő címmel:

  • Migrálás saját tárolókezelési megoldásra, például az Azure Container Appsen keresztül.
  • AWS Lambda-tárolók üzemeltetése az Azure-ban.
  • A szervezet alapvető Azure-bevezetési megközelítései, például az Azure-célzónák vagy a felhőbevezetési keretrendszer migrálási módszertanában tárgyalt egyéb témakörök.

Egyéni csevegési mód áttelepítése

Az AWS Lambda-alkalmazások Visual Studio Code használatával történő migrálásának megkönnyítése érdekében az Azure Functions egyéni csevegési módot biztosít a GitHub Copilotban. Az alábbi lépésekkel hozzáadhatja az LambdaToFunctionMigration egyéni csevegési módot a projekthez a Visual Studio Code-ban:

  1. Ha még nem rendelkezik az Azure Visual Studio Code GitHub Copilot bővítményével, telepítse most.

  2. Nyissa meg a Lambda-projektet munkaterületként a Visual Studio Code-ban.

  3. Futtassa ezt az utasítást Ügynök módban a GitHub Copilotban.

    Help me migrate my Lambda app to Azure
    
  4. Amikor a rendszer az értesítési területen kéri, válassza a Telepítés lehetőséget az LambdaToFunctionMigration egyéni csevegési mód projekthez való hozzáadásához.

Mostantól használhatja az egyéni csevegésben definiált irányított utasításokat a migrálás minden szakaszához. Kezdjen el gépelni /LambdaMigration a csevegésben az elérhető parancsok teljes listájának megtekintéséhez.

Funkciók összehasonlítása

Ez a cikk az AWS Lambda funkcióit az Azure Functions-ekvivalensekre képezi le a kompatibilitás biztosítása érdekében.

Fontos

Dönthet úgy, hogy az optimalizálás szerepel a migrálási tervben, de a Microsoft kétlépéses folyamatot javasol. Először migrálja a "like-to-like" funkciókat, majd értékelje ki az optimalizálási lehetőségeket az Azure-ban.

Az optimalizálási erőfeszítéseknek folyamatosnak kell lenniük, és végig kell futniuk a számítási feladatok csapatának változásvezérlési folyamatain. A migrálás során további képességeket felvonultató migrálás kockázattal jár, és szükségtelenül meghosszabbítja a folyamatot.

Terhelés perspektívája

Ez a cikk az AWS Lambda számítási feladatok Azure Functionsbe való migrálásával és a kiszolgáló nélküli számítási feladatok gyakori függőségeivel foglalkozik. Ez a folyamat több szolgáltatást is magában foglalhat, mivel a számítási feladatok számos erőforrást és folyamatot tartalmaznak az erőforrások kezeléséhez. Átfogó stratégiához a cikkben ismertetett javaslatokat egy nagyobb csomaggal kell kombinálnia, amely magában foglalja a számítási feladat többi összetevőjét és folyamatát.

A meglévő munkaterhelés felderítési folyamatának végrehajtása

Az első lépés egy részletes felderítési folyamat végrehajtása a meglévő AWS Lambda-számítási feladatok kiértékeléséhez. A cél annak megértése, hogy mely AWS-szolgáltatásokra és -szolgáltatásokra támaszkodik a számítási feladat. Az AWS Lambda-függvények átfogó leltárának összeállításához használja az AWS eszközöket, mint például a szolgáltatásspecifikus SDK-k, API-k, a CloudTrail és az AWS CLI, hogy felmérje a munkaterhelést az AWS-en. Ismernie kell az AWS Lambda-leltár alábbi főbb jellemzőit:

  • Használati esetek
  • Konfigurációk
  • Biztonsági és hálózati beállítások
  • Eszközhasználati, monitorozási, naplózási és megfigyelhetőségi mechanizmusok
  • Függőségek
  • Megbízhatósági célkitűzések és aktuális megbízhatósági állapot
  • A tulajdonjog költsége
  • Teljesítménycélok és aktuális teljesítmény

Jótanács

Ezzel az egyéni csevegési móddal létrehozhat egy értékelő jelentést az AWS Lambda beállításához:

/LambdaMigration-Phase1-AssessLambdaProject

Premigrációs tervezés elvégzése

Mielőtt megkezdené a számítási feladatok migrálását, le kell képeznie az AWS Lambda funkcióit az Azure Functionsre a kompatibilitás biztosítása és a migrálási terv kidolgozása érdekében. Ezután kiválaszthatja a fő számítási feladatokat egy megvalósíthatósági igazoláshoz.

Emellett le kell képeznie azokat az AWS-szolgáltatásokat is, amelyektől Lambda az Azure egyenértékű függőségeitől függ.

Az AWS Lambda funkcióinak leképezése az Azure Functionsbe

Az alábbi táblázatok az AWS Lambda fogalmait, erőforrásait és tulajdonságait hasonlítják össze az Azure Functions megfelelő megfelelőivel, pontosabban a Flex Consumption üzemeltetési csomaggal.

Támogatott nyelvek

Programozási nyelv Az AWS Lambda által támogatott verziók Az Azure Functions által támogatott verziók
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 Nem támogatott 7,4
.NET .NET 8 .NET 8, .NET 9, .NET Framework 4.8.1
Ruby 3.2, 3.3 Egyéni kezelők
Go Csak operációs rendszer futtatókörnyezete Egyéni kezelők
Rozsda Csak operációs rendszer futtatókörnyezete Egyéni kezelők

Programozási modell

Tulajdonság AWS Lambda Azure Functions
Kiváltó okok Integrálható más AWS-szolgáltatásokkal eseményforrásokon keresztül. Automatikus és programozott módszereket biztosít a Lambda-függvények eseményforrásokkal való összekapcsolásához. Adott eseményeken alapuló függvényt aktivál, például egy adatbázisban lévő frissítéseket vagy egy üzenetsor új üzenetét. Egy Azure Cosmos DB-eseményindító például lehetővé teszi, hogy a függvények automatikusan válaszoljanak az Azure Cosmos DB-tárolókban található beszúrásokra és frissítésekre. Ez a művelet lehetővé teszi az adatváltozások valós idejű feldolgozását.

A Functions integrálható az Azure Event Griddel is, így feldolgozhatja az Azure-szolgáltatásokból származó eseményeket, például az Azure Storage-t és az Azure Media Servicest, valamint külső eseményforrásokat. Az Event Grid egy központosított, bővíthető esemény-útválasztási szolgáltatás, amely kiegészíti a Functions eseményindítóit, és lehetővé teszi a nagy skálázhatóságot és a széles körű eseményforrás-lefedettséget.
Kötések Nincsenek kötések. A Lambda-függvényeken belüli AWS SDK-k használatával manuálisan kezelheti a más AWS-szolgáltatásokkal való interakciókat. A bemenetként vagy kimenetként konfigurált kötések deklaratív kapcsolatokat tesznek lehetővé a szolgáltatásokhoz, ami minimálisra csökkenti az explicit SDK-kód szükségességét. Konfigurálhatja például a kötéseket a Blob Storage-ból való olvasásra, az Azure Cosmos DB-be való írásra, vagy e-mailek küldésére a SendGriden keresztül az integrációk manuális kezelése nélkül.

Eseményindítók és kötések

AWS Lambda eseményindító vagy szolgáltatás Azure Functions-eseményindító Leírás
API Gateway: HTTP-kérések HTTP-eseményindító Ezek az eseményindítók lehetővé teszik a HTTP-kérések közvetlen kezelését.
Egyszerű Üzenetsor-szolgáltatás (SQS) Azure Queue Storage-eseményindító vagy Azure Service Bus-eseményindító Ezek az eseményindítók feldolgozhatják az üzenetsorokban lévő üzeneteket.
Egyszerű értesítési szolgáltatás (SNS) Event Grid-eseményindító vagy Service Bus-eseményindító Ezek az eseményindítók lehetővé teszik az értesítések feldolgozását.
Kinesis (adatfolyamok) Event Hubs-eseményindító Ezek az eseményindítók adatfolyamokat használnak fel.
DynamoDB (táblamódosítások) Azure Cosmos DB változásfigyelő aktiváló Ezek az eseményindítók figyelik a táblák változásait.
CloudWatch-események vagy EventBridge Scheduler Időzítő indító Ezek az eseményindítók ütemezett vagy időalapú függvényeket kezelnek.
S3 (objektumesemények) Blob Storage-eseményindító Ezek az eseményindítók reagálnak a blobtárolóban lévő eseményekre.
Amazon relációsadatbázis-szolgáltatás (RDS) Azure SQL-eseményindító Ezek az eseményindítók reagálnak az adatbázis változásaira.
Felügyelt streaming az Apache Kafka számára (MSK) Apache Kafka-eseményindító Ezek az eseményindítók reagálnak a Kafka-témahírekre.
Amazon ElastiCache Azure Redis-eseményindító Ezek az eseményindítók a Redisben lévő üzenetekre reagálnak.
Amazon MQ RabbitMQ eseményindító Ezek az eseményindítók reagálnak a RabbitMQ üzeneteire.

Engedélyek

AWS Lambda Azure Functions
A Lambda végrehajtási szerepkör engedélyezi a Lambda-függvények számára a más AWS-szolgáltatásokkal való interakciót. Minden Lambda-függvény rendelkezik egy identitás- és hozzáférés-kezelési (IAM) szerepkörsel, amely meghatározza a futtatás közbeni engedélyeit. A felügyelt identitások olyan identitást biztosítanak a függvényalkalmazás számára, amely lehetővé teszi a hitelesítést más Azure-szolgáltatásokkal anélkül, hogy hitelesítő adatokat tárol a kódban. A szerepköralapú hozzáférés-vezérlés megfelelő szerepköröket rendel a felügyelt identitáshoz a Microsoft Entra ID-ban, hogy hozzáférést biztosítson a szükséges erőforrásokhoz.
Erőforrás-alapú szabályzatok

- AWSLambda_FullAccess teljes hozzáférést biztosít minden Lambda-művelethez, beleértve a függvények létrehozását, frissítését és törlését.

- AWSLambda_ReadOnlyAccess olvasási jogot biztosít a Lambda-függvények és azok konfigurációinak megtekintésére.

- Egyéni IAM-szabályzatok.
Erőforrás-alapú beépített szerepkörök:

– A tulajdonosi szerepkör teljes hozzáférést biztosít, beleértve a hozzáférési engedélyek kezelését is.

– A közreműködői szerepkör képes függvényalkalmazások létrehozására és törlésére, beállítások konfigurálására és kód üzembe helyezésére. Nem tudja kezelni a hozzáférést.

– Az Olvasó szerepkör csak olvasási hozzáférést biztosíthat a figyelési adatokhoz és beállításokhoz. Egyéni szerepköröket is hozzárendelhet.

Függvény URL

AWS Lambda Azure Functions
https://<url-id>.lambda-url.<region>.on.aws - <appname>.azurewebsites.net (eredeti, globális alapértelmezett állomásnév)

- <appname>-<randomhash>.<Region>.azurewebsites.net (új, egyedi alapértelmezett állomásnév)

hálózat

AWS Lambda Azure Functions
Minden Lambda-függvény biztonságosan fut egy alapértelmezett rendszer által felügyelt virtuális magánfelhőben (VPC). A Lambda-függvényt úgy is konfigurálhatja, hogy egy egyéni VPC-ben lévő erőforrásokhoz férhessen hozzá. A függvényalkalmazások biztonságossá tehetik a hálózatot, és hozzáférhetnek a hálózaton belüli egyéb szolgáltatásokhoz. A bejövő hálózati hozzáférés csak az IP-címek tűzfallistájára és egy adott virtuális hálózatra korlátozható szolgáltatásvégpontokon vagy privát végpontokon keresztül. A kimenő hálózati hozzáférés a virtuális hálózati integrációs funkcióval engedélyezve van. A függvényalkalmazás teljes forgalmát a virtuális hálózat alhálózatára korlátozhatja, és a virtuális hálózaton belüli egyéb szolgáltatásokat is elérheti.

Megfigyelhetőség és monitorozás

AWS Lambda Azure Functions
Az Amazon CloudWatch metrikák gyűjtésével és nyomon követésével, naplók összesítésével és elemzésével, riasztások beállításával, egyéni irányítópultok létrehozásával, valamint az erőforrás-teljesítmény és a metrikák változásaira adott automatizált válaszok implementálásával segíti a figyelést és a megfigyelhetőséget. Az Azure Monitor átfogó monitorozást és megfigyelhetőséget biztosít az Azure Functions számára, különösen az Application Insights szolgáltatásán keresztül.

Az Application Insights telemetriai adatokat gyűjt, például a kérések arányát, a válaszidőket és a hibaarányokat. Megjeleníti az alkalmazásösszetevő-kapcsolatokat, figyeli a valós idejű teljesítményt, naplózza a részletes diagnosztikát, és lehetővé teszi az egyéni metrikakövetést. Ezek a képességek segítenek fenntartani az Azure Functions teljesítményét, rendelkezésre állását és megbízhatóságát, miközben egyéni irányítópultokat, riasztásokat és automatizált válaszokat is lehetővé tesz.
Az AWS Lambda telemetriai adatokat hoz létre a függvényhívásokból, és OpenTelemetria szemantikával exportálhatja ezeket az adatokat. A Lambda-függvények konfigurálhatók úgy, hogy ezeket a telemetriai adatokat bármely OpenTelemetry-kompatibilis végpontra elküldjék. Ez a művelet lehetővé teszi a nyomkövetések és naplók, a konzisztens szabványokon alapuló telemetriai adatok korrelációját, valamint az OpenTelemetryt támogató egyéb megfigyelhetőségi eszközökkel való integrációt. Konfigurálja a függvényalkalmazást a napló- és nyomkövetési adatok OpenTelemetria formátumban való exportálásához. A telemetriai adatokat bármely megfelelő végpontba exportálhatja az OpenTelemetry használatával. Az OpenTelemetria olyan előnyöket biztosít, mint a nyomkövetések és naplók korrelációja, konzisztens szabványalapú telemetriai adatok és más szolgáltatókkal való integráció. Az OpenTelemetry a függvényalkalmazás szintjén engedélyezhető a kiszolgáló konfigurációjában és a kódprojektben a függvénykódból történő adatexportálás optimalizálásához. További információ: OpenTelemetry használata az Azure Functionsben.

Skálázás és egyidejűség

AWS Lambda Azure Functions
Az AWS igény szerinti skálázási modellt használ. A függvényművelet automatikus skálázása igény szerint. Az egyidejűség vagy a példány által kezelt kérelmek száma mindig 1. A rendszer dinamikusan hozzáadja és eltávolítja a példányokat a bejövő események száma és az egyes példányok konfigurált egyidejűsége alapján. Konfigurálhatja az egyidejűségi beállítást a kívánt értékre.
Az egyidejűség értéke mindig 1. Az egyidejűség konfigurálható (>1).
Támogatja a 0-ra történő skálázást. Támogatja a 0-ra történő skálázást.

Hidegindítás elleni védelem

AWS Lambda Azure Functions
A kiosztott egyidejűség csökkenti a késést, és a kért számú függvénypéldány előzetes inicializálásával kiszámítható függvényteljesítményt biztosít. Az előre kiosztott egyidejűség megfelel a késésre érzékeny alkalmazásoknak, és külön van árazva a standard egyidejűségtől. A függvényalkalmazások lehetővé teszik az egyidejűség konfigurálását példányonként, amely meghatározza a skálázást. Több feladat is futtatható párhuzamosan az alkalmazás ugyanazon példányában, és a példány későbbi feladatai nem járnak a kezdeti hidegindítással. A függvényalkalmazások mindig kész példányokkal is rendelkeznek. Az ügyfelek bizonyos számú előre felmelegített példányt is megadhatnak a hidegindítási késés kiküszöbölése és a konzisztens teljesítmény biztosítása érdekében. A függvényalkalmazások igény szerint több példányra is felskálázhatók, miközben fenntartják a mindig kész példányokat.
A fenntartott egyidejűség a függvények egyidejű példányainak maximális számát adja meg. Ez a korlát biztosítja, hogy a fiók egyidejűségi kvótájának egy része kizárólag e függvény számára legyen félretéve. Az AWS Lambda dinamikusan skálázza ki a bejövő kéréseket, még akkor is, ha a fenntartott egyidejűség be van állítva, feltéve, hogy a kérések nem lépik túl a megadott fenntartott egyidejűségi korlátot. Az AWS Lambdában a fenntartott egyidejűség alsó korlátja 1. Az AWS Lambdában a fenntartott egyidejűség felső korlátját a fiók regionális egyidejűségi kvótája határozza meg. Alapértelmezés szerint ez a korlát 1000 egyidejű művelet minden régióban. Az Azure Functions nem rendelkezik a fenntartott egyidejűséggel egyenértékű funkcióval. A hasonló funkciók eléréséhez elkülönítse az egyes függvényeket külön függvényalkalmazásokra, és állítsa be az egyes alkalmazások maximális vertikális felskálázási korlátját. Az Azure Functions dinamikusan felskáláz, vagyis több példányt ad hozzá, illetve leskáláz, vagyis eltávolít példányokat, a beállított skálázási korláton belül. Alapértelmezés szerint a Rugalmas használat csomagban futó alkalmazások 100 teljes példány konfigurálható korlátjával kezdődnek. A legalacsonyabb maximális példányszám értéke 40, a legmagasabb támogatott maximális példányszám pedig 1000. A regionális előfizetések memóriakvótái korlátozhatják a függvényalkalmazások méretének növelését is, de ezt a kvótát az ügyfélszolgálat meghívásával növelheti.

Árképzés

AWS Lambda Azure Functions
- Használatalapú fizetés a hívások teljes számáért és az egyes példányok GB/s fogyasztásáért (1-es rögzített egyidejűséggel)

- 1 ms-os növekmények

- 400 000 Gbps ingyenes szint
- Használatalapú fizetés a teljes hívásszámért és az egyes példányok GB/s-ért (konfigurálható egyidejű hívásokkal)

- 100 ms-os növekmények

- 100 000 Gbps ingyenes szint

- Felhasználásalapú költségek

Forráskód tárolója

AWS Lambda Azure Functions
Az AWS Lambda a függvénykód tárolását a saját felügyelt tárolórendszerében kezeli. Nem kell több tárhelyet biztosítania. A Functions használatához egy ügyfél által biztosított Blob Storage-tárolóra van szükség az alkalmazás kódját tartalmazó központi telepítési csomag fenntartásához. A beállításokat konfigurálhatja úgy, hogy ugyanazt vagy egy másik tárfiókot használjanak az üzemelő példányokhoz, és kezelheti a tárolóhoz való hozzáférés hitelesítési módszereit.

Helyi fejlesztés

AWS Lambda funkció Azure Functions-funkció
- SAM CLI

- LocalStack
- Azure Functions Core Tools

- Visual Studio Code

- Visual Studio

- GitHub Codespaces

- VSCode.dev

-Maven

- Az Azure Functions helyi kódolása és tesztelése

Telepítés

Tulajdonság AWS Lambda Azure Functions
Üzembehelyezési csomag - ZIP-fájl

- Konténerkép
ZIP-fájl (Tárolórendszerkép üzembe helyezéséhez használja a dedikált vagy prémium termékváltozatot.)
ZIP-fájl mérete (konzol) Legfeljebb 50 MB Legfeljebb 500 MB zip-telepítés esetén
ZIP-fájl mérete (CLI/SDK) LEGFELJEBB 250 MB a ZIP-telepítéshez, legfeljebb 500 MB a kibontott példányokhoz Legfeljebb 500 MB zip-telepítés esetén
Konténerkép mérete Maximálisan 10 GB Tárolótámogatás rugalmas tárolással az Azure-on keresztül
Nagyméretű műtárgyak kezelése A konténerképek használata nagyobb telepítésekhez. Blob Storage- vagy Azure Files-megosztásokat csatolhat a nagyméretű fájlok alkalmazásból való eléréséhez.
A függvényekhez való gyakori függőségek csomagolása Rétegek Telepítés .Zip, igény szerint tárolóból vagy konténerekből (kizárólag ACA, dedikált, EP SKU-k esetén)
Kék-zöld üzembe helyezés vagy függvény verziószámozása A függvény minősítőivel egy verziószám vagy egy aliasnév használatával hivatkozhat a függvény egy adott állapotára. A minősítők lehetővé teszik a verziókezelést és a fokozatos üzembe helyezési stratégiákat. Használjon folyamatos integrációs és folyamatos szállítási rendszereket a kék-zöld telepítésekhez.

Időtúllépési és memóriakorlátok

Tulajdonság Az AWS Lambda korlátai Az Azure Functions korlátai
Végrehajtási időkorlát 900 másodperc (15 perc) Az alapértelmezett időkorlát 30 perc. A maximális időtúllépés nincs korlátozva. A függvény végrehajtásának türelmi ideje azonban 60 perc a skálázás során, és 10 perc a platformfrissítések során. További információt a(z) Függvényalkalmazás időtúllépési időtartama lapon talál.
Konfigurálható memória 128 MB–10 240 MB, 64 MB-os növekményekben A Functions támogatja a 2 GB-os és a 4 GB-os példányméreteket. Egy adott előfizetés minden régiója 512 000 MB memóriakorláttal rendelkezik az összes alkalmazáspéldány esetében, amelyet a támogatási szolgálat meghívásával növelheti. A régió összes függvényalkalmazásában található összes példány teljes memóriahasználatának ebben a kvótában kell maradnia.

Bár a példányok mérete 2 GB és 4 GB lehet, minden egyes példány esetén az egyidejűség meghaladhatja az 1-et. Ezért egyetlen példány több egyidejű végrehajtást is képes kezelni a konfigurációtól függően. Az egyidejűség megfelelő konfigurálása segíthet optimalizálni az erőforrás-használatot és kezelni a teljesítményt. A memóriafoglalási és egyidejűségi beállítások kiegyensúlyozásával hatékonyan kezelheti a függvényalkalmazások számára lefoglalt erőforrásokat, és hatékony teljesítmény- és költségszabályozást biztosíthat. További információ: Regionális előfizetések memóriakvótái.

Titkos kódok kezelése

AWS Lambda Azure Functions
Az AWS Titkos kódok kezelője lehetővé teszi olyan titkos kódok tárolását, kezelését és lekérését, mint az adatbázis hitelesítő adatai, AZ API-kulcsok és más bizalmas információk. A Lambda-függvények az AWS SDK használatával lekérhetik a titkos kulcsokat. Javasoljuk, hogy olyan titok nélküli megközelítéseket alkalmazzon, mint a felügyelt identitások, hogy lehetővé tegye az Azure-erőforrásokhoz való biztonságos hozzáférést a hitelesítő adatok kódolása nélkül. Ha titkos kulcsokra van szükség, például partner- vagy örökölt rendszerek esetén, az Azure Key Vault biztonságos megoldást kínál a titkos kulcsok, kulcsok és tanúsítványok tárolására és kezelésére.
Az AWS Systems Manager paramétertároló egy olyan szolgáltatás, amely konfigurációs adatokat és titkos kulcsokat tárol. A paraméterek AWS KMS használatával titkosíthatók, és a Lambda függvények az AWS SDK használatával kérhetők le.
A Lambda-függvények környezeti változókban tárolhatják a konfigurációs beállításokat. A bizalmas adatok kmS-kulccsal titkosíthatók a biztonságos hozzáférés érdekében.
Az Azure Functions alkalmazásbeállításokat használ a konfigurációs adatok tárolásához. Ezek a beállítások közvetlenül a környezeti változókhoz vannak rendelve a függvényen belüli egyszerű használat érdekében. Ezek a beállítások titkosíthatók és biztonságosan tárolhatók az Azure App Service konfigurációjában.
A fejlettebb forgatókönyvek esetében az Azure App Configuration robusztus funkciókat biztosít több konfiguráció kezeléséhez. Lehetővé teszi a szolgáltatások megjelölését, és támogatja a dinamikus frissítéseket a szolgáltatások között.

Állapotkezelés

AWS Lambda Azure Functions
Az AWS Lambda olyan szolgáltatások használatával kezeli az egyszerű állapotkezelést, mint az Amazon S3 objektumtároláshoz, a DynamoDB a gyors és méretezhető NoSQL-állapottároláshoz, valamint az üzenetsorok kezelésére szolgáló SQS. Ezek a szolgáltatások biztosítják az adatok megőrzését és konzisztenciáját a Lambda-függvények végrehajtása során. Az Azure Functions az állapotát a AzureWebJobsStorage használatával kezeli kötések és "triggers" engedélyezésével az Azure Storage-szolgáltatásokkal, például a Blob Storage-gal, a Queue Storage-gal és a Table Storage-gal. Lehetővé teszi a függvények számára az állapotok egyszerű olvasását és írását. Az összetettebb állapotkezelés érdekében a Durable Functions fejlett munkafolyamat-vezénylési és állapotmegőrzési képességeket biztosít az Azure Storage használatával.

Állapotalapú vezénylés

AWS Lambda Azure Functions
Nincs natív rendszervezérlés. Az AWS-lépésfüggvények használata munkafolyamatokhoz. A Durable Functions tartós munkafolyamat-vezénylés és állapotalapú entitások biztosításával segít az összetett állapotkezelésben. Lehetővé teszi a hosszú ideig futó műveleteket, az automatikus ellenőrzőpontozást és a megbízható állapotmegőrzést. Ezek a funkciók lehetővé teszik a bonyolult munkafolyamatok létrehozását az állapotalapú alkalmazások hibatűrésének és méretezhetőségének biztosítása érdekében.

Egyéb különbségek és szempontok

Tulajdonság AWS Lambda Azure Functions
Csoportosító függvények Minden AWS Lambda-függvény egy független entitás. A függvényalkalmazások több függvény tárolójaként szolgálnak. Megosztott végrehajtási környezetet és konfigurációt biztosít a benne található függvényekhez. Több függvény egyetlen entitásként való kezelése leegyszerűsíti az üzembe helyezést és a felügyeletet. A Függvények függvényenkénti skálázási stratégiát is használnak, ahol az egyes függvények egymástól függetlenül vannak skálázva, kivéve a HTTP, a Blob Storage és a Durable Functions eseményindítóit. Ezek az aktivált függvények a saját csoportjaikban skálázhatók.
Egyedi domainek API Gatewayen keresztül engedélyezve Egyéni tartományokat konfigurálhat közvetlenül egy függvényalkalmazásban vagy az Azure API Managementben.
Saját tároló támogatása Egyéni tárolók támogatása a Lambda Container Image-en keresztül Az Azure Functions támogatja a Container Apps-környezetben futó egyéni tárolókat.

Migrálási terv létrehozása

  1. Válassza ki a fő számítási feladatokat a koncepció igazolásához.

    Először válasszon ki egy-két közepes méretű, nem kritikus számítási feladatot a teljes készletből. Ezek a számítási feladatok szolgálnak a megvalósíthatósági igazolások migrálásának alapjaként. Tesztelheti a folyamatot, és azonosíthatja a lehetséges kihívásokat anélkül, hogy jelentős fennakadásokat kockáztathat a műveletekben.

  2. Tesztelje iteratív módon, és gyűjtsön visszajelzést.

    Jótanács

    Ezzel az egyéni csevegési móddal bármikor ellenőrizheti az áttelepítési folyamat aktuális állapotát:

    /LambdaMigration-GetStatus
    

    A koncepció bizonyítékával visszajelzéseket gyűjthet, azonosíthatja a hiányosságokat, és finomhangolhatja a folyamatot, mielőtt nagyobb számítási feladatokra skálázhat. Ez az iteratív megközelítés biztosítja, hogy a teljes léptékű migrálásra való áttérésig a lehetséges kihívásokat kezelje, és finomítsa a folyamatot.

A migrálási eszközök létrehozása

Ez a lépés egy átmeneti fejlesztési fázis. Ebben a fázisban forráskódokat, kódként használt infrastruktúrát (IaC) és üzembe helyezési folyamatokat hozhat létre az Azure számítási feladatainak megjelenítéséhez. A migrálás végrehajtása előtt át kell igazítania a függvénykódot a kompatibilitáshoz és az ajánlott eljárásokhoz.

A függvénykód, a konfigurációs fájlok és az infrastruktúra-kód fájljainak adaptálása

Az Azure Functions futtatókörnyezeti követelményeihez tartozó kód frissítése:

  • Módosítsa a kódot úgy, hogy megfeleljen az Azure Functions programozási modelljének. A függvények aláírásait például az Azure Functions által igényelt formátumnak megfelelően alakíthatja át. A függvénydefinícióval és a végrehajtási környezettel kapcsolatos további információkért tekintse meg az Azure Functions fejlesztői útmutatóját.

  • Az Azure Functions-bővítmények csomagjának használatával kezelheti az AWS-szolgáltatásokhoz hasonló különböző kötéseket és triggereket. .NET-alkalmazások esetén a bővítménycsomag helyett a megfelelő NuGet-csomagokat kell használnia.

  • A bővítménycsomag használatával integrálható más Azure-szolgáltatásokkal, például az Azure Storage-ral, az Azure Service Bus-ral és az Azure Cosmos DB-vel anélkül, hogy manuálisan kellene konfigurálnia az egyes kötéseket SDK-k használatával. További információ: Függvények csatlakoztatása Azure-szolgáltatásokhoz kötések és Azure Functions kötési kifejezésminták használatával.

Ezek a kódrészletek a gyakori SDK-kódokra mutatnak példákat. Az AWS Lambda-kód megfelel az Azure Functions megfelelő eseményindítóinak, kötéseinek vagy SDK-kódrészleteinek.

Olvasás az Amazon S3-ból és az Azure Blob Storage-ból

AWS Lambda-kód (SDK)

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

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

Azure Functions-kód (indító)

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

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

Írás az Amazon Simple Queue Service-be (SQS) és az Azure Queue Storage-ba

AWS Lambda-kód (SDK)

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

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

Azure Functions-kód (indító)

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

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

Írás a DynamoDB-be és az Azure Cosmos DB-be

AWS Lambda-kód (SDK)

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

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

Azure Functions-kód (indí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)}`); 
}); 
}); 

Az Amazon CloudWatch-események és az Azure időzítő eseményindítója

AWS Lambda-kód (SDK)

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

Azure Functions-kód (indí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) egy Azure Event Grid-eseményindítóval szemben

AWS Lambda-kód (SDK)

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

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

Azure Functions-kód (indító)

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

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

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

}); 

Az Amazon Kinesis és az Azure Event Hubs eseményindítója

AWS Lambda-kód (SDK)

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

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

Azure Functions-kód (indí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}`);  
});  
});

Az AWS Lambda-kód és az Azure Functions-kód összehasonlításához tekintse meg a következő GitHub-adattárakat:

Konfigurációs beállítások módosítása

Győződjön meg arról, hogy a függvény időtúllépési és memóriabeállításai kompatibilisek az Azure Functions szolgáltatással. A konfigurálható beállításokkal kapcsolatos további információkért lásd host.json Azure Functionsre vonatkozó referenciát.

Kövesse az engedélyek, a hozzáférés, a hálózatkezelés és az üzembehelyezési konfigurációk ajánlott eljárásait.

Engedélyek konfigurálása

Kövesse az ajánlott eljárásokat, amikor beállítja a függvényalkalmazásokra vonatkozó engedélyeket. További információ: Függvényalkalmazás és tárfiók konfigurálása felügyelt identitással.

main.bicepsz

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

További információ: rbac.bicep.

Hálózati hozzáférés konfigurálása

Az Azure Functions támogatja a virtuális hálózati integrációt, amely hozzáférést biztosít a függvényalkalmazásnak a virtuális hálózat erőforrásaihoz. Az integráció után az alkalmazás átirányítja a kimenő forgalmat a virtuális hálózaton keresztül. Ezután az alkalmazás olyan szabályokkal érheti el a privát végpontokat vagy erőforrásokat, amelyek csak bizonyos alhálózatokból érkező forgalmat engedélyezik. Ha a cél egy, a virtuális hálózaton kívüli IP-cím, a forrás IP-cím az alkalmazás tulajdonságai között felsorolt címek egyike, kivéve, ha NAT-átjárót konfigurál.

Ha engedélyezi a virtuális hálózati integrációt a függvényalkalmazások számára, kövesse a webalkalmazások és függvényalkalmazások virtuális hálózati integrációjára vonatkozó TSG ajánlott eljárásait.

main.bicepsz

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

További információ: VNet.bicep and storage-PrivateEndpoint.bicep.

Üzembehelyezési beállítások konfigurálása

Az üzemelő példányok egyetlen útvonalat követnek. Miután létrehozott egy projektkódot, és becsomagolt egy alkalmazáscsomagba, helyezze üzembe egy Blob Storage-tárolóban. Amikor elindul, az alkalmazás lekéri a csomagot, és onnan futtatja a függvénykódot. Alapértelmezés szerint ugyanaz a tárfiók, amely belső gazdagép metaadatait tárolja, például AzureWebJobsStorageüzembehelyezési tárolóként is szolgál. Használhat azonban alternatív tárfiókot, vagy kiválaszthatja az előnyben részesített hitelesítési módszert az alkalmazás üzembehelyezési beállításainak konfigurálásával. További információkért tekintse meg az üzembehelyezési technológia részleteit és az üzembehelyezési beállítások konfigurálását.

IaC-fájlok létrehozása

  • Az Azure-erőforrások üzembe helyezéséhez IaC-fájlokat hozhat létre olyan eszközökkel, mint a Bicep, az Azure Resource Manager-sablonok vagy a Terraform.

    Jótanács

    Ezzel az egyéni csevegési móddal infrastrukturális (IaC-) fájlokat hozhat létre az Azure Functions számára:

    /LambdaMigration-Phase3-GenerateFunctionsInfra
    
  • Definiáljon olyan erőforrásokat, mint az Azure Functions, a tárfiókok és a hálózati összetevők az IaC-fájlokban.

  • Ez az IaC-mintaadattár azure Functions-javaslatokat és ajánlott eljárásokat használó mintákhoz használható.

Eszközök használata újrabontáshoz

A VS Code-ban használj eszközöket, például a GitHub Copilotot, a kód refaktorálásához, az adott módosításokat manuálisan is elvégezheted, vagy más migrálási segédleteket vehetsz igénybe.

Megjegyzés:

Ügynök mód használata a GitHub Copilotban a VS Code-ban.

Az alábbi cikkek konkrét példákat és részletes lépéseket tartalmaznak a migrálási folyamat megkönnyítéséhez:

Kidolgozása egy lépésről-lépésre folyamatnak a 0. napi migrációhoz.

Átállási és visszaállási stratégiákat fejleszthet ki a migráláshoz, és alaposan tesztelheti őket egy tesztkörnyezetben. Javasoljuk, hogy végezze el a teljes körű tesztelést, mielőtt végre áttér az AWS Lambda-ról az Azure Functionsre.

  • Funkciók ellenőrzése

    • Az Azure Functions helyi kódolása és tesztelése.

    • Tesztelje alaposan az egyes függvényeket, hogy a várt módon működjön. Ezeknek a teszteknek tartalmazniuk kell a bemenet/kimenet, az eseményindítók és a kötések ellenőrzését.

      Jótanács

      Ezzel az egyéni csevegési móddal érvényesítheti a migrált Azure Functions-kódot:

      /LambdaMigration-Phase4-ValidateCode
      
    • Használjon olyan eszközöket, mint a curl vagy a REST Client kiterjesztések a VS Code-ban HTTP-kérések küldéséhez HTTP által indított funkciókhoz.

    • Más eseményindítók, például időzítők vagy üzenetsorok esetén győződjön meg arról, hogy az eseményindítók megfelelően aktiválódnak, és a függvények a várt módon futnak.

  • Teljesítmény ellenőrzése

    • Végezzen teljesítménytesztelést az új Azure Functions-üzembe helyezés és az előző AWS Lambda üzembe helyezés összehasonlítása érdekében.

    • Monitorozza a metrikákat, például a válaszidőt, a futási időt és az erőforrás-felhasználást.

      Jótanács

      Ezzel az egyéni csevegési móddal ellenőrizheti az infrastruktúra konfigurációját:

      /LambdaMigration-Phase5-ValidateInfra
      
    • Az Application Insights használatával figyelhet, naplóelemzést és hibaelhárítást készíthet a tesztelési fázisban.

  • Hibaelhárítás a problémák diagnosztizálása és megoldása funkcióval

    A függvényalkalmazás hibaelhárításához használja az Azure Portal problémák diagnosztizálására és megoldására vonatkozó funkcióját. Ez az eszköz diagnosztikai funkciók készletét biztosítja, amelyek segítségével gyorsan azonosíthatja és megoldhatja a gyakori problémákat, például az alkalmazások összeomlását, a teljesítménycsökkenést és a konfigurációs problémákat. Kövesse az eszköz által az Ön által azonosított problémák megoldásához szükséges irányított hibaelhárítási lépéseket és javaslatokat.

A migrált számítási feladat végső állapotának kiértékelése

Az erőforrások AWS-ben való leszerelése előtt biztosnak kell lennie abban, hogy a platform megfelel az aktuális számítási feladatokra vonatkozó elvárásoknak, és hogy semmi sem blokkolja a számítási feladatok karbantartását vagy további fejlesztését.

A függvények üzembe helyezése és tesztelése a teljesítmény és a helyesség ellenőrzéséhez.

Telepítés az Azure-ra

Jótanács

Ezzel az egyéni csevegési móddal üzembe helyezheti az érvényesített projektet az Azure-ban:

/LambdaMigration-Phase6-DeployToAzure

Számítási feladatok üzembe helyezése a VS Code közzétételi funkciójával. A számítási feladatokat a parancssorból is üzembe helyezheti az Azure Functions Core Tools vagy az Azure CLI használatával. Az Azure DevOps és a GitHub Actions a One Deployet is használja.

  • Azure Functions Core Tools: A függvényalkalmazás üzembe helyezése azfunc azure functionapp publish <FunctionAppName> paranccsal.

  • Folyamatos integrációs és folyamatos üzembe helyezési (CI/CD) folyamatok: CI/CD-folyamat beállítása olyan szolgáltatások használatával, mint a GitHub Actions, az Azure DevOps vagy egy másik CI/CD-eszköz.

További információért lásd: Folyamatos kézbesítés a GitHub Actions használatával vagy Folyamatos kézbesítés az Azure Pipelines használatával.

A migrálási mintaforgatókönyvek megismerása

Használja a MigrationGetStarted adattárat sablonként a koncepció igazolásának megkezdéséhez. Ez az adattár tartalmaz egy üzembe helyezésre kész Azure Functions-projektet, amely rendelkezik az első lépésekhez szükséges infrastruktúrával és forráskódfájlokkal.

Ha inkább a Terraformot szeretné használni, használja helyette a MigrationGetStarted-Terraformot .

Az alkalmazás teljesítményének optimalizálása és monitorozása az Azure-ban

A számítási feladatok migrálása után javasoljuk, hogy vizsgálja meg az Azure további funkcióit. Ezek a funkciók segíthetnek a jövőbeli számítási feladatokra vonatkozó követelmények teljesítésében és a hiányosságok megszüntetésében.

Az Application Insights használata monitorozáshoz és hibaelhárításhoz

Engedélyezze az Application Insights függvényalkalmazás számára, hogy részletes telemetriai adatokat gyűjtsön a figyeléshez és a hibaelhárításhoz. Az Application Insightst az Azure Portalon vagy a függvényalkalmazás host.json konfigurációs fájljában engedélyezheti. Az Application Insights engedélyezése után a következőt teheti:

  • Telemetriai adatok gyűjtése. Az Application Insights különböző telemetriai adatokat biztosít, például kérelemnaplókat, teljesítménymetrikákat, kivételeket és függőségeket.

  • Naplók és metrikák elemzése. Az Application Insights irányítópultjának elérése az Azure Portalról naplók, metrikák és egyéb telemetriaadatok megjelenítéséhez és elemzéséhez. A beépített eszközökkel egyéni lekérdezéseket hozhat létre, és adatokat jeleníthet meg a függvényalkalmazás teljesítményének és viselkedésének elemzéséhez.

  • Riasztások beállítása. Riasztások konfigurálása az Application Insightsban kritikus problémákról, teljesítménycsökkenésről vagy adott eseményekről. Ezek a riasztások segítenek proaktívan monitorozni és gyorsan reagálni a problémákra.

Optimalizálás a költségekre és a teljesítményre

  • Skálázás és teljesítményoptimalizálás:

    • Az automatikus skálázási funkciókkal hatékonyan kezelheti a különböző számítási feladatokat.

    • Optimalizálja a függvénykódot a teljesítmény javítása érdekében a futási idő csökkentésével, a függőségek optimalizálásával és a hatékony kódolási eljárásokkal.

    • Gyorsítótárazási stratégiák implementálása a gyakran használt adatok ismételt feldolgozásának és késésének csökkentése érdekében.

  • Költségkezelés:

    • Az Azure Functions költségeinek monitorozásához és elemzéséhez használja a Microsoft Cost Management eszközeit.

    • Költségvetés- és költségriasztások beállítása a költségek hatékony kezeléséhez és előrejelzéséhez.