יצירת אפליקציה ממשאבים קיימים

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

המדריך למתחילים הזה מיועד למשתמשים שרוצים להשתמש בתשתית הקיימת שלהם כדי לקבל תצוגה של המשאבים ושליטה תפעולית עליהם, על ידי קיבוץ Google Cloud המשאבים לאפליקציות לוגיות.

לפני שמתחילים

לפני שמתחילים במדריך למתחילים הזה, צריך לבצע את הפעולות הבאות:

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

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

  3. מוודאים שממשקי ה-API הבאים מופעלים בפרויקט הניהול. כשמגדירים פרויקט ניהול, רוב ממשקי ה-API שצריך כדי להשתמש במדריך הזה מופעלים באופן אוטומטי.

    • ‫Compute Engine API ‏ (compute.googleapis.com)
    • ‫Infrastructure Manager API ‏ (config.googleapis.com)

    הפעלת ממשקי API

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להפעלת ממשקי API נדרשים וליצירת אפליקציה לדוגמה ממשאבים קיימים, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט הניהול:

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

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

פריסת רכיבים לדוגמה לאפליקציה

קודם צריך לפרוס קבוצה של משאבי Google Cloud דוגמה שבהם תשתמשו בהמשך כדי להגדיר אפליקציה גלובלית ב-App Hub, על ידי רישום שלהם כרכיבי אפליקציה:

כדי לפרוס את המשאבים האלה:

gcloud

  1. מגדירים את משתני הסביבה הנדרשים:

    export PROJECT_ID="PROJECT_ID"
    export REGION="REGION"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: המזהה של פרויקט הניהול.
    • REGION: האזור שבחרתם למשאבים, לדוגמה, us-central1.
  2. פורסים שירות לדוגמה ב-Cloud Run בשם hello-run:

    gcloud run deploy hello-run \
        --image=us-docker.pkg.dev/cloudrun/container/hello \
        --allow-unauthenticated \
        --region=${REGION} \
        --project=${PROJECT_ID}
    
  3. יוצרים מאזן עומסים גלובלי חיצוני של אפליקציות. התהליך הזה כולל את השלבים הבאים:

    1. יוצרים קבוצה של נקודות קצה ברשת (NEG) ללא שרת בשם hello-run-neg:

      gcloud compute network-endpoint-groups create hello-run-neg \
          --region=${REGION} \
          --network-endpoint-type=serverless \
          --cloud-run-service=hello-run \
          --project=${PROJECT_ID}
      

      ה-NEG משמש כקצה עורפי למאזן העומסים, ומפנה לשירות hello-run.

    2. יוצרים שירות קצה עורפי כדי לנהל את אופן חלוקת התנועה ל-NEG:

      gcloud compute backend-services create hello-backend-service \
          --global \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --project=${PROJECT_ID}
      
    3. מוסיפים את ה-NEG בלי שרת (serverless) לשירות לקצה העורפי:

      gcloud compute backend-services add-backend hello-backend-service \
          --global \
          --network-endpoint-group=hello-run-neg \
          --network-endpoint-group-region=${REGION} \
          --project=${PROJECT_ID}
      
    4. יוצרים מפת URL כדי לנתב בקשות נכנסות לשירות הקצה העורפי:

      gcloud compute url-maps create hello-url-map \
          --default-service=hello-backend-service \
          --project=${PROJECT_ID}
      
    5. יוצרים proxy מסוג HTTP כדי לקבל בקשות ולנתב אותן באמצעות מפת URL:

      gcloud compute target-http-proxies create hello-http-proxy \
          --url-map=hello-url-map \
          --project=${PROJECT_ID}
      
    6. יוצרים כלל העברה גלובלי:

      gcloud compute forwarding-rules create hello-forwarding-rule \
          --global \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --target-http-proxy=hello-http-proxy \
          --ports=80 \
          --project=${PROJECT_ID}
      

      כלל ההעברה הזה מספק כתובת IP ציבורית ויציאה לטיפול בבקשות משתמשים נכנסות ומפנה אותן לשרת ה-proxy.

Terraform

  1. יוצרים קובץ main.tf ומוסיפים את הקוד הבא:

    # Provider configuration
    provider "google" {
      project = "PROJECT_ID"
    }
    
    # Cloud Run service
    resource "google_cloud_run_v2_service" "default" {
      name     = "hello-run"
      location = "REGION"
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
      }
    }
    
    # Allow unauthenticated access to the Cloud Run service
    resource "google_cloud_run_v2_service_iam_member" "noauth" {
      project  = google_cloud_run_v2_service.default.project
      location = google_cloud_run_v2_service.default.location
      name     = google_cloud_run_v2_service.default.name
      role     = "roles/run.invoker"
      member   = "allUsers"
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • PROJECT_ID: המזהה של פרויקט הניהול.
    • REGION: האזור שבחרתם למשאבים, לדוגמה, us-central1.

    הבלוק הזה מגדיר את הספק Google Cloud ומגדיר שירות Cloud Run שפונה לציבור באמצעות קובץ אימג' לדוגמה של קונטיינר hello-world. היא כוללת גם קשירת מדיניות IAM כדי לאפשר הפעלות לא מאומתות, וכך השירות נגיש לציבור.

  2. מוסיפים את הקוד הבא לקובץ main.tf כדי ליצור את מאזן העומסים של אפליקציות (ALB) החיצוני הגלובלי:

    # Serverless NEG for the Cloud Run service
    resource "google_compute_region_network_endpoint_group" "serverless_neg" {
      name                  = "hello-run-neg"
      network_endpoint_type = "SERVERLESS"
      region                = "REGION"
      cloud_run {
        service = google_cloud_run_v2_service.default.name
      }
    }
    
    # Global external backend service
    resource "google_compute_backend_service" "default" {
      name                            = "hello-backend-service"
      protocol                        = "HTTP"
      load_balancing_scheme           = "EXTERNAL_MANAGED"
      backend {
        group = google_compute_region_network_endpoint_group.serverless_neg.id
      }
    }
    
    # URL map to route requests to the backend service
    resource "google_compute_url_map" "default" {
      name            = "hello-url-map"
      default_service = google_compute_backend_service.default.id
    }
    
    # HTTP proxy to route requests to the URL map
    resource "google_compute_target_http_proxy" "default" {
      name    = "hello-http-proxy"
      url_map = google_compute_url_map.default.id
    }
    
    # Global forwarding rule to handle incoming requests
    resource "google_compute_global_forwarding_rule" "default" {
      name       = "hello-forwarding-rule"
      target     = google_compute_target_http_proxy.default.id
      port_range = "80"
    }
    

    הבלוק הזה מגדיר את הרכיבים הבאים:

    • קבוצה של נקודות קצה ברשת (NEG) בלי שרת (serverless), שמשמשת כבק-אנד למאזן העומסים (LB) ומפנה לשירות Cloud Run.
    • שירות קצה עורפי שמפנה תנועה ל-NEG ללא שרת.
    • מפת URL לניתוב בקשות נכנסות לשירות הקצה העורפי.
    • שרת proxy של HTTP לקבלת בקשות ולהפניה שלהן באמצעות מיפוי כתובות ה-URL.
    • כלל העברה גלובלי, שמספק כתובת IP ציבורית ויציאה לטיפול בבקשות משתמשים נכנסות ומפנה אותן לשרת ה-proxy.
  3. מפעילים את Terraform ומחילים את ההגדרות:

    terraform init
    terraform apply
    

    ‫Terraform פורס את המשאבים בפרויקט.

הגדרת האפליקציה במרכז האפליקציות

אחרי פריסת המשאבים ככלל העברה וכשירות Cloud Run, פועלים לפי השלבים הבאים כדי לקבץ אותם באפליקציית מרכז האפליקציות על ידי רישומם כשירותים של האפליקציה:

המסוף

  1. עוברים לדף אפליקציות ממרכז האפליקציות:

    מעבר אל Applications

  2. לוחצים על Create application (יצירת אפליקציה).

  3. בכרטיסייה Application details (פרטי האפליקציה), בוחרים באפשרות Global (גלובלי) בתור מיקום האפליקציה.

  4. מזינים my-global-app בשדה שם האפליקציה.

  5. אפשר גם להוסיף שם מוצג ותיאור לאפליקציה.

  6. לוחצים על Continue.

  7. בכרטיסייה Application resources, מעיינים במשאבי התשתית ומסמנים את תיבות הסימון של כלל ההעברה ושירות Cloud Run.

  8. לוחצים על Continue.

  9. בכרטיסייה מאפיינים ובעלים אפשר להוסיף מאפיינים לאפליקציה, כמו רמת קריטיות, סביבה ובעלי האפליקציה.

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

  10. לוחצים על יצירה.

אחרי שיוצרים את האפליקציה, הפרטים שלה מוצגים בדף Applications, כולל המשאבים שרשמתם כשירותים.

gcloud

  1. יוצרים את האפליקציה:

    gcloud apphub applications create my-global-app \
        --location=global \
        --display-name="My Global Application" \
        --project=${PROJECT_ID}
    
  2. מאתרים את המזהים של כלל ההעברה ושל שירות Cloud Run באזור המתאים:

    gcloud apphub discovered-services list \
        --location=global \
        --project=${PROJECT_ID}
    
    gcloud apphub discovered-services list \
        --location=${REGION} \
        --project=${PROJECT_ID}
    

    שימו לב למזהה של כלל ההעברה ולשירות Cloud Run.

  3. רושמים את כלל ההעברה באפליקציה הגלובלית:

    gcloud apphub applications services create frontend-service \
        --application=my-global-app \
        --discovered-service=projects/${PROJECT_ID}/locations/global/discoveredServices/FRONTEND_ID \
        --display-name="Frontend Service" \
        --location=global \
        --project=${PROJECT_ID}
    

    מחליפים את FRONTEND_ID במזהה של כלל ההעברה.

  4. רישום שירות Cloud Run באפליקציה הגלובלית:

    gcloud apphub applications services create backend-service \
        --application=my-global-app \
        --discovered-service=projects/${PROJECT_ID}/locations/${REGION}/discoveredServices/BACKEND_ID \
        --display-name="Backend Service" \
        --location=global \
        --project=${PROJECT_ID}
    

    מחליפים את BACKEND_ID במזהה של שירות Cloud Run.

Terraform

  1. יוצרים קובץ application.tf ומוסיפים את הקוד הבא:

    # Application
    resource "google_apphub_application" "my_global_app" {
      project        = "PROJECT_ID"
      location       = "global"
      application_id = "my-global-app"
      display_name   = "My Global Web App"
      description    = "A sample global web application."
      scope {
        type = "GLOBAL"
      }
      attributes {
        criticality {
          type = "MEDIUM"
        }
        environment {
          type = "DEVELOPMENT"
        }
        business_owners {
          display_name = "Example Business Owner"
          email        = "business-owner@example.com"
        }
        developer_owners {
          display_name = "Example Developer"
          email        = "dev-owner@example.com"
        }
        operator_owners {
          display_name = "Example Operator"
          email        = "operator-owner@example.com"
        }
      }
    }
    

    הבלוק הזה משתמש במשאב google_apphub_application כדי ליצור קיבוץ לוגי של רכיבי האפליקציה.

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

  2. כדי לגלות את המשאבים שפרסתם, מוסיפים את הקוד הבא ל-application.tf:

    # Discover the forwarding rule
    data "google_apphub_discovered_service" "frontend_service" {
      location = "global"
      service_uri = "//compute.googleapis.com/${google_compute_global_forwarding_rule.default.id}"
    }
    
    # Discover the Cloud Run service
    data "google_apphub_discovered_service" "backend_service" {
      location    = "REGION"
      service_uri = "//run.googleapis.com/${google_cloud_run_v2_service.default.id}"
    }
    

    google_apphub_discovered_service מקורות הנתונים מוצאים את שמות המשאבים של התשתית הקיימת על סמך כתובות ה-URI שלהם. בשלב הזה, מרכז האפליקציות מזהה את המשאבים הספציפיים שרוצים לרשום כשירותים.

  3. מוסיפים את הקוד הבא אל application.tf כדי לרשום את המשאבים שנמצאו:

    # Register the forwarding rule as a service in the application
    resource "google_apphub_service" "frontend" {
      project            = "PROJECT_ID"
      location           = "global"
      application_id     = google_apphub_application.my_global_app.application_id
      service_id         = "frontend-service"
      display_name       = "Frontend Service (LB)"
      discovered_service = data.google_apphub_discovered_service.frontend_service.name
    }
    
    # Register the Cloud Run service as a service in the application
    resource "google_apphub_service" "backend" {
      project            = "PROJECT_ID"
      location           = "global"
      application_id     = google_apphub_application.my_global_app.application_id
      service_id         = "backend-service"
      display_name       = "Backend Service (Cloud Run)"
      discovered_service = data.google_apphub_discovered_service.backend_service.name
    }
    

    המשאבים של google_apphub_service רושמים באופן רשמי את המשאבים שזוהו באפליקציה כשירותים. בשלב הזה מקשרים את התשתית לאפליקציה שהגדרתם במרכז האפליקציות.

  4. מפעילים את Terraform ומחילים את ההגדרות:

    terraform init
    terraform apply
    

    ‫Terraform רושם את המשאבים באפליקציית my-global-app במרכז האפליקציות.

אופציונלי: מעקב אחרי האפליקציה החדשה

אחרי שמגדירים את האפליקציה ב-App Hub, אפשר להשתמש במוצרים משולבים שלGoogle Cloud כדי לעקוב אחרי התקינות והביצועים שלה:

הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים:

  1. ביטול הרישום של השירותים.
  2. מחיקת האפליקציה הגלובלית.
  3. אם השתמשתם ב-Terraform כדי לפרוס את האפליקציה, מריצים את הפקודה terraform destroy בספרייה שמכילה את קובצי Terraform כדי לבטל את ההקצאה של כל המשאבים שיצרתם.
  4. אופציונלי: אם יצרתם פרויקט חדש בשביל המדריך הזה למתחילים, מוחקים את הפרויקט.

המאמרים הבאים