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

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

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

בשיעור ה-Lab הזה תפרסו אפליקציית ASP.NET Core פשוטה בסביבה הגמישה של App Engine. שיעור ה-Codelab הזה מבוסס על שיעור ה-Codelab יצירה והפעלה של אפליקציית ASP.NET Core מ-Google Cloud Shell. כדאי לעבור קודם את שיעור ה-Lab הזה לפני שמנסים את שיעור ה-Lab הזה.

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

ההתאמה האוטומטית לעומס של אפליקציות App Engine מתבצעת על סמך תעבורת הנתונים הנכנסת. ‫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.pngb9a10ebdf5b5a448.pnga1e3c01a38fa61c2.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

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

עוברים לקטע 'גרסאות' של 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.