פריסת אפליקציית ASP.NET ב-Compute Engine

במדריך הזה מוסבר איך פורסים אפליקציית אינטרנט של ‎ .NET ב-Compute Engine.

המדריך הזה מיועד למפתחים ולמהנדסי DevOps שיש להם ידע בסיסי ב-Microsoft .NET וב-Compute Engine.

מטרות

פריסת אפליקציית אינטרנט ב-ASP.NET Core שמשתמשת ב-‎ .NET 6 ופועלת ב-Linux במכונה אחת של Compute Engine.

במדריך הזה מוסבר איך לבצע את הפעולות הבאות כדי להשיג את היעד שלכם:

  • פריסת מכונה וירטואלית ב-Compute Engine
  • הגדרת איזון עומסים
  • פריסת אפליקציית ASP.NET

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

פריסת מכונה וירטואלית ב-Compute Engine

בקטע הזה מוסבר איך ליצור מכונה וירטואלית של Linux או מכונה וירטואלית של Windows Server שמריצה שרתי אינטרנט של Microsoft Internet Information Services (IIS) ב-Compute Engine.

  1. מגדירים ערכי ברירת מחדל למזהה הפרויקט ולתחום (zone) של Compute Engine. כך תוכלו לחסוך זמן.

    gcloud config set project PROJECT_ID
    gcloud config set compute/zone ZONE
    

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

    • PROJECT_ID במזהה הפרויקט. Google Cloud
    • ZONE בשם האזור שבו תשתמשו ליצירת משאבים. אם אתם לא בטוחים באיזה אזור לבחור, השתמשו באזור שממוקם הכי קרוב אליכם מבחינה גיאוגרפית.

    לדוגמה:

    gcloud config set project test-project-12345
    gcloud config set compute/zone us-central1-a
    
  2. יוצרים מופע של VM:

    כדי ליצור מכונה וירטואלית (VM) של Linux:

    1. יוצרים סקריפט לטעינה בזמן ההפעלה עבור המכונה הווירטואלית. הסקריפט פועל במהלך האתחול של ה-VM ומתקין את סביבת זמן הריצה של ‎ .NET:

      "if ! dpkg-query -W aspnetcore-runtime-6.0
      then
          curl https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb  -O
          sudo dpkg -i packages-microsoft-prod.deb
          rm packages-microsoft-prod.deb
          sudo apt-get update && sudo apt-get install -y aspnetcore-runtime-6.0
      fi
      " | Out-File -Encoding ASCII startup.sh
      
    2. יוצרים את המכונה הווירטואלית ומשתמשים ב-startup.sh כסקריפט לטעינה בזמן ההפעלה:

      gcloud compute instances create clouddemo-1 `
          --image-family debian-11 `
          --image-project debian-cloud `
          --machine-type n1-standard-2 `
          --boot-disk-type pd-ssd `
          --tags loadbalancer-backend `
          --metadata-from-file startup-script=startup.sh
      
  3. כדי לעקוב אחרי תהליך האתחול של המכונה הווירטואלית, אפשר לצפות בפלט של היציאה הטורית שלה:

    gcloud compute instances tail-serial-port-output clouddemo-1
    

    מחכים כ-5 דקות עד שמוצגת הפלט Instance setup finished או Startup finished, ואז מקישים על Ctrl+C. בשלב הזה, ההתקנה של הדרישות המוקדמות הושלמה ומכונת ה-VM מוכנה לשימוש.

הגדרת איזון עומסים

כדי להפוך את אפליקציית ASP.NET לזמינה באינטרנט, צריך להשתמש במאזן עומסים ב-HTTPS. כדי לשייך את מופע ה-VM למאזן העומסים, יוצרים קבוצת מופעים ומקצים את קבוצת המופעים הזו למאזן העומסים:

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

    gcloud compute instance-groups unmanaged create clouddemo-1
    gcloud compute instance-groups unmanaged add-instances clouddemo-1 --instances clouddemo-1
    
  2. יוצרים בדיקת תקינות שבודקת אם שרת האינטרנט פועל:

    gcloud compute http-health-checks create clouddemo-health `
        --check-interval 5s `
        --unhealthy-threshold 2 `
        --request-path / `
        --port 5000
    gcloud compute instance-groups set-named-ports clouddemo-1 --named-ports=http:5000
    
  3. יוצרים שירות לקצה העורפי של מאזן עומסים שמשתמש בבדיקת תקינות של HTTP ובקבוצת המופעים שיצרתם קודם:

    gcloud compute backend-services create clouddemo-backend `
      --http-health-checks clouddemo-health `
      --port-name http `
      --protocol HTTP `
      --global
    gcloud compute backend-services add-backend clouddemo-backend `
      --instance-group clouddemo-1 `
      --global `
      --instance-group-zone $(gcloud config get-value compute/zone)
    
  4. יוצרים חזית למאזן העומסים:

    gcloud compute url-maps create clouddemo-map --default-service clouddemo-backend
    gcloud compute target-http-proxies create clouddemo-proxy --url-map clouddemo-map
    gcloud compute forwarding-rules create clouddemo-frontend --global --target-http-proxy clouddemo-proxy --ports 80
    
  5. יוצרים כלל חומת אש שמאפשר למאזן העומסים לשלוח בקשות HTTP למכונות שסומנו בתג loadbalancer-backend.

    gcloud compute firewall-rules create loadbalancer-backend `
      --source-ranges "130.211.0.0/22,35.191.0.0/16" `
      --target-tags loadbalancer-backend `
      --allow tcp:80,tcp:5000
    
  6. מחפשים את כתובת ה-IP של מאזן העומסים:

    gcloud compute forwarding-rules describe clouddemo-frontend --global --format "value(IPAddress)"
    

    חשוב לרשום את כתובת ה-IP. תצטרכו אותו בהמשך.

פריסת אפליקציית ASP.NET

  1. פותחים מסוף PowerShell.

  2. מורידים ופותחים את הקובץ או משכפלים את מאגר הדוגמאות מ-GitHub:

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    
  3. יוצרים את חבילת הפריסה:

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

      cd dotnet-docs-samples\applications\clouddemo\netcore
      
    2. בונים את הפתרון:

      dotnet publish -c Release
      
  4. מעתיקים את חבילת הפריסה למכונה הווירטואלית:

    1. מעתיקים את התוכן של התיקייה publish לספריית הבית במכונה הווירטואלית:

      gcloud compute scp --recurse CloudDemo.MvcCore\bin\Release\net6.0\publish clouddemo-1:
      
    2. מתחברים למכונה הווירטואלית באמצעות SSH.

    3. ב-VM, יוצרים תיקייה /var/www/clouddemo ומעתיקים אליה את קובצי האפליקציה:

      sudo mkdir -p /var/www/clouddemo
      sudo chown -R www-data:www-data /var/www/clouddemo
      sudo cp -r publish/* /var/www/clouddemo
      
    4. רושמים את האפליקציה כיחידת systemd:

      cat <<EOF > kestrel-clouddemo.service
      [Unit]
      Description=Cloud Demo ASP.NET app
      
      [Service]
      WorkingDirectory=/var/www/clouddemo
      ExecStart=/usr/bin/dotnet /var/www/clouddemo/CloudDemo.MvcCore.dll
      Restart=always
      Environment=ASPNETCORE_ENVIRONMENT=Production
      Environment=ASPNETCORE_URLS=http://0.0.0.0:5000
      
      [Install]
      WantedBy=multi-user.target
      EOF
      
      sudo mv kestrel-clouddemo.service /etc/systemd/system/
      sudo systemctl daemon-reload
      sudo systemctl start kestrel-clouddemo
      
  5. במחשב המקומי, פותחים דפדפן אינטרנט ועוברים לכתובת הבאה:

    http://LOADBALANCER_IP/
    

    מחליפים את LOADBALANCER_IP בכתובת ה-IP שקיבלתם אחרי פריסת מאזן העומסים.

    עכשיו אפשר לראות את אפליקציית ההדגמה ואת הכותרת This app is running on Compute Engine (האפליקציה הזו פועלת ב-Compute Engine).

הסרת המשאבים

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

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

מחיקת משאבים בודדים

תצטרכו למחוק כל אחד מהמשאבים שנוצרו עבור הפרויקט (לדוגמה: קבוצות של מכונות וירטואליות, בדיקות תקינות, שירותי קצה עורפי, שרתי proxy של HTTP וכללי העברה). אי אפשר למחוק את מופעי מכונות וירטואליות עד שמחקתם את כל המשאבים האלה.

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