Egy alap demó Lamda kapcsán.
- Nyissuk meg az Lambda dashboard-ot: https://eu-central-1.console.aws.amazon.com/lambda/home
Create a function
gomb- Válasszuk a
Use a blueprint
lehetőséget, hiszen egy már előre megírt alapot szeretnánkl csupán létrehozni. - Blueprint name:
Getting started with Lambda HTTP
- Function name:
Lambda-Web
- Lap alján pipáljuk be a
Acknowledgment
jelölőnégyzetet - Kattintsunk a
Create function
gombra és elindul a Lambda alkalmazásunk létrehozása - Pár másodperc és el is készül
- Görgessünk lejjebb és keressük meg a
Function URL
feliratot, majd nyissuk meg az ott található linket - Menjümnk vissza az AWS konzolra és keressük meg a
Code source
részt - Duplán kattintsunka az
index.html
fájlra. - Cseréljük ki a fájl tartalmát erre:
<html>
<head>
<style>
body {
font-family: Verdana, Geneva, Tahoma, sans-serif;
background-image: url("https://github.com/cloudsteak/azurestaticwebsite/blob/main/assets/images/laptop-gf2f68ed68_1920.jpg?raw=true");
background-repeat: no-repeat;
background-size: cover;
background-position: center;
color: whitesmoke;
}
</style>
</head>
<body>
<h1>AWS Lambda</h1>
</body>
</html>
- Kattintsunk a
Deploy
gombra, majd frissítsük a böngésző lapot amit a 9-es lépésben nyitottunk.
Habár nem kódoltunk semmit, egy rövid példa volt arra, hogy akár weboldalnak is megfelelő a Lambda
Ebben a példában csak az S3 bucket-be feltöltött fájlok nevét és típusát íratjuk ki a naplóbejegyzésben.
1. S3 tároló létrehozása
- Nyissuk meg az S3 felületét: https://s3.console.aws.amazon.com/s3/home
- Kattintsunk a
Create bucket
gombra - Adjunk nevet a tárolónak:
fajl-feltoltes
- Kattintsunk a
Create bucket
gombra
2. Lambda függvény létrehozása
- Nyissuk meg az Lambda dashboard-ot: https://eu-central-1.console.aws.amazon.com/lambda/home
Create a function
gomb- Válasszuk a
Author from scratch
lehetőséget - Function name:
FajlFeltoltes
- Runtime:
Python 3.x
Change default execution role
- Execution role:
Create a new role from AWS policy templates
- Role name:
FajlFeltoltesRole
- Kattintsunk a
Create function
gombra - A megjelenő oldalon a
Function code
részben írjuk át a kódot erre:
import json
import urllib.parse
import boto3
print('#####################')
print('Függvény indítása ...')
s3 = boto3.client('s3')
def lambda_handler(event, context):
# Bucket és fájlnév lekérdezése az eseményből
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
try:
print('##### Fájl feltöltés #####')
print("Feltöltött fájl neve: " + key)
# Adat objektum visszatérési értékként
return {'name': key}
except Exception as e:
print(e)
print('Hiba: Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
raise e
- Kattintsunk a
Deploy
gombra, majd aTest
gombra - Válasszuk a
Monitor
fület és kattintsunk aView CloudWatch logs
gombra - A megnyíló ablakban kattintsunk a
Log stream
nevére. Itt láthatjuk a függvényünk logjait.
3. Lambda és S3 összekapcsolása
- Menjünk vissza az Lambda függvényünkhöz
- A
Designer
részben kattintsunk aAdd trigger
gombra - Trigger configuration:
- Trigger:
S3
- Bucket:
fajl-feltoltes
- Event type:
PUT
- Prefix: ``
- Suffix: ``
- Enable trigger:
Yes
- Trigger:
- Kattintsunk az
Add
gombra
4. Tesztelés
- Nyissuk meg az S3 felületét: https://s3.console.aws.amazon.com/s3/home
- Kattintsunk a
esemfajlenyvezetett-feltoltes
tárolóra - Kattintsunk a
Upload
gombra - Válasszunk ki egy fájlt és kattintsunk az
Upload
gombra - Menjünk a
CloudWatch
-ba, majd aLog Stream
-re és láthatjuk a futás eredményét
Ebben a megoldásban egy fájl feltöltésekor egy Lambda függvény fut le, ami egy SNS témára küld egy üzenetet. Ez egy alapvető felhasználása lehet a Lambda-nak. Ráadásul olyan felhasználási esetet szemléltet, amikor a Lambda függvényeket eseményvezérelt módon használjuk.
1. S3 tároló létrehozása
- Nyissuk meg az S3 felületét: https://s3.console.aws.amazon.com/s3/home
- Kattintsunk a
Create bucket
gombra - Adjunk nevet a tárolónak:
esemenyvezetett-feltoltes
- Kattintsunk a
Create bucket
gombra
2. IAM Role létrehozása
- Nyissuk meg az IAM felületét: https://console.aws.amazon.com/iam/home
- A bal oldali menüben kattintsunk a
Roles
menüpontra - Kattintsunk a
Create role
gombra - AWS service:
Lambda
- Kattintsunk a
Next: Permissions
gombra - Adjuk hozzá a következő jogosultságokat:
- AmazonS3FullAccess
- AWSLambdaBasicExecutionRole
- AmazonSNSFullAccess
- CloudWatchFullAccess
- Kattintsunk a
Next
gombra - Role name:
EsemenyvezereltFeltoltesRole
- Kattintsunk a
Create role
gombra
3. SNS témája létrehozása
- Nyissuk meg az SNS felületét: https://eu-central-1.console.aws.amazon.com/sns/v3/home
- Kattintsunk a
Create topic
gombra - Adjunk meg a fonrtos adatokat
- Name:
esemenyvezetett-feltoltes
- Display name:
Eseményvezérelt fájlfeltöltés
- Type:
Standard
- Name:
- Kattintsunk a
Create topic
gombra - A témánál kattintsunk a
Create subscription
gombra - Válasszuk ki a
Email
lehetőséget a Protocol legördülő menüből - Adjuk meg az email címünket
- Kattintsunk a
Create subscription
gombra - A megadott email címre érkezett egy megerősítő email, amit ki kell nyitni és a benne található linkre kattintani
- A felugró ablakban kattintsunk a
Confirm subscription
gombra Subscription confirmed!
. Ezzel érvényesítettük a feliratkozást a témára.
4. Lambda függvény létrehozása
- Nyissuk meg az Lambda dashboard-ot: https://eu-central-1.console.aws.amazon.com/lambda/home
Create a function
gomb- Válasszuk a
Author from scratch
lehetőséget - Function name:
EsemenyvezereltFeltoltes
- Runtime:
Python 3.x
Change default execution role
- Execution role:
Use an existing role
- Existing role:
EsemenyvezereltFeltoltesRole
- Kattintsunk a
Create function
gombra - A megjelenő oldalon a
Function code
részben írjuk át a kódot erre:
import json
def lambda_handler(event, context):
print("Lamba függvény vagyok!")
- Kattintsunk a
Deploy
gombra, majd aTest
gombra - Válasszuk a
Monitor
fület és kattintsunk aView CloudWatch logs
gombra - A megnyíló ablakban kattintsunk a Log stream nevére. Itt láthatjuk a függvényünk logjait.
...
2024-.... Lamba függvény vagyok!
...
5. Lambda és S3 összekapcsolása
- Menjünk vissza az Lambda függvényünkhöz
- A
Designer
részben kattintsunk aAdd trigger
gombra - Trigger configuration:
- Trigger:
S3
- Bucket:
esemenyvezetett-feltoltes
- Event type:
PUT
- Prefix: ``
- Suffix: ``
- Enable trigger:
Yes
- Trigger:
- Kattintsunk az
Add
gombra
6. Lambda és SNS összekapcsolása
- Menjünk vissza az Lambda függvényünkhöz
- A
Designer
részben kattintsunk aAdd destination
gombra - Destination configuration:
- Asynchronous invocation
- condition:
On success
- Destination type:
SNS topic
- Destination ARN:
esemenyvezetett-feltoltes
- Kattintsunk az
Save
gombra
7. Python kód
Amint ezzel végeztünk, módosítsuk a Lamba függvémyünk kódját.
- A következő kódot másoljuk be a
lambda_function.py
fájlba:
import json
import boto3
import urllib
# boto3 egy python library AWS-hez
s3_client = boto3.client('s3')
sns_client = boto3.client('sns')
def lambda_handler (event, context):
# Bucket adatai és fájlnév
bucket_name = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
key = urllib.parse.unquote_plus(key, encoding='utf-8')
# Üzenet
message = 'AWS Fájl feltöltés!\n\n- Állapot: sikeres\n' + '- Feltöltött fájl neve: ' + key
# Üzenet kiírása a CloudWatch-ban
print(message)
# Email küldése SNS-en keresztül
sns_response = sns_client.publish(
TargetArn='{SNS Topic neve}', # SNS topic ARN-je
Message= str(message), # Üzenet az emailben
Subject= str('AWS Fájl feltöltés sikeres') # Emal tárgya
)
A kódban a TargetArn
-t ki kell cserélni a létrehozott SNS témára
- Kattintsunk a
Deploy
gombra
8. Tesztelés
- Nyissuk meg az S3 felületét: https://s3.console.aws.amazon.com/s3/home
- Kattintsunk a
esemenyvezetett-feltoltes
tárolóra - Kattintsunk a
Upload
gombra - Válasszunk ki egy fájlt és kattintsunk az
Upload
gombra - Menjünk az email fiókunkba és nézzük meg az érkezett levelet
Hozzunk gyorsan létre egy WordPress oldalt.
- Nyissuk meg a Lightsail oldalát: https://lightsail.aws.amazon.com/ls/webapp/home
- Hozzunk létre egy szolgáltatást a
Create instance
gombra kattintva - Válasszuk ki a régót, a platformot (linux)
- Select Blueprint:
WordPress
- Válasszuk ki. a megfelelő erőforrás méretet a
Choose your instance plan
részben. - Identify your instance:
AWS-WP-01
Create instance
gombra kattintva elindul a WordPress alkalmazásunk létrehozása
1-2 perc múlva már működik is az weboldalunk. :-)
A bejelentkezéshez szükség lesz pár extra lépésre!
Hivatalos segítlet, hogyan lehet bejelentkezni a WordPress-re: https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-quick-start-guide-wordpress
- A létrehozott
AWS-WP-01
WordPressnél kattintsunk a 3 pöttyre (menü) - Válasszuk a
Manage
lehetőséget - Görgessünk le és keressük meg az IPv4-es címet a
CONNECT TO
felirat alatt - Másoljuk ki és nyissunk egy új böngésző lapot
- Írjuk be a böngésző címsorába az alábbit:
http://<public-ip-address>/wp-admin/
(pl.: http://3.70.201.72/wp-admin) - A WordPress oldalunk megnyílt.
- Menjünk vissza a
Lightsail
-re és azAWS-WP-01
-re - Keressük meg a narancssárga
Connect using SSH
gombot és kattintsunk rá. - A felugró ablakba (fekete háttér, parancssor) illesszük be majd futtassuk le az alábbi parancsot:
cat bitnami_application_password
- A megjelenő jelszót másoljuk ki
- menjünk vissza a WordPress oldalunkhoz
- Username:
user
- Password pedig az amit kimásoltunk a parancssorból
Log In
gombra kattintve beléptünk a WordPress oldalunkra és el is kezdhetjük használni