שלום Cloud Run עם C#

1. מבוא

89eb4723767d4525.png

Cloud Run היא פלטפורמה מנוהלת שמאפשרת להריץ קונטיינרים ללא שמירת מצב, שניתן לבצע באמצעות בקשות HTTP. Cloud Run הוא ללא שרת (serverless): הוא מפשט את כל ניהול התשתית, כך שאתם יכולים להתמקד במה שהכי חשוב – פיתוח אפליקציות מעולות.

היא מבוססת על Knative, ומאפשרת לכם להריץ את הקונטיינרים בניהול מלא באמצעות Cloud Run, או באשכול Google Kubernetes Engine באמצעות Cloud Run ב-GKE.

המטרה של ה-Codelab היא לפתח קובץ אימג' של קונטיינר ולפרוס אותו ב-Cloud Run.

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

הגדרת סביבה בקצב עצמאי

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

Google Cloud Shell

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

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

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

  • לוחצים על Activate Cloud Shell כדי להפעיל את Cloud Shell ממסוף Cloud :

cb81e7c8e34bc8d.png

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

bfde7b083abc9544.png

זה ייקח רק כמה שניות כדי להקצות את הסביבה :

cbb597d2be277a14.png

אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות :

gcloud auth list

פלט הפקודה

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

הפרויקט כבר אמור להיות מוגדר כ-PROJECT_ID שלכם (בהנחה שבחרתם פרויקט במסוף האינטרנט) :

gcloud config list project

פלט הפקודה

[core]
project = <PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

רוצה למצוא את ה-PROJECT_ID שלך? בתפריט הנפתח שבחלק העליון של מסוף Cloud תוכלו לקרוא :

2c7a57249d954735.png

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

791f101797cfef39.png

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

echo $GOOGLE_CLOUD_PROJECT

פלט הפקודה

<PROJECT_ID>
  • לבסוף, אפשר להגדיר את אזור ברירת המחדל :
gcloud config set compute/zone us-central1-f

אתם יכולים לבחור אזורים שונים. מידע נוסף זמין במאמר אזורים ו אזורים.

הפעלת Cloud Run API

ב-Cloud Shell, מפעילים את Cloud Run API :

gcloud services enable run.googleapis.com

כך נוצר מסר מוצלח שדומה להודעה הזו :

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. כתיבת האפליקציה לדוגמה

ניצור אפליקציה פשוטה ב-ASP.NET C# שמגיבה לבקשות HTTP.

כדי ליצור את האפליקציה, משתמשים בכלי שורת הפקודה dotnet ב-Cloud Shell:

dotnet new web -o helloworld-csharp

שינוי לספרייה helloworld-csharp:

cd helloworld-csharp

לאחר מכן, מעדכנים את Program.cs כך שיתאים לדברים הבאים:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

הקוד הזה יוצר שרת אינטרנט בסיסי שמאזינים ליציאה שהוגדרה על ידי משתנה הסביבה PORT ומגיב עם הערך Hello World.

כדי לבדוק את האפליקציה, אפשר להריץ אותה באופן מקומי ב-Cloud Shell. הוא אמור להופיע ביציאה 8080:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. פריסה ב-Cloud Run

פורסים את האפליקציה ב-Cloud Run באמצעות הפקודה הבאה:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world הוא שם השירות.
  • הדגל allow-unauthenticated פורס את השירות כשירות זמין לציבור ללא דרישות אימות.
  • us-central1 הוא האזור שבו האפליקציה תפרוס.
  • הדגל source קובע את המיקום של המקור שמיועד ל-build. Cloud Run משתמש ב-buildpacks כדי ליצור קונטיינר באופן אוטומטי מקוד המקור.

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

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

עכשיו אפשר להיכנס למאגר התגים שנפרס על ידי פתיחת כתובת ה-URL של השירות בדפדפן אינטרנט :

85e7fbbd264444c9.png

מעולה! פרסתם עכשיו אפליקציה ארוזה בקובץ אימג' של קונטיינר ל-Cloud Run. Cloud Run מגדיל את קובץ האימג' של הקונטיינר באופן אוטומטי ואופקי כדי לטפל בבקשות שהתקבלו, ואז מקטין את הפוטנציאל כשהביקוש יורד. התשלום הוא רק על המעבד (CPU), הזיכרון והרשת שנצרכו במהלך הטיפול בבקשה.

5. הגיע הזמן לפנות מקום

אתם יכולים למחוק את הפרויקט ב-GCP כדי להימנע מצבירת חיובים שיגרמו להפסקת החיוב של כל המשאבים באותו פרויקט, או פשוט למחוק את שירות Cloud Run:

gcloud run services delete helloworld

6. מה השלב הבא?

מומלץ להיעזר בפריסה ל-Cloud Run ב-GKE.

למידע נוסף על פיתוח קונטיינר HTTP ללא שמירת מצב שמתאים ל-Cloud Run ממקור הקוד ולדחוף אותו ל-Container Registry, ראו: