הגדרת AWS API Gateway: Terraform, אימות, ניטור

סובלים משגיאות 502, עיכובים בתגובה או עומס יתר על השרתים עקב הגדרה לא נכונה של API Gateway? אנחנו מגדירים AWS API Gateway במתכונת turnkey: בוחרים את סוג ה-API האופטימלי, מיישמים אימות באמצעות Cognito או Lambda authorizer, ומקימים ניטור ותוכניות שימוש. הצוות שלנו מטפל בכל התהליך—מבדיקת התצורה הנוכחית ועד לפריסה ותמיכה שוטפת—ומבטיח פעילות יציבה של המיקרוסרוויסים שלכם.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת AWS API Gateway: Terraform, אימות, ניטור
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

פיתוח מיקרוסרוויס על Lambda וקבלת שגיאה 502 — פסקי זמן באינטגרציה. או שלקוח מתלונן על מהירות תגובה בעוד שיומני CloudWatch מראים עיכובים של עד 10 שניות. סביר להניח שהבעיה היא בתצורת API Gateway: פסק זמן שגוי, חוסר caching, או סוג authorizer שגוי. במשך יותר מ-5 שנים של עבודה עם AWS, הגדרנו יותר מ-50 API Gateways — מפרוקסי REST פשוטים ועד שערים רב-אזוריים עם Cognito ו-authorizers מותאמים אישית. לאחרונה, בפרויקט אחד, תצורת פסק זמן שגויה גרמה לכשל נקודת קצה תחת עומס שיא. לאחר מעבר מ-HTTP ל-REST API והפעלת caching, זמן האחזור ירד ב-40%, ועלויות התשתית ירדו ב-30%. הזמינו ייעוץ — נעזור לכם לחסוך עד 30% מהוצאות ה-API Gateway החודשיות שלכם.

אנחנו פותרים בעיות אלה: אינטגרציית Lambda שגויה (שאילתות N+1 ב-DynamoDB עקב תכנון לקוי), חוסר throttling המוביל לעומס יתר על השרת האחורי, ובחירת סוג API שגויה — REST במקום HTTP, הגורמת לכם לשלם פי 3.5 יותר. תצורה נכונה של API Gateway יכולה להפחית את זמן האחזור ב-40% ולמנוע השבתות. הגדרת caching אופטימלית מקצצת את זמן האחזור בחצי.

איך לבחור בין REST API ל-HTTP API?

תכונה REST API HTTP API
אינטגרציית Lambda + +
JWT authorizer + +
Authorizer מותאם אישית + +
תוכניות שימוש / מפתחות API + —
מיפוי בקשה/תגובה + —
אינטגרציית WAF + —
נקודות קצה פרטיות + —
מחיר (למיליון בקשות) $3.50 $1.00

HTTP API מתאים לפרוקסי פשוטים של backend->Lambda. REST API נדרש לשינויי בקשות מורכבים ו-throttling לפי מפתחות API. אם אתם רק מתחילים, בחרו ב-HTTP — הוא זול פי 3.5. בחירה נכונה יכולה לחסוך עד 20% מתקציב התשתית שלכם.

איך להפחית עלויות API Gateway?

בחירת סוג ה-API הנכון היא רק הצעד הראשון. הפעלת caching ברמת השער מפחיתה את מספר הקריאות ל-Lambda, מה שמשפיע ישירות על העלות. תחת עומס גבוה, מעבר מ-HTTP ל-REST עם caching יכול להוריד עלויות ב-30–50%. כמו כן, השתמשו ב-Terraform לאוטומציה: ביטול שגיאות ידניות מפחית תקלות יקרות. נבחן את התרחיש שלכם ונציע תצורה אופטימלית — צרו קשר לפרטים.

למה להשתמש ב-Terraform עבור API Gateway?

Terraform מאפשר ניהול גרסאות של תשתית כקוד, הימנעות משגיאות תצורה ידניות ושכפול סביבות תוך דקות. להלן תצורת REST API טיפוסית עם הרשאת Cognito שבה אנו משתמשים בכל פרויקט.

