Üdvözöllek a felhőalapú számítástechnika és a serverless világában! Ha valaha is elképzelted, hogy futtatsz egy alkalmazást anélkül, hogy szervereket kellene konfigurálnod, karbantartanod vagy skáláznod, akkor jó helyen jársz. A serverless architektúra az elmúlt évek egyik leggyorsabban fejlődő trendje a szoftverfejlesztésben, és alapjaiban változtatja meg, ahogyan alkalmazásokat építünk és üzemeltetünk.
Ebben az átfogó, lépésről lépésre útmutatóban elkalauzollak az első serverless alkalmazásod létrehozásának izgalmas folyamatán. Egy egyszerű, de működőképes API-t fogunk elkészíteni, amely a nevedet felhasználva egy üdvözlő üzenetet küld vissza. Készen állsz, hogy belevágj? Vágjunk is bele!
Mi az a Serverless? Egy Rövid Bevezető
Mielőtt elmerülnénk a gyakorlatban, tisztázzuk, mit is jelent valójában a serverless. A név megtévesztő lehet, hiszen nem azt jelenti, hogy nincsenek szerverek. Inkább azt, hogy neked, mint fejlesztőnek, nem kell aggódnod a szerverek üzemeltetése, konfigurálása, skálázása és karbantartása miatt. Ezt a feladatot a felhőszolgáltató (például AWS, Azure, Google Cloud) veszi át tőled.
A serverless architektúra kulcsfontosságú elemei a FaaS (Functions as a Service) szolgáltatások, mint például az AWS Lambda, az Azure Functions vagy a Google Cloud Functions. Ezek lehetővé teszik, hogy kis, önálló kódrészleteket (funkciókat) telepítsünk, amelyek csak akkor futnak le, amikor egy bizonyos esemény kiváltja őket (pl. egy HTTP kérés, egy fájl feltöltése S3-ra, egy üzenet érkezése egy üzenetsorba). Csak a tényleges végrehajtási idő után fizetsz, ami rendkívül költséghatékony megoldássá teszi.
A Serverless Előnyei
- Költséghatékonyság: Csak a használt erőforrásokért fizetsz. Nincs állandóan futó szerver, ami pénzt emésztene fel tétlenség közben.
- Automatikus skálázhatóság: Az alkalmazásod automatikusan skálázódik a terhelésnek megfelelően, anélkül, hogy neked bármit is tenned kellene.
- Kevesebb üzemeltetés: Nem kell foglalkoznod az operációs rendszer frissítésével, a biztonsági javításokkal vagy a szerverinfrastruktúra karbantartásával.
- Gyorsabb fejlesztés: A fejlesztők sokkal gyorsabban tudnak a kódra és az üzleti logikára koncentrálni.
- Magas rendelkezésre állás: A felhőszolgáltatók biztosítják a magas rendelkezésre állást és a hibatűrést.
Amit Építeni Fogunk
Egy egyszerű „Hello World” API-t fogunk létrehozni. Ez az API egy HTTP GET kérésre fog válaszolni, és képes lesz egy nevet paraméterként fogadni. Például, ha a böngészőben a /hello?name=Péter
címet hívod meg, az alkalmazásod a „Szia, Péter! Ez az első szerverless alkalmazásod!” üzenettel fog válaszolni.
Az Eszközök Előkészítése
Mielőtt belevágnánk a kódolásba, győződjünk meg róla, hogy minden szükséges eszköz telepítve van és konfigurálva van a gépünkön.
1. AWS Fiók Létrehozása
Az AWS (Amazon Web Services) lesz a felhőszolgáltatónk. Ha még nincs AWS fiókod, látogass el az AWS weboldalára, és regisztrálj egy ingyenes fiókot. Az AWS Ingyenes Szint (Free Tier) nagylelkűen fedezi az első serverless alkalmazásod futtatásának költségeit.
2. Node.js és npm Telepítése
A funkcióinkat Node.js-ben fogjuk írni, és az npm (Node Package Manager) segítségével fogjuk kezelni a függőségeket és a Serverless Framework-öt. Ha még nincs telepítve a Node.js és az npm, töltsd le és telepítsd a hivatalos weboldalról: nodejs.org. Ajánlott a legújabb LTS (Long Term Support) verzió használata.
Ellenőrizd a telepítést a következő parancsokkal:
node -v
npm -v
3. AWS CLI Konfigurálása
Az AWS Command Line Interface (CLI) lehetővé teszi, hogy parancssorból kommunikálj az AWS szolgáltatásaival. Ezt fogja használni a Serverless Framework is a telepítéshez. Telepítsd az AWS CLI-t a hivatalos dokumentáció szerint. A legtöbb platformon ez az pip install awscli --upgrade --user
paranccsal oldható meg, miután a Python telepítve van.
Telepítés után konfiguráld az AWS CLI-t a fiókodhoz. Ehhez szükséged lesz egy IAM (Identity and Access Management) felhasználóra, akinek van megfelelő jogosultsága a Lambda, API Gateway és CloudFormation szolgáltatásokhoz. A legjobb gyakorlat szerint hozz létre egy új IAM felhasználót programmatic access-szel, és csatolj hozzá egy politikát, ami csak a szükséges jogosultságokat adja meg (pl. AdministratorAccess
az egyszerűség kedvéért most, de éles környezetben szigorúan korlátozott jogosultságok javasoltak).
Futtasd a következő parancsot, és add meg az Access Key ID-t, a Secret Access Key-t, a régiót (pl. eu-central-1
– Frankfurt) és a kimeneti formátumot (pl. json
):
aws configure
4. Serverless Framework Telepítése
A Serverless Framework egy nyílt forráskódú eszköz, amely leegyszerűsíti a serverless alkalmazások telepítését és kezelését. Ez lesz a mi kulcsfontosságú segítőnk. Telepítsd globálisan az npm segítségével:
npm install -g serverless
Ellenőrizd a telepítést:
serverless -v
Ha minden rendben van, készen állunk az első projektünk létrehozására!
Az Első Serverless Projekt Létrehozása
Most, hogy minden eszköz a helyén van, generáljuk le az első serverless projektünket. Lépj be egy tetszőleges könyvtárba a terminálodban, ahol a projektet szeretnéd tárolni.
serverless create --template aws-nodejs --path my-first-serverless-app
Ez a parancs létrehoz egy új könyvtárat my-first-serverless-app
néven, és belehelyez egy alapvető Node.js AWS Lambda projekt sablont. Navigálj be a létrehozott könyvtárba:
cd my-first-serverless-app
Nézzük meg, milyen fájlok jöttek létre:
serverless.yml
: Ez a fő konfigurációs fájl. Itt definiáljuk az AWS szolgáltatásokat, a függvényeinket, az eseményeket, amelyek kiváltják őket, és egyéb beállításokat.handler.js
: Itt található a Node.js Lambda függvényünk kódja, amely majd végrehajtódik..gitignore
: Egy szabványos Git fájl a figyelmen kívül hagyandó elemekhez.
A handler.js Fájl Megértése és Módosítása
Nyissuk meg a handler.js
fájlt egy kódszerkesztőben (pl. VS Code). Ezt látjuk:
'use strict';
module.exports.hello = async (event) => {
return {
statusCode: 200,
body: JSON.stringify(
{
message: 'Go Serverless v1.0! Your function executed successfully!',
input: event,
},
null,
2
),
};
// Use this code if you don't use the http event with the LAMBDA-PROXY integration
// return { message: 'Go Serverless v1.0! Your function executed successfully!', event };
};
Ez egy egyszerű aszinkron függvény, amely egy event
objektumot kap paraméterként, és egy objektumot ad vissza, amely a HTTP válasz status kódját és a törzsét tartalmazza. A body
JSON formátumban van. A statusCode: 200
jelzi, hogy a kérés sikeres volt.
Módosítsuk ezt a fájlt úgy, hogy egy nevet fogadjon el a kérésből, és személyre szabott üdvözletet adjon vissza. Keresni fogjuk a nevet az event.queryStringParameters.name
helyen.
'use strict';
module.exports.hello = async (event) => {
// Ellenőrizzük, hogy van-e "name" query paraméter
const name = event.queryStringParameters && event.queryStringParameters.name
? event.queryStringParameters.name
: 'Világ'; // Alapértelmezett érték, ha nincs megadva név
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json', // Fontos, hogy JSON-t adjunk vissza
},
body: JSON.stringify({
message: `Szia, ${name}! Ez az első szerverless alkalmazásod!`,
// Az input eseményt most nem tesszük bele a válaszba, hogy egyszerűbb legyen
}),
};
};
Ebben a módosított kódban először megpróbáljuk kinyerni a name
paramétert a queryStringParameters
objektumból. Ha ez nem létezik, akkor az alapértelmezett „Világ” értéket használjuk. A válaszban pedig egy dinamikus üzenetet adunk vissza.
A serverless.yml Fájl Konfigurálása
Most jöhet a projekt szíve: a serverless.yml
fájl. Ez írja le, hogy milyen szolgáltatásokat és hogyan kell az AWS-ben telepíteni. Nyissuk meg és vizsgáljuk meg a tartalmát:
service: my-first-serverless-app
frameworkVersion: '3'
provider:
name: aws
runtime: nodejs18.x # Vagy a legújabb LTS verzió, pl. nodejs20.x
region: eu-central-1 # Frankfurt. Válaszd ki a hozzád legközelebbi régiót
profile: default # Ha több AWS profilod van, itt adhatod meg
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
cors: true # Lehetővé teszi a Cross-Origin Resource Sharing-et, hasznos API-k esetén
Magyarázzuk meg a legfontosabb részeket:
service
: Az alkalmazásod neve. Ez lesz a CloudFormation stack neve is.frameworkVersion
: A Serverless Framework verziója, amellyel a sablon kompatibilis.provider
: Itt adod meg a felhőszolgáltatót (aws
) és a futási környezet (runtime: nodejs18.x
), a régiót (region: eu-central-1
) és opcionálisan az AWS CLI profilodat (profile: default
).functions
: Ez a szekció tartalmazza az összes AWS Lambda függvényt.hello
: A függvényünk neve.handler: handler.hello
: Ez mondja meg a Serverless Framework-nek, hogy melyik fájlban (handler.js
) és melyik exportált függvényben (hello
) található a kódunk.events
: Ez a rész definiálja, hogy milyen események válthatják ki a Lambda függvényt. Itt egy API Gateway HTTP eseményt adunk meg.http
: Meghatározza, hogy HTTP kérésre reagálunk.path: hello
: Az API végpont útvonala lesz/hello
.method: get
: Csak GET kérésekre fog reagálni.cors: true
: Engedélyezi a Cross-Origin Resource Sharing-et, ami hasznos, ha egy webalkalmazásból hívod az API-t.
A serverless.yml
fájlban sokkal több mindent is lehet konfigurálni, például környezeti változókat, IAM szerepeket, adatbázisokat, de most ez az egyszerű beállítás tökéletes lesz az első lépéshez.
Az Alkalmazás Üzembe Helyezése
Elérkezett a pillanat! Most telepítjük az alkalmazásunkat az AWS-be. Győződj meg róla, hogy a my-first-serverless-app
könyvtárban vagy a terminálban, majd futtasd a következő parancsot:
serverless deploy
Ez a parancs elég sok mindent elindít:
- A Serverless Framework tömöríti a kódodat és a függőségeket.
- Létrehoz egy AWS CloudFormation stack-et.
- Feltölti a kódot egy S3 bucket-be.
- Létrehozza az AWS Lambda függvényt a megadott konfigurációval.
- Létrehozza az AWS API Gateway végpontot, amely a Lambda függvényt indítja.
- Konfigurálja a szükséges IAM szerepeket és engedélyeket.
Ez a folyamat eltarthat néhány percig. Ha sikeresen lefut, a terminálban láthatod az üzembe helyezett szolgáltatások összefoglalóját, beleértve az API Gateway végpont URL-jét:
Service: my-first-serverless-app
Stage: dev
Region: eu-central-1
Stack: my-first-serverless-app-dev
Functions:
hello: my-first-serverless-app-dev-hello
Endpoints:
GET - https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/dev/hello
Jegyezd fel az Endpoints
részben található URL-t. Ez az API-d nyilvános címe!
Tesztelés
Most, hogy az alkalmazásod él és virul a felhőben, teszteljük le! Nyisd meg a böngésződet, és másold be az imént kapott URL-t. Ne felejtsd el hozzáadni a ?name=
paramétert a végére.
Például:
https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/dev/hello?name=Péter
A böngészőnek a következő válasz JSON-t kell megjelenítenie:
{
"message": "Szia, Péter! Ez az első szerverless alkalmazásod!"
}
Ha nem adtál meg name
paramétert (pl. https://xxxxxxxxx.execute-api.eu-central-1.amazonaws.com/dev/hello
), akkor ezt kapod:
{
"message": "Szia, Világ! Ez az első szerverless alkalmazásod!"
}
Gratulálok! Sikeresen létrehoztad és üzembe helyezted az első serverless alkalmazásodat! Ez egy hatalmas lépés a felhőalapú fejlesztés világába.
A Serverless Framework helyi tesztelési lehetőséget is biztosít:
serverless invoke local -f hello --data '{"queryStringParameters": {"name": "Helyi Teszt"}}'
Ez közvetlenül futtatja a Lambda függvényt a gépeden, szimulálva egy eseményt. A kimenetben látni fogod a függvény által visszaadott JSON-t.
Naplózás és Hibakeresés
Mi történik, ha valami nem működik? A naplózás kulcsfontosságú. Az AWS Lambda automatikusan integrálódik az AWS CloudWatch Logs szolgáltatással. A Serverless Framework segítségével könnyedén hozzáférhetsz ezekhez a naplókhoz:
serverless logs -f hello -t
Ez a parancs valós időben (-t
, azaz „tail”) mutatja a hello
függvényed naplóit. Minden console.log()
hívás, amit a kódodban elhelyezel, itt fog megjelenni, segítve a hibakeresést.
Az Alkalmazás Eltávolítása
Mivel az AWS Ingyenes Szintje nagylelkű, de nem korlátlan, és jó gyakorlat a tisztán tartás, érdemes eltávolítani az erőforrásokat, ha már nincs rájuk szükséged. Ezt is a Serverless Framework-kel teheted meg egyetlen paranccsal:
serverless remove
Ez a parancs eltávolítja az összes erőforrást, amelyet a serverless deploy
hozott létre, beleértve a Lambda függvényt, az API Gateway végpontot és a CloudFormation stack-et. Ezzel elkerülheted a felesleges költségeket.
További Lépések és Lehetőségek
Ez az első serverless alkalmazás csak a jéghegy csúcsa. Íme néhány ötlet a további felfedezéshez:
- Adatbázis-integráció: Integráld a Lambda függvényedet egy DynamoDB (NoSQL adatbázis) vagy egy RDS Proxy (relációs adatbázisokhoz) szolgáltatással, hogy adatokat tárolhass és lekérhess.
- Más események: A HTTP eseményeken kívül próbálj meg a Lambda-t más eseményekkel kiváltani:
- S3 események: Futtass egy függvényt, ha egy fájlt feltöltenek egy S3 bucket-be (pl. képfeldolgozás).
- SQS/SNS események: Reagálj üzenetsorokból érkező üzenetekre.
- Időzített események (Cron): Futtass funkciókat rendszeres időközönként (pl. napi jelentések).
- Környezeti változók: Használj környezeti változókat a
serverless.yml
fájlban az érzékeny adatok (pl. adatbázis jelszavak) kezelésére, vagy a különböző környezetek (dev, staging, production) közötti váltáshoz. - Más szolgáltatók: Fedezd fel az Azure Functions-t a Microsoft Azure-ban, vagy a Google Cloud Functions-t a Google Cloud Platformon. A Serverless Framework támogatja ezeket is!
- Komplexebb architektúrák: Kezdj el mikro-szolgáltatásokat építeni, ahol több Lambda függvény és más AWS szolgáltatás (pl. SQS, SNS, Step Functions) együttműködik egy összetettebb feladat elvégzésére.
- CI/CD integráció: Automatizáld a telepítési folyamatodat CI/CD (Continuous Integration/Continuous Deployment) eszközökkel, mint például az AWS CodePipeline vagy GitHub Actions.
Összefoglalás
Gratulálok! Végigmentél az első serverless alkalmazásod létrehozásának minden lépésén. Remélem, hogy ez az útmutató segített megérteni a serverless koncepcióját, és magabiztosságot adott ahhoz, hogy belevágj a saját projektjeidbe.
A serverless architektúra hatalmas potenciált rejt magában a gyors, skálázható és költséghatékony alkalmazások fejlesztésére. Ne állj meg itt! Folytasd a tanulást, kísérletezz, és építsd meg a következő nagyszerű dolgot a felhőben. A jövő serverless, és te most már ennek a részese vagy!
Boldog fejlesztést!
Leave a Reply