AWS Lambda و Serverless: دليل للمبتدئين
تعرّف على مفهوم serverless وكيفية استخدام AWS Lambda.
I
InSkillCoach
· دقيقة
AWS Lambda و Serverless: دليل للمبتدئين
تعرّف على مفهوم serverless وكيفية استخدام AWS Lambda.
1. ما هو Serverless؟
تعريف مبسّط
- Serverless = بلا خوادم لإدارتها
- المزايا:
- لا حاجة إلى إدارة البنية التحتية
- الدفع حسب الاستخدام
- التوسّع التلقائي
مقارنة مع EC2
# Exemple de coût EC2 vs Lambda
def compare_costs():
# EC2 : Paiement par heure
ec2_cost = {
't2.micro': 0.0116, # par heure
't2.small': 0.023, # par heure
't2.medium': 0.0464 # par heure
}
# Lambda : Paiement par requête
lambda_cost = {
'requests': 0.0000002, # par requête
'duration': 0.00001667 # par 100ms
}
return {
'ec2': ec2_cost,
'lambda': lambda_cost
}
2. AWS Lambda عمليًا
إنشاء دالة بسيطة
# Exemple de fonction Lambda
def lambda_handler(event, context):
# Fonction simple qui retourne un message
return {
'statusCode': 200,
'body': 'Bonjour depuis Lambda !'
}
إعداد الدالة
# Exemple de configuration Lambda
def setup_lambda():
lambda_client = boto3.client('lambda')
# Création d'une fonction
function = lambda_client.create_function(
FunctionName='MaFonction',
Runtime='python3.9',
Handler='index.lambda_handler',
Code={
'ZipFile': open('mon-code.zip', 'rb').read()
},
Role='arn:aws:iam::account:role/lambda-role',
Timeout=30,
MemorySize=128
)
return function['FunctionArn']
3. التكامل مع الخدمات الأخرى
مشغّل S3 (S3 Trigger)
# Exemple de trigger S3
def s3_trigger_handler(event, context):
# Traitement d'un fichier uploadé dans S3
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = record['s3']['object']['key']
# Lire le fichier
s3 = boto3.client('s3')
response = s3.get_object(Bucket=bucket, Key=key)
content = response['Body'].read().decode('utf-8')
# Traiter le contenu
return {
'statusCode': 200,
'body': f'Fichier traité : {key}'
}
API Gateway
# Exemple d'intégration API Gateway
def api_handler(event, context):
# Traitement d'une requête HTTP
http_method = event['httpMethod']
if http_method == 'GET':
return {
'statusCode': 200,
'body': 'GET request réussie'
}
elif http_method == 'POST':
body = json.loads(event['body'])
return {
'statusCode': 200,
'body': f'Données reçues : {body}'
}
4. أفضل الممارسات
إدارة الاعتماديات
# Exemple de gestion des dépendances
def create_lambda_package():
# Créer un environnement virtuel
os.system('python -m venv venv')
# Installer les dépendances
os.system('pip install -r requirements.txt -t ./package')
# Créer le ZIP
shutil.make_archive('lambda-package', 'zip', './package')
return 'lambda-package.zip'
إعداد الذاكرة
# Exemple d'optimisation de la mémoire
def optimize_memory():
lambda_client = boto3.client('lambda')
# Mise à jour de la configuration
lambda_client.update_function_configuration(
FunctionName='MaFonction',
MemorySize=256, # Augmenter la mémoire
Timeout=60, # Augmenter le timeout
Environment={
'Variables': {
'ENV': 'production',
'DEBUG': 'false'
}
}
)
5. المراقبة والسجلات
CloudWatch Logs
# Exemple de logging
def lambda_with_logging(event, context):
# Logging simple
print('Démarrage de la fonction')
try:
# Code de la fonction
result = process_data(event)
print('Traitement réussi')
return result
except Exception as e:
print(f'Erreur : {str(e)}')
raise
المقاييس
# Exemple de métriques personnalisées
def custom_metrics():
cloudwatch = boto3.client('cloudwatch')
# Envoyer une métrique
cloudwatch.put_metric_data(
Namespace='MonApplication',
MetricData=[
{
'MetricName': 'TempsExecution',
'Value': 1.5,
'Unit': 'Seconds',
'Dimensions': [
{
'Name': 'Fonction',
'Value': 'MaFonction'
}
]
}
]
)
6. الأمان
متغيرات البيئة
# Exemple de gestion des secrets
def secure_lambda():
lambda_client = boto3.client('lambda')
# Configuration des variables d'environnement
lambda_client.update_function_configuration(
FunctionName='MaFonction',
Environment={
'Variables': {
'API_KEY': 'mon-api-key',
'DB_PASSWORD': 'mon-mot-de-passe'
}
}
)
أدوار IAM (IAM Roles)
# Exemple de configuration IAM
def setup_iam_role():
iam = boto3.client('iam')
# Création du rôle
role = iam.create_role(
RoleName='lambda-role',
AssumeRolePolicyDocument=json.dumps({
'Version': '2012-10-17',
'Statement': [
{
'Effect': 'Allow',
'Principal': {
'Service': 'lambda.amazonaws.com'
},
'Action': 'sts:AssumeRole'
}
]
})
)
return role['Role']['Arn']
الخاتمة
النقاط الأساسية التي يجب تذكّرها:
- Serverless = لا حاجة إلى إدارة البنية التحتية
- Lambda = دوال تُنفَّذ عند الطلب
- الدفع مقابل الاستخدام الفعلي فقط
- تكامل سهل مع الخدمات الأخرى
- توسّع تلقائي
التوصيات:
- ابدأ بدوال بسيطة
- راقب التكاليف
- استخدم السجلات (logs) لتصحيح الأخطاء
- أمّن الدوال
- حسّن الأداء
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
895
245
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش