تثبيت LocalStack
ما هو LocalStack؟
LocalStack هو محاكي سحابي يحاكي خدمات AWS على جهازك المحلي. يتيح لك تطوير واختبار تطبيقات AWS دون:
- إنشاء حساب AWS
- دفع أي شيء
- خطر الفوترة العرضية
┌─────────────────────────────────────────────────────────────┐
│ LocalStack │
├─────────────────────────────────────────────────────────────┤
│ │
│ جهازك "AWS زائف" │
│ ┌─────────────┐ ┌─────────────────┐ │
│ │ AWS CLI │ ──────────► │ LocalStack │ │
│ │ Scripts │ Port 4566 │ (Docker) │ │
│ │ Apps │ │ │ │
│ └─────────────┘ │ Services: │ │
│ │ • S3 │ │
│ │ • Lambda │ │
│ │ • DynamoDB │ │
│ │ • SQS/SNS │ │
│ │ • CloudWatch │ │
│ │ • etc. │ │
│ └─────────────────┘ │
│ │
│ ✅ مجاني ✅ محلي ✅ بدون حساب AWS │
└─────────────────────────────────────────────────────────────┘
المتطلبات الأساسية
Docker Desktop (إلزامي)
يعمل LocalStack في حاوية Docker. يجب عليك أولاً تثبيت Docker Desktop.
التنزيل:
- Windows: https://www.docker.com/products/docker-desktop/
- macOS: https://www.docker.com/products/docker-desktop/
- Linux: تعليمات خاصة بتوزيعتك
التحقق من Docker
# التحقق من تثبيت Docker
docker --version
# التحقق من عمل Docker
docker run hello-world
النتيجة المتوقعة:
Docker version 24.x.x, build xxxxx
على Windows، يجب أن يكون Docker Desktop مشغلاً قبل استخدام LocalStack. تحقق من أيقونة Docker في شريط المهام.
تثبيت LocalStack
الطريقة 1: عبر Docker (موصى بها)
هذه هي الطريقة الأسهل والأكثر موثوقية.
بدء LocalStack:
docker run -d \
--name localstack \
-p 4566:4566 \
-p 4510-4559:4510-4559 \
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation \
-e DEBUG=1 \
-v /var/run/docker.sock:/var/run/docker.sock \
localstack/localstack
على Windows PowerShell:
docker run -d `
--name localstack `
-p 4566:4566 `
-p 4510-4559:4510-4559 `
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation `
-e DEBUG=1 `
localstack/localstack
الطريقة 2: عبر Docker Compose (موصى بها لهذا الدرس)
قم بإنشاء ملف docker-compose.yml:
version: '3.8'
services:
localstack:
container_name: localstack
image: localstack/localstack:latest
ports:
- "4566:4566" # Port الرئيسي
- "4510-4559:4510-4559" # Ports إضافية
environment:
- SERVICES=s3,lambda,sqs,sns,dynamodb,cloudwatch,cloudformation,iam
- DEBUG=1
- DATA_DIR=/tmp/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
volumes:
- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
بدء التشغيل باستخدام Docker Compose:
docker-compose up -d
الطريقة 3: عبر pip (بديل)
# تثبيت LocalStack CLI
pip install localstack
# بدء LocalStack
localstack start
التحقق من التثبيت
الخطوة 1: التحقق من تشغيل الحاوية
docker ps
النتيجة المتوقعة:
CONTAINER ID IMAGE COMMAND STATUS PORTS
abc123def456 localstack/localstack "docker-entrypoint.sh" Up 2 minutes 0.0.0.0:4566->4566/tcp
الخطوة 2: التحقق من حالة LocalStack
curl http://localhost:4566/_localstack/health
النتيجة المتوقعة:
{
"services": {
"s3": "running",
"lambda": "running",
"sqs": "running",
"dynamodb": "running",
...
}
}
على Windows PowerShell:
Invoke-RestMethod http://localhost:4566/_localstack/health
الخطوة 3: اختبار باستخدام AWS CLI
# إنشاء bucket S3
aws --endpoint-url=http://localhost:4566 s3 mb s3://mon-premier-bucket --profile localstack
# قائمة buckets
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
النتيجة المتوقعة:
make_bucket: mon-premier-bucket
2024-12-18 10:30:00 mon-premier-bucket
خدمات LocalStack المتاحة
النسخة المجانية (Community)
| الخدمة | الدعم | الملاحظات |
|---|---|---|
| S3 | ✅ كامل | تخزين الكائنات |
| Lambda | ✅ كامل | وظائف بدون خادم |
| SQS | ✅ كامل | قائمة الرسائل |
| SNS | ✅ كامل | الإشعارات |
| DynamoDB | ✅ كامل | قاعدة بيانات NoSQL |
| CloudWatch Logs | ✅ جزئي | السجلات فقط |
| CloudFormation | ✅ أساسي | قوالب بسيطة |
| IAM | ✅ أساسي | الأدوار والسياسات |
| EC2 | ⚠️ محدود | البيانات الوصفية فقط |
| VPC | ⚠️ محدود | محاكاة أساسية |
ما سنستخدمه
┌─────────────────────────────────────────────────────────────┐
│ خدمات LocalStack لهذا الدرس │
├─────────────────────────────────────────────────────────────┤
│ │
│ ممارسة كاملة نظرية فقط │
│ (LocalStack) (بدون محاكاة) │
│ │
│ ✅ S3 📚 EC2 (الحالات) │
│ ✅ Lambda 📚 VPC كامل │
│ ✅ SQS/SNS 📚 EBS │
│ ✅ DynamoDB 📚 ELB/ALB │
│ ✅ CloudWatch Logs 📚 Route 53 │
│ ✅ CloudFormation 📚 Auto Scaling │
│ ✅ IAM (أساسي) │
│ │
└─────────────────────────────────────────────────────────────┘
أوامر إدارة LocalStack
بدء LocalStack
# باستخدام Docker
docker start localstack
# باستخدام Docker Compose
docker-compose up -d
# باستخدام CLI
localstack start
إيقاف LocalStack
# باستخدام Docker
docker stop localstack
# باستخدام Docker Compose
docker-compose down
# باستخدام CLI
localstack stop
عرض السجلات
docker logs localstack
# متابعة السجلات في الوقت الحقيقي
docker logs -f localstack
إعادة التشغيل بشكل نظيف
docker stop localstack
docker rm localstack
# ثم إعادة تشغيل أمر docker run
سكريبت الأتمتة
قم بإنشاء سكريبت لتسهيل البدء:
Windows (start-localstack.ps1)
# start-localstack.ps1
Write-Host "بدء LocalStack..." -ForegroundColor Green
# التحقق مما إذا كانت الحاوية موجودة
$container = docker ps -a -q -f name=localstack
if ($container) {
Write-Host "حذف الحاوية القديمة..."
docker rm -f localstack
}
# بدء LocalStack
docker run -d `
--name localstack `
-p 4566:4566 `
-p 4510-4559:4510-4559 `
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation `
localstack/localstack
Write-Host "انتظار البدء (30 ثانية)..." -ForegroundColor Yellow
Start-Sleep -Seconds 30
# التحقق
Write-Host "التحقق..." -ForegroundColor Green
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
Write-Host "LocalStack جاهز!" -ForegroundColor Green
macOS/Linux (start-localstack.sh)
#!/bin/bash
echo "بدء LocalStack..."
# حذف الحاوية القديمة إذا كانت موجودة
docker rm -f localstack 2>/dev/null
# بدء LocalStack
docker run -d \
--name localstack \
-p 4566:4566 \
-p 4510-4559:4510-4559 \
-e SERVICES=s3,lambda,sqs,dynamodb,cloudwatch,cloudformation \
localstack/localstack
echo "انتظار البدء (30 ثانية)..."
sleep 30
# التحقق
echo "التحقق..."
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
echo "LocalStack جاهز!"
الأسماء المستعارة العملية
لتبسيط الأوامر، قم بتكوين اسم مستعار:
Windows PowerShell
أضف إلى ملف $PROFILE:
function awslocal {
aws --endpoint-url=http://localhost:4566 --profile localstack $args
}
macOS/Linux
أضف إلى ~/.bashrc أو ~/.zshrc:
alias awslocal='aws --endpoint-url=http://localhost:4566 --profile localstack'
استخدام الاسم المستعار
# بدلاً من:
aws --endpoint-url=http://localhost:4566 s3 ls --profile localstack
# ستكتب:
awslocal s3 ls
اختبار كامل للبيئة
قم بتنفيذ هذه الأوامر للتحقق من التثبيت الخاص بك:
# 1. التحقق من Docker
docker --version
# 2. التحقق من LocalStack
docker ps | grep localstack
# 3. التحقق من الصحة
curl http://localhost:4566/_localstack/health
# 4. إنشاء bucket S3
awslocal s3 mb s3://test-bucket
# 5. قائمة buckets
awslocal s3 ls
# 6. حذف bucket الاختبار
awslocal s3 rb s3://test-bucket
# 7. التحقق من Lambda (يجب أن تكون فارغة)
awslocal lambda list-functions
لقطة الشاشة المتوقعة
PS C:\Users\VotreNom> docker ps
CONTAINER ID IMAGE STATUS PORTS
abc123 localstack/localstack Up 5 minutes 0.0.0.0:4566->4566/tcp
PS C:\Users\VotreNom> awslocal s3 ls
2024-12-18 10:30:00 test-bucket
PS C:\Users\VotreNom> awslocal lambda list-functions
{
"Functions": []
}
استكشاف الأخطاء وإصلاحها
المشكلة: "Cannot connect to the Docker daemon"
الحل:
- تحقق من تشغيل Docker Desktop
- على Windows، انقر على أيقونة Docker في شريط المهام
- انتظر حتى يكون Docker "Running"
المشكلة: "Port 4566 already in use"
الحل:
# العثور على العملية
# Windows
netstat -ano | findstr 4566
# Linux/macOS
lsof -i :4566
# قتل العملية أو تغيير المنفذ
docker run -p 4567:4566 ...
المشكلة: "Connection refused to localhost:4566"
الحل:
- انتظر 30-60 ثانية بعد البدء
- تحقق من السجلات:
docker logs localstack - أعد تشغيل الحاوية
المشكلة: أوامر AWS بطيئة جداً
الحل: قد يكون LocalStack بطيئًا في الاستدعاء الأول. هذا طبيعي. ستكون الاستدعاءات التالية أسرع.
قائمة التحقق من التحقق
- تم تثبيت Docker Desktop وتشغيله
- حاوية LocalStack قيد التشغيل
- المنفذ 4566 متاح
- أمر
awslocal s3 lsيعمل - تم تكوين الاسم المستعار
awslocal
اختبار التحقق
- ما هو LocalStack؟
- على أي منفذ يستمع LocalStack افتراضيًا؟
- لماذا نستخدم
--endpoint-urlمع AWS CLI؟ - ما هي خدمات AWS التي يحاكيها LocalStack بشكل جيد؟
- كيف تتحقق من أن LocalStack يعمل؟
القسم التالي: مختبر: إعداد البيئة