פריסה של אפליקציית ASP.NET Core ב-App Engine

1. סקירה כללית

ASP.NET Core היא מסגרת חדשה בקוד פתוח ובפלטפורמות שונות ליצירת אפליקציות מודרניות מבוססות-ענן ומחוברות לאינטרנט באמצעות שפת התכנות C#.

בשיעור ה-Lab הזה תפרסו אפליקציית ASP.NET Core פשוטה בסביבה גמישה של App Engine. ה-codelab הזה מבוסס על ה-codelab Build and launch ASP.NET Core app from Google Cloud Shell (פיתוח והשקה של אפליקציית ASP.NET Core מ-Google Cloud Shell). כדאי לבצע את ה-Lab הזה לפני שמנסים את ה-Lab הזה.

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

אפליקציות App Engine עוברות התאמה אוטומטית לעומס (automatic scaling) בהתאם לתעבורת הנתונים הנכנסת. ‫App Engine תומך באופן מקורי באיזון עומסים, במיקרו-שירותים, בהרשאה, במסדי נתונים של SQL ו-NoSQL, ב-Memcache, בפיצול תעבורה, ברישום ביומן, בחיפוש, בניהול גרסאות, בהשקה ובחזרה לגרסה קודמת ובסריקת אבטחה. כל התכונות האלה ניתנות להתאמה אישית.

הסביבות של App Engine, הסביבה הסטנדרטית והסביבה הגמישה, תומכות במגוון שפות תכנות, כולל C#‎,‏ Java,‏ Python,‏ PHP,‏ Node.js,‏ Go ועוד. שתי הסביבות מעניקות למשתמשים גמישות מקסימלית באופן הפעולה של האפליקציה, כי לכל סביבה יש יתרונות מסוימים. מידע נוסף זמין במאמר בנושא בחירת סביבת App Engine.

מה תלמדו

  • איך לארוז אפליקציית ASP.NET Core פשוטה כקובץ Docker.
  • איך פורסים אפליקציית ASP.NET Core פשוטה ב-App Engine.

הדרישות

  • פרויקט ב-Google Cloud Platform
  • דפדפן, כמו Chrome או Firefox

איך תשתמשו במדריך הזה?

רק לקרוא לקרוא ולבצע את התרגילים

איזה דירוג מגיע לדעתך לחוויה שלך עם Google Cloud Platform?

מתחילים ביניים מומחים

2. הגדרה ודרישות

