Cron Job AWS Lambda Functions Tutorial - Hogyan lehet ütemezni a feladatokat

A Cron jobokat általában egy adott időpontban ütemezik a parancsok. Használhatja őket olyan feladatokhoz, mint a biztonsági mentések futtatása, a rendszer állapotának figyelése vagy a rendszer karbantartási feladatai futtatása.

A Cron feladatok hasznos segédprogramot jelentenek a rendszergazdák számára. És amikor egy rendszert felügyel a felhőben, a cron-feladatok továbbra is nagyon hasznosak - még mindig sok adminisztrációs feladatot kell elvégeznie a rendszerein.

A cron-feladatok felhőben történő futtatásának egyik módja egy szolgáltatás (FaaS) használata, mint például az AWS ökoszisztémában a Lambda.

A funkciók akkor hajtódnak végre, amikor elindítják őket, és a felhőben kódot futtatnak anélkül, hogy bármilyen infrastruktúrát kellene létrehozniuk vagy karbantartaniuk. A funkciók úgy is konfigurálhatók, hogy bizonyos időben vagy bizonyos időközönként fussanak, például a hagyományos cron-feladatok.

Ebben a blogbejegyzésben az AWS ökoszisztémát használom, hogy bemutassak egy konkrét példát arra, hogyan hozhat létre cron feladatot a felhőben lévő funkció segítségével.

Amazon CloudWatch események

Ahhoz, hogy a Lambda funkciót cron feladatként használjuk, meg kell értenünk az Amazon CloudWatch eseményeket.

Az Amazon CloudWatch eseményeket akkor küldjük el, amikor az AWS erőforrásokban változás történik. Ezek az események kiválthatják az AWS Lambda funkciót. Amikor az AWS-erőforrások megváltoztatják az állapotát, automatikusan elküldik a CloudWatch-eseményeket az eseményfolyamba.

Ezért létrehozhat egy olyan szabályt, amely kiváltja egy adott Lambda függvényt, ha valami történik. Például automatikusan meghívhatja a Lambda funkciót, ha változás történik az AutoScaling csoportban.

Ezenkívül a CloudWatch események meghívhatnak egy Lambda funkciót, hogy rendszeres ütemezés szerint hajtsanak végre. Így rendelkezhet például egy Lambda funkcióval, amely 18:00 után kikapcsolja az összes tesztelési és fejlesztési EC2 példányt, és egy másik, amely 8 óra után bekapcsolja őket.

A bemutató beállítása

Szeretnék mutatni egy példát egy Lambda funkcióra, amely műveleteket hajthat végre az EC2 példányain. Az AWS SAM segítségével fogom meghatározni a Lambda funkciómat, mint infrastruktúrát, mint kódot.

Ha szeretné kipróbálni ezt a bemutatót, akkor AWS-fiókjában konfigurálnia kell egy AWS-fiókot és egy vagy több EC2-példányt. Ezeket fogjuk manipulálni a Lambda funkciókból. Az EC2 példányok a felhőben lévő virtuális gépek AWS-verziói.

Kipróbálhatja a bemutatót az AWS Cloud9 IDE-n (böngészőalapú IDE), mivel az AWS SAM már konfigurálva van ebben az IDE-ben. Ha meg szeretné tudni, hogyan kell használni az AWS Cloud9 IDE-t a Lambda funkcióinak működtetéséhez, megnézheti ezt a videót.

Ebben a példában elindítjuk és leállítjuk az EC2 példányokat két különböző AWS Lambda használatával, amelyek egy adott időpontban aktiválódnak. Az eseteket mindennap reggel 8-kor kezdjük, és 18 órakor kikapcsoljuk, amikor a nap véget ér.

Ehhez CloudWatch eseményt fogunk használni a Lambda megfelelő időben történő elindításához, valamint az AWS SDK-t a műveletek végrehajtásához az példányokban.

A példa véglegesített kódja elérhető ebben a GitHub-tárban. Ahhoz, hogy ez a kód működjön az AWS Cloud9 IDE szolgáltatásban, konfigurálnia kell a GitHub-fiókot az IDE-ben, hogy képes legyen klónozni a projektet, majd klónozni az IDE-ben.

Ha készen áll, futtassa ezt a parancsot a klónozott könyvtárban:

$ sam deploy --guided

A parancs futtatásakor számos kérdést kap, amelyekre válaszolnia kell a projekt sikeres futtatásához.

Először meg kell határoznia a projekt nevét . Ezután beállítja azt a régiót, ahol telepítésre kerül - ugyanazt válassza, ahol az EC2 példányai vannak. Ezután meg kell adnunk a telepítési parancsfájlnak a manipulálni kívánt példányok listáját . És akkor készen vagyunk - telepíti a projektet AWS-fiókunkra.

Az AWS Lambda funkció meghatározása

Az első dolog, amit szeretnék neked bemutatni, az, hogy hogyan definiáljuk az AWS SAM használatával az AWS Lambda függvényt, amely egy adott idő alatt aktiválódik. Ez a meghatározás a "template.yml" nevű fájlban lesz.

Így néz ki egy függvény. Nézzük meg a fontos sorokat:

Az első sor a függvény neve, jelen esetben „ StartInstanceFunction ”.

Ezután megkapjuk a „ Tulajdonságok ” definíciót. Az első tulajdonság a „ Handler ”. Itt adjuk meg azt a modult (fájlt), ahol a végrehajtandó kód található, majd a modult a modulon belül.

És akkor megvan a „ CodeUri ”, amely megmutatja, hol találja meg a fájlt. Ebben az esetben kódunk a „cron” nevű könyvtárban lesz a „handler.js” nevű fájlban és a „startInstance” nevű módszerben.

