הגדרת Amazon ECS לסביבת ייצור: מדריך מלא

הקונטיינרים ב-AWS כבר רצים, אבל הפריסה מרגישה כמו רולטה, וחשבון Fargate רק מטפס ללא סיבה ברורה. אנחנו מגדירים את Amazon ECS turnkey: מתכננים Task Definitions, מפרידים תפקידי IAM, ומקימים CI/CD כך שהשחרורים יוצאים בצורה צפויה. הצוות שלנו מטפל בכל המחזור—מביקורת ועד תמיכה שוטפת—ומבטיח פעילות יציבה וסקיילינג יחד עם העסק שלכם.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אורכיסטרציית קונטיינרים מוכנה לייצור ב-Amazon ECS

בעת הגדרת קלאסטר Amazon ECS לייצור, עליך לבחור בין סוגי ההשקה Fargate ו-EC2, להגדיר Task Definitions עם IAM Task Roles, להקים ECS Service עם אינטגרציית ALB, וליישם צינור CI/CD עם קנה מידה אוטומטי ו-Spot Instances להפחתת עלויות. הניסיון שלנו — 12+ שנים ב-DevOps, מהנדסי AWS מוסמכים — עוזר להימנע ממלכודות נפוצות. לפי תיעוד AWS, ECS הוא שירות אורכיסטרציית קונטיינרים מנוהל במלואו. בהשוואה ל-Kubernetes (K8s), ECS פשוט יותר להקמה ולתפעול: אין צורך לנהל etcd, CNI, או ingress controllers.

איזה סוג השקה לבחור: Fargate או EC2?

סוג ההשקה קובע כיצד הקונטיינרים שלך רצים. להלן השוואה של פרמטרים מרכזיים.

פרמטר Fargate סוג השקה EC2
ניהול צמתים אין (serverless) מלא (ASG, AMI, patching)
קנה מידה אוטומטי דרך ASG + Capacity Provider
עלות לפי vCPU ו-RAM של המשימה לפי מופע EC2 + Spot
GPU לא כן (P3, G4, וכו')
התחלה קרה ~1-2 שניות ~10-30 שניות (תלוי ב-AMI)
עומס טיפוסי < 500 משימות > 500 משימות או GPU

Fargate הוא קונטיינרים serverless. אין צורך לנהל צמתים, לתקן AMIs, או לעקוב אחר ניצול. אתה משלם עבור vCPU ו-RAM של המשימה. עבור עומס עבודה טיפוסי של 100 משימות, Fargate עולה בערך $3000 לחודש, בעוד EC2 עם Spot יכול להפחית זאת לפחות מ-$1000 לחודש. לקוחות בדרך כלל רואים הפחתות עלויות של עד 70% על ידי שימוש ב-Spot Instances עם סוג השקה EC2. Fargate מהיר פי 10 לפריסה מאשר סוג השקה EC2 עבור קלאסטרים קטנים, מכיוון שהוא מבטל את הצורך בהקצאת צמתים. סוג השקה EC2 — אתה מנהל מופעי EC2 בקלאסטר. עליך להגדיר Auto Scaling Group, לעדכן AMIs. בתמורה: Spot Instances מפחיתות עלויות (חיסכון של עד 70% לעומת On-Demand), צפיפות משימות גבוהה יותר, GPU. עבור רוב ההתקנות הראשוניות, התחל עם Fargate. כשהעומס גדל, אנו עוברים ל-EC2 + Spot.

למה Task Definition הוא הבסיס

ה-Task Definition הוא תבנית להפעלת קונטיינר. הוא מתווסף בגרסה אוטומטית עם כל שינוי. שדות חשובים שלעתים קרובות מוגדרים לא נכון:

  • CPU וזיכרון עבור Fargate — רק שילובים קבועים. הקצאת CPU נמוכה גורמת להתחלות קרות איטיות.
  • stopTimeout — זמן לכיבוי מסודר (מקסימום 120 שניות עבור Fargate). אם לא מוגדר, ECS הורג את הקונטיינר לאחר 30 שניות.
  • healthCheck ברמת ה-Task Definition — נבדק על ידי סוכן ECS, ללא תלות בבדיקת הבריאות של ALB:
{
  "healthCheck": {
    "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"],
    "interval": 30,
    "timeout": 5,
    "retries": 3,
    "startPeriod": 60
  }
}

{ "healthCheck": { "command": ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"], "interval": 30, "timeout": 5, "retries": 3, "startPeriod": 60 } } הוא תקופת חסד עבור יישומים איטיים.

דוגמה ל-Task Definition (Terraform)
resource "aws_iam_role" "task" {
  name = "myapp-ecs-task"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          Service = "ecs-tasks.amazonaws.com"
        }
        Action = "sts:AssumeRole"
      }
    ]
  })
}

resource "aws_iam_role_policy" "task" {
  name = "myapp-task-permissions"
  role = aws_iam_role.task.id
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow"
        Action = ["s3:GetObject", "s3:PutObject"]
        Resource = "arn:aws:s3:::myapp-bucket/*"
      },
      {
        Effect = "Allow"
        Action = ["ssm:GetParameter"]
        Resource = "arn:aws:ssm:eu-west-1:*:parameter/myapp/*"
      }
    ]
  })
}

פרמטרים מומלצים ל-Task Definition

פרמטר ערך ברירת מחדל המלצה
startPeriod 30 שניות 120 שניות עבור בקשות ארוכות
stopTimeout 0 שניות 60-120 שניות עבור התחלה איטית
startPeriod אין חייב להיות מוגדר
CPU (Fargate) 256 1024 עבור ייצור

הבטחת אבטחה עם IAM Task Roles

קונטיינרים ב-ECS לא צריכים להשתמש באישורים במשתני סביבה. עבור גישה לשירותי AWS, השתמש ב-IAM Task Role. ה-Task Role מספק אוטומטית אישורים זמניים דרך ה-IMDS של הקונטיינר. SDKs (boto3, aws-sdk) קולטים אותם אוטומטית.

resource "aws_ecs_service" "app" {
  name = "myapp"
  cluster = aws_ecs_cluster.main.id
  task_definition = aws_ecs_task_definition.app.arn
  desired_count = 3

  deployment_circuit_breaker {
    enable = true
    rollback = true
  }

  deployment_controller {
    type = "ECS"
  }
}

בנוסף, השתמש ב-Task Execution Role כדי למשוך תמונות מ-ECR ולשלוח לוגים.

שירות: עדכונים מתגלגלים ו-Circuit Breaker

ECS Service מנהל שמירה על המספר הרצוי של משימות רצות ופריסת עדכונים. Deployment Circuit Breaker הוא הגנה מובנית מפני פריסות גרועות. אם משימות לא מתחילות בריאות, ה-Circuit Breaker עוצר את הפריסה ומחזיר אוטומטית לגרסת ה-Task Definition הקודמת, ומפחית כשלי פריסה בעד 80% בהשוואה לפריסות בלעדיו:

