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

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

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

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

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

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

הסביבות של 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

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

הפעלת Cloud Shell

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

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על 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. הנתיב אמור להיות בתיקייה bin/Release, אבל הנתיב המדויק תלוי בגרסה של .NET:

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 > תמונות ולאחר מכן בתיקייה 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

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

8cc0cc992b4e07ed.png

9. מרכזי בקרה ופיצול תנועה

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

5c879431935b080d.png

בקטע 'גרסאות' אפשר לראות את הגרסאות של האפליקציה שנפרסו, ואפשר לפצל את התנועה בין גרסאות שונות בקטע 'חלוקת תנועה'. נפצל את התנועה בין שתי גרסאות:

176a2e22e755b6d3.png

10. מעולה!

ביטול הקישור

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

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

7e9b3b4406e785b9.png

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

7f80d9ff2c959e0.png

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

29f3cb5c71225b2d.png

אילו נושאים דיברנו?

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

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

השלבים הבאים

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.