Ezt követően megvan a „ Futásidejű ” definíció. A NodeJS 12-es verzióját fogom használni, de használhatja Python, Java, Go, C # vagy bármi más, ami boldoggá tesz. A Lambda több futást is támogat a dobozból, és ha akarja, saját futási idejét is magával hozhatja.

Ezután megkapjuk a „ Környezet ” definíciót, amelyet az egy környezeti változó definiálására használunk. Ez a változó lehetővé teszi számunkra, hogy dinamikusan küldjünk a kódnak különböző példányokat, a telepítéskor a konfigurációtól függően.

Ezután van egy „ Házirendek ” szakasz , ahol meghatározzuk az adott Lambda függvény jogosultságait.

Fontos tudni, hogy az összes Lambda funkció minden engedély nélkül létrejön. Ez azt jelenti, hogy semmilyen más AWS-erőforrást nem tudnak megtenni.

Annak érdekében, hogy ez a Lambda függvény elindítsa az EC2 példányt, engedélyekre van szüksége az adott művelet végrehajtásához az adott AWS erőforráson. Ebben a házirendben engedélyeket adunk MINDEN EC2 példány elindításához ebben az AWS-fiókban. Az ALL-et a * jel jelöli az erőforrások részben.

Ha ez a kóddarab fut a termelésben, akkor azt javasoljuk, hogy az erőforrásokat pontosan azokra korlátozza, amelyekre a Lambda képes elindulni.

És végül az utolsó szakasz az „ Események ” szakasz. Itt fogjuk meghatározni, hogy ez a Lambda függvény hogyan indul el. Ezt a funkciót egy ütemezett CloudWatch esemény váltja ki, amely minden reggel reggel 8-kor aktiválja a Lambdát. Alapvetően minden nap 8-kor bekapcsolja az összes megadott EC2-példányt.

Ennek a cron kifejezésnek a kialakítására számos szabály vonatkozik: például azt mondhatja, hogy szeretné, ha ez csak hétfőtől péntekig futna, írja a cron (0 8? * MON-FRI *) parancsot. További információt a CloudWatch-események dokumentációs webhelyén talál: //docs.aws.amazon.com/lambda/latest/dg/services-cloudwatchevents-expressions.html.

Az AWS Lambda funkció kódolása

Most, hogy definiáltuk a Lambda függvényt, meg kell adnunk hozzá néhány kódot. A „cron” mappában a „ handler.jsfájlban hozzá kell adnunk a „ startInstance ” nevű metódust, amely így néz ki:  

Ezt a módszert akkor hívják meg, amikor a funkció minden nap reggel 8-kor aktiválódik. Megkapja az EC2 példányok listáját egy környezeti változóból, amelyet az összes példányazonosítónak átadtunk a telepítési idő alatt. Ezután létrehoz egy tömböt belőlük.

Ha ez megvan, felhívja az AWS SDK-t, és paraméterként elküldi a példányok tömbjét. És ha bármilyen hiba van, akkor naplózza és befejezi. Közvetlenül a Lambda végrehajtásának befejezése után lépjen az EC2 konzoljára, és nézze meg, hogyan kapcsolnak be példányai.

Az EC2 példányok kikapcsolásának funkciója néhány különbséggel nagyon hasonló. A függvény kódját ezen a linken találja meg, és ellenőrizze.

A cron munka futtatása

Ennek a cron-feladatnak a lebonyolításához nincs sok tennivaló. Miután a két funkció telepítve lett az AWS-fiókjában, az Ön példányaival megegyező régióban, végrehajtják és megteszik azt, amire be voltak programozva.

Most várnia kell reggel 8-ig vagy 18-ig, hogy lássa, működnek-e. Vagy ha most szeretné kipróbálni, módosítsa az esemény idejét a Lambda definícióban egy Önnek megfelelő időre. Győződjön meg róla, hogy a példány be van kapcsolva, ha ki akarja kapcsolni őket, vagy fordítva, így láthatja a változásokat.

Most várjon, és nézze meg, mi történik az EC2 konzolon. Közvetlenül a beállított idő után látni fogja, hogy a példány ki- vagy bekapcsol, majd az ellenkezőjét teszi a másik beállításkor. Ez örökké fog tartani, amíg nem távolítja el a Lambda funkciókat.

Az AWS-fiók takarítása

A bemutató befejezése után javasoljuk, hogy kapcsolja ki (vagy távolítsa el a tesztelésre létrehozott példányt), és távolítsa el az imént létrehozott Lambda funkciókat.

A lambda függvények eltávolítása ugyanolyan egyszerű, mint belépni a CloudFormation szolgáltatásba az AWS felügyeleti konzolon, és eltávolítani az AWS SAM által létrehozott erőforrásköteget.

Ne felejtse el megszüntetni és eltávolítani az EC2 példányokat sem, ha ezt a bemutatót hozta létre.

Következtetni

Az AWS Lambda funkciók nagyon hasznos eszközök az AWS-fiók mindenféle feladatának végrehajtására. Alapvetően értesítéseket kaphat az AWS erőforrások bármilyen változásáról a CloudWatch eseményeken keresztül, majd szinte az összes szolgáltatáshoz hozzáférhet az AWS SDK használatával. Tehát mindenféle karbantartási és automatizált feladatot elvégezhet az infrastruktúráján keresztül.

Köszönöm, hogy elolvasta.

Marcia Villalba vagyok, az AWS fejlesztői szószólója és a FooBar nevű youtube-csatorna házigazdája, ahol több mint 250 oktatóvideóm van a Serverless, AWS és szoftvermérnöki gyakorlatokról.

  • Twitter: //twitter.com/mavi888uy
  • Youtube: //youtube.com/foobar_codes