# main.tf
resource "aws_api_gateway_rest_api" "main" {
  name = "myapp-api"
  description = "Main application API"
  endpoint_configuration {
    types = ["REGIONAL"]
  }
}

resource "aws_api_gateway_resource" "users" {
  rest_api_id = aws_api_gateway_rest_api.main.id
  parent_id = aws_api_gateway_rest_api.main.root_resource_id
  path_part = "users"
}

resource "aws_api_gateway_method" "users_get" {
  rest_api_id = aws_api_gateway_rest_api.main.id
  resource_id = aws_api_gateway_resource.users.id
  http_method = "GET"
  authorization = "COGNITO_USER_POOLS"
  authorizer_id = aws_api_gateway_authorizer.cognito.id
  request_parameters = {
    "method.request.querystring.page" = false
    "method.request.querystring.limit" = false
  }
}

resource "aws_api_gateway_integration" "users_get" {
  rest_api_id = aws_api_gateway_rest_api.main.id
  resource_id = aws_api_gateway_resource.users.id
  http_method = aws_api_gateway_method.users_get.http_method
  integration_http_method = "POST"
  type = "AWS_PROXY"
  uri = aws_lambda_function.users_handler.invoke_arn
}
איך לבחור את סוג ההרשאה?

Cognito מתאים לאימות JWT עם רשתות חברתיות או LDAP. Lambda authorizer נדרש לאינטגרציה עם ספק זהויות חיצוני (IdP) או לוגיקה מורכבת (למשל, בקרת גישה מבוססת IP). בחרו ב-Cognito לתרחישים סטנדרטיים, וב-Lambda לגמישות.

Cognito Authorizer

resource "aws_api_gateway_authorizer" "cognito" {
  name = "cognito-authorizer"
  rest_api_id = aws_api_gateway_rest_api.main.id
  type = "COGNITO_USER_POOLS"
  provider_arns = [aws_cognito_user_pool.main.arn]
  identity_source = "method.request.header.Authorization"
}

Lambda Authorizer (אימות מותאם אישית)

resource "aws_api_gateway_authorizer" "lambda" {
  name = "lambda-authorizer"
  rest_api_id = aws_api_gateway_rest_api.main.id
  authorizer_uri = aws_lambda_function.authorizer.invoke_arn
  authorizer_result_ttl_in_seconds = 300
  type = "TOKEN"
  identity_source = "method.request.header.Authorization"
}

תוכניות שימוש ומפתחות API

resource "aws_api_gateway_usage_plan" "standard" {
  name = "standard-plan"
  api_stages {
    api_id = aws_api_gateway_rest_api.main.id
    stage = aws_api_gateway_stage.prod.stage_name
  }
  throttle_settings {
    burst_limit = 100
    rate_limit = 50
  }
  quota_settings {
    limit = 10000
    period = "DAY"
  }
}

resource "aws_api_gateway_api_key" "partner_app" {
  name = "partner-app-key"
}

resource "aws_api_gateway_usage_plan_key" "partner" {
  key_id = aws_api_gateway_api_key.partner_app.id
  key_type = "API_KEY"
  usage_plan_id = aws_api_gateway_usage_plan.standard.id
}

Stage, רישום ופריסה

resource "aws_api_gateway_deployment" "main" {
  rest_api_id = aws_api_gateway_rest_api.main.id
  triggers = {
    redeployment = sha1(jsonencode([
      aws_api_gateway_resource.users.id,
      aws_api_gateway_method.users_get.id,
      aws_api_gateway_integration.users_get.id,
    ]))
  }
  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_api_gateway_stage" "prod" {
  deployment_id = aws_api_gateway_deployment.main.id
  rest_api_id = aws_api_gateway_rest_api.main.id
  stage_name = "prod"
  access_log_settings {
    destination_arn = aws_cloudwatch_log_group.api_gateway.arn
    format = jsonencode({
      requestId = "$context.requestId"
      sourceIp = "$context.identity.sourceIp"
      requestTime = "$context.requestTime"
      httpMethod = "$context.httpMethod"
      routeKey = "$context.routeKey"
      status = "$context.status"
      responseLength = "$context.responseLength"
      latency = "$context.responseLatency"
    })
  }
}

resource "aws_api_gateway_method_settings" "prod" {
  rest_api_id = aws_api_gateway_rest_api.main.id
  stage_name = aws_api_gateway_stage.prod.stage_name
  method_path = "*/*"
  settings {
    throttling_burst_limit = 500
    throttling_rate_limit = 200
    logging_level = "INFO"
    metrics_enabled = true
  }
}

איך להגדיר ניטור והתראות?

  1. הפעל # main.tf resource "aws_api_gateway_rest_api" "main" { name = "myapp-api" description = "Main application API" endpoint_configuration { types = ["REGIONAL"] } } resource "aws_api_gateway_resource" "users" { rest_api_id = aws_api_gateway_rest_api.main.id parent_id = aws_api_gateway_rest_api.main.root_resource_id path_part = "users" } resource "aws_api_gateway_method" "users_get" { rest_api_id = aws_api_gateway_rest_api.main.id resource_id = aws_api_gateway_resource.users.id http_method = "GET" authorization = "COGNITO_USER_POOLS" authorizer_id = aws_api_gateway_authorizer.cognito.id request_parameters = { "method.request.querystring.page" = false "method.request.querystring.limit" = false } } resource "aws_api_gateway_integration" "users_get" { rest_api_id = aws_api_gateway_rest_api.main.id resource_id = aws_api_gateway_resource.users.id http_method = aws_api_gateway_method.users_get.http_method integration_http_method = "POST" type = "AWS_PROXY" uri = aws_lambda_function.users_handler.invoke_arn } בהגדרות ה-stage.
  2. הגדר מדדים מרכזיים: 4XXError, 5XXError, Latency, Count.
  3. צור CloudWatch Alarms בהתאם לספים (ראה טבלה להלן).
  4. הגדר התראות SNS עבור אזעקות.
מדד תיאור סף התראה
4XXError מספר שגיאות לקוח > 5% מהבקשות
5XXError מספר שגיאות שרת > 1% מהבקשות
Latency זמן אחזור ממוצע > 1000 ms
Count מספר בקשות > 1000/דקה

גישה זו מאפשרת תגובה בזמן לבעיות ושמירה על SLA.

מה כלול בעבודה

שלב משך תוצאה
ביקורת ארכיטקטורה נוכחית יום אחד תוכנית אופטימיזציה
עיצוב API 1–2 ימים סכמת API, בחירת הרשאה
סקריפטים של Terraform 2–3 ימים תשתית ניתנת לשכפול
אינטגרציה עם Lambda/DB 1–2 ימים נקודות קצה פעילות
הגדרת ניטור 0.5 יום לוח מחוונים של CloudWatch והתראות
פריסה ותיעוד יום אחד Staging + תיעוד

לוחות זמנים לאספקה

הגדרת REST API עם authorizer אחד ותוכנית שימוש אורכת 3–5 ימי עסקים. אם נדרש דומיין מותאם אישית או טרנספורמציה מורכבת, עד 7 ימים. לוחות זמנים מדויקים נקבעים לאחר ביקורת של הפרויקט שלכם.

הגדרת API Gateway מקצה לקצה יכולה לחסוך עד 30% מעלויות הפיתוח באמצעות שימוש בתשתית כקוד. לצוות שלנו של מהנדסי AWS מוסמכים יש ניסיון של 5+ שנים ו-50+ פרויקטים מוצלחים של API Gateway. צרו קשר לייעוץ — נכין הצעה מותאמת אישית ונחשב את החיסכון האמיתי שלכם. קבלו הערכת פרויקט עוד היום.