הגדרת סביבה בקצב אישי

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת של תווים שלא נמצאת בשימוש ב-Google APIs, ואפשר לעדכן אותה בכל שלב.
  • מזהה הפרויקט חייב להיות ייחודי בכל הפרויקטים ב-Google Cloud, והוא קבוע (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית. בדרך כלל לא צריך להתייחס אליה. ברוב סדנאות ה-Codelab, צריך להפנות למזהה הפרויקט (ובדרך כלל הוא מזוהה כ-PROJECT_ID), אז אם לא מוצא חן בעיניכם, אפשר ליצור מזהה אקראי אחר, או לנסות מזהה משלכם ולבדוק אם הוא זמין. אחרי שהפרויקט נוצר, הוא 'קפוא'.
  • יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API. העלות של התרגול הזה לא אמורה להיות גבוהה, ואולי אפילו לא תצטרכו לשלם בכלל. כדי לכבות את המשאבים ולא לחייב אתכם מעבר למה שמוסבר במדריך הזה, צריך לפעול לפי ההוראות לניקוי שמופיעות בסוף ה-Codelab. משתמשים חדשים ב-Google Cloud זכאים לתוכנית תקופת ניסיון בחינם בשווי 300$.

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-codelab הזה תשתמשו ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

הפעלת Cloud Shell

  1. ב-Cloud Console, לוחצים על Activate Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (מתחת לקו הקיפול) עם תיאור של הכלי. במקרה כזה, לוחצים על המשך (והמסך הזה לא יוצג לכם יותר). כך נראה המסך החד-פעמי:

70f315d7b402b476.png

הקצאת המשאבים והחיבור ל-Cloud Shell נמשכים רק כמה רגעים.

fbe3a0674c982259.png

המכונה הווירטואלית הזו כוללת את כל הכלים שדרושים למפתחים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר מאוד את הביצועים והאימות ברשת. אפשר לבצע את רוב העבודה ב-codelab הזה, אם לא את כולה, באמצעות דפדפן או Chromebook.

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

  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שעברתם אימות:
gcloud auth list

פלט הפקודה

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט:
gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

אם לא, אפשר להגדיר אותו באמצעות הפקודה הבאה:

gcloud config set project <PROJECT_ID>

פלט הפקודה

Updated property [core/project].

3. יצירת אפליקציית ASP.NET Core ב-Cloud Shell

בשורת הפקודה של Cloud Shell, אפשר לוודא שכלי שורת הפקודה dotnet כבר מותקן על ידי הצגת רשימה של ערכות ה-SDK של ‎ .NET שהותקנו:

dotnet --list-sdks

לאחר מכן, יוצרים אפליקציית אינטרנט בסיסית חדשה ב-ASP.NET Core עם מסגרת יעד של netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

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

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. הפעלת אפליקציית ASP.NET Core

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

cd HelloWorldAspNetCore

לבסוף, מפעילים את האפליקציה.

dotnet run --urls=http://localhost:8080

האפליקציה מתחילה להאזין ביציאה 8080.

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

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

Capture.PNG

יוצג דף האינטרנט שמוגדר כברירת מחדל ב-ASP.NET Core:

f579a9baedc108a9.png

אחרי שמוודאים שהאפליקציה פועלת, לוחצים על Ctrl+C כדי לסגור את האפליקציה.

5. פרסום אפליקציית ASP.NET Core

עכשיו מפרסמים את האפליקציה כדי לקבל DLL עצמאי באמצעות הפקודה dotnet publish.

dotnet publish -c Release

הפעלת publish מציגה כמה הודעות עם DLL שפורסם בהצלחה בסוף התהליך.

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. יצירת קובץ app.yaml עבור סביבה גמישה של App Engine

קובץ app.yaml מתאר איך לפרוס את האפליקציה ב-App Engine, במקרה הזה, בסביבה הגמישה של App Engine.

קודם, עוברים לתיקייה publish. הנתיב המדויק תלוי בגרסה של ‎ .NET, אבל הוא צריך להיות מתחת לתיקייה bin/Release:

cd bin/Release/netcoreapp3.1/publish/

יוצרים קובץ app.yaml בתוך התיקייה publish:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

שימו לב איך בקובץ app.yaml הסביבה מוגדרת כ-flex וזמן הריצה כ-aspnetcore.

7. פריסה בסביבה הגמישה של App Engine

האפליקציה מוכנה לפריסה בסביבה הגמישה של App Engine באמצעות gcloud. בתוך הספרייה publish, מריצים את הפקודה הבאה:

gcloud app deploy --version v0

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

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

הפעולה הזו תיצור תמונה של האפליקציה בענן, תשמור את התמונה ב-Google Container Registry ותפרוס אותה ב-App Engine. במהלך הפריסה, אפשר לראות את קובץ אימג' של קונטיינר בזמן שהוא נוצר:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

בסיום, אמור להופיע שהאפליקציה נפרסה.

...
Deployed service [default] to [https://<project-id>.appspot.com]

אחרי שפורסים את האפליקציה,פותחים את כתובת ה-URL‏ http://<project-id>.appspot.com בדפדפן האינטרנט כדי להיכנס אליה.

דף האינטרנט של ASP.NET Core שמוגדר כברירת מחדל יופיע בכרטיסייה חדשה.

f579a9baedc108a9.png

אפשר גם לעיין בקובץ אימג' של קונטיינר שנוצר בשבילכם בענן. במסוף Cloud, עוברים אל Container Registry > Images. בתיקייה appengine אמור להופיע קובץ האימג' של האפליקציה.

de788f4949d0c5a.png

8. פריסת גרסה חדשה של השירות

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

קודם נשנה את האפליקציה. פותחים את עורך הקוד מ-Cloud Shell.

868c4f615e2331fe.png

עוברים אל Index.cshtml בתיקייה Views/Home של HelloWorldAspNetCore ומעדכנים את הודעת ברירת המחדל להודעה הבאה:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

שומרים את השינויים וחוזרים אל Cloud Shell. בתוך HelloWorldAspNetCore,, מפרסמים את האפליקציה כדי לקבל קובץ DLL עצמאי.

dotnet publish -c Release

עוברים לספריית הפרסום.

cd bin/Release/netcoreapp3.1/publish/

עכשיו אפשר לפרוס גרסה חדשה של האפליקציה (v1 במקרה הזה).

gcloud app deploy --version v1

אחרי הפריסה, אפשר לעבור לקטע Versions (גרסאות) ב-App Engine במסוף Google Cloud כדי לראות את הגרסה החדשה של האפליקציה שמציגה את ההודעה החדשה לכל התנועה.

8cc0cc992b4e07ed.png

9. מרכז בקרה וחלוקת התנועה

ב-App Engine, בקטע Dashboard, אפשר לראות מספר מרכזי בקרה של האפליקציה, למשל לגבי זמן האחזור, המעבד וכו'. כדאי לעיין בהם בעצמכם.

5c879431935b080d.png

בקטע Versions (גרסאות) אפשר לראות את הגרסאות של האפליקציה שנפרסו, ובקטע Traffic Splitting (פיצול תנועת הגולשים) אפשר לפצל את תנועת הגולשים בין גרסאות שונות. נפצל את התנועה בין שתי גרסאות:

176a2e22e755b6d3.png

10. מעולה!

Cleanup

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

עוברים לקטע versions (גרסאות) ב-App Engine.

7e9b3b4406e785b9.png

בוחרים את הגרסה ומפסיקים אותה.

7f80d9ff2c959e0.png

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

29f3cb5c71225b2d.png

מה נכלל

הנה! יצרתם אפליקציית ASP.NET Core, ארזתם אותה כקונטיינר Docker ופרסתם אותה ב-Google App Engine Flexible.

  • איך לארוז אפליקציית ASP.NET Core פשוטה כקובץ Docker.
  • איך פורסים אפליקציית ASP.NET Core פשוטה ב-App Engine.

השלבים הבאים

רישיון

עבודה זו מורשית תחת רישיון Creative Commons שמותנה בייחוס 2.0 כללי.