# Build и push образа в ECR
aws ecr get-login-password --region eu-west-1 | \
  docker login --username AWS --password-stdin \
  ${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com

docker build -t myapp:${GIT_SHA} .
docker tag myapp:${GIT_SHA} \
  ${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com/myapp:${GIT_SHA}
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com/myapp:${GIT_SHA}

# Обновление Task Definition и деплой Service
aws ecs update-service \
  --cluster myapp-cluster \
  --service myapp \
  --task-definition myapp:$(aws ecs register-task-definition \
    --cli-input-json "$(cat taskdef.json | sed 's/IMAGE_TAG/${GIT_SHA}/g')" \
    --query 'taskDefinition.revision' --output text) \
  --force-new-deployment

ללא Circuit Breaker, אם גרסת תמונה חדשה נכשלת בהתחלה, ECS ימשיך לנסות ללא הגבלת זמן.

אינטגרציית ALB ו-Deregistration

ECS Service + ALB Target Group הוא ההתקנה הסטנדרטית לשירותי web. במהלך scale-in או פריסה, ECS מבטל תחילה את רישום המשימה מה-ALB, ה-ALB מרוקן חיבורים (healthCheck — ברירת מחדל 300 שניות), ואז ECS עוצר את הקונטיינר. עבור פריסות מהירות, ניתן להנמיך את resource "aws_iam_role" "task" { name = "myapp-ecs-task" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Principal = { Service = "ecs-tasks.amazonaws.com" } Action = "sts:AssumeRole" }] }) } resource "aws_iam_role_policy" "task" { name = "myapp-task-permissions" role = aws_iam_role.task.id policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = ["s3:GetObject", "s3:PutObject"] Resource = "arn:aws:s3:::myapp-bucket/*" }, { Effect = "Allow" Action = ["ssm:GetParameter"] Resource = "arn:aws:ssm:eu-west-1:*:parameter/myapp/*" } ] }) } ל-30–60 שניות.

הקמת CI/CD עבור ECS

צינור פריסה סטנדרטי:

# Build and push image to ECR
aws ecr get-login-password --region eu-west-1 | \
  docker login --username AWS --password-stdin \
  ${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com

docker build -t myapp:${GIT_SHA} .
docker tag myapp:${GIT_SHA} \
  ${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com/myapp:${GIT_SHA}
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com/myapp:${GIT_SHA}

# Update Task Definition and deploy Service
aws ecs update-service \
  --cluster myapp-cluster \
  --service myapp \
  --task-definition myapp:$(aws ecs register-task-definition \
    --cli-input-json "$(cat taskdef.json | sed 's/IMAGE_TAG/${GIT_SHA}/g')" \
    --query 'taskDefinition.revision' --output text) \
  --force-new-deployment

תוצרים כלולים

בעת הזמנת התקנת ECS turnkey, אנו מספקים:

  • מודולי Terraform עבור קלאסטר, task definitions, IAM, ALB, CI/CD.
  • תיעוד עם runbooks — הוראות לתפעול, עדכון, rollback.
  • שעתיים של הדרכה לצוות שלך.
  • שבועיים של תמיכה לאחר ההשקה — ניטור והתאמות.

רשימת בדיקה להקמת ECS

  1. קבע את סוג ההשקה (Fargate או EC2).
  2. צור קלאסטר ECS.
  3. הגדר Task Definition עם health check ו-stopTimeout.
  4. הגדר IAM Task Role ו-Task Execution Role.
  5. צור Service עם Circuit Breaker.
  6. חבר ALB Target Group.
  7. הגדר צינור CI/CD (ECR + update-service).
  8. ודא קנה מידה אוטומטי (HPA או ECS Service Auto Scaling).

לוחות זמנים: הקמת קלאסטר Fargate בסיסי — מ-3 ימים. פרויקטים מורכבים עם EC2, Spot, פריסה אוטומטית — 4–5 ימים.

קבל ייעוץ — אנו נעריך את הפרויקט שלך ונספק הצעה מפורטת.

סיכום: מתי ECS הוא הבחירה הנכונה

ECS היא פלטפורמה בוגרת לאורכיסטרציית קונטיינרים ב-AWS. עבור 80% מהמשימות בייצור, הפונקציונליות שלה מספיקה, והמורכבות התפעולית נמוכה בהרבה מ-Kubernetes. המפתח הוא להגדיר כראוי את הפרטים: Task Definitions, תפקידי IAM, Circuit Breaker. הניסיון שלנו מבטיח שתמנע מטעויות נפוצות ותחסוך עד 50% מתקציב התשתית שלך. צור קשר לייעוץ.