שלום Cloud Run עם C#

1. מבוא

89eb4723767d4525.png

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

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

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

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

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

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

295004821bab6a87.png37d264871000675d.png96d86d3d5655cdbe.png

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

Google Cloud Shell

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

‫Cloud Shell היא סביבת פיתוח ותפעול אונליין שאפשר לגשת אליה מכל מקום באמצעות הדפדפן. אתם יכולים לנהל את המשאבים שלכם באמצעות מסוף אונליין שנטענו בו מראש כלי עזר כמו כלי שורת הפקודה של Google Cloud‏ (gcloud),‏ kubectl ועוד. אפשר גם לפתח, לבנות, לנפות באגים ולפרוס את האפליקציות מבוססות הענן באמצעות Cloud Shell Editor אונליין.

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

  • כדי להפעיל את Cloud Shell מ-Cloud Console, פשוט לוחצים על Activate Cloud Shell (הפעלת Cloud Shell):

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 Console :

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 קובע את המיקום של המקור לבנייה. ‫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 מבצע התאמה אוטומטית לעומס (autoscaling) של קובץ אימג' של קונטיינר באופן אופקי כדי לטפל בבקשות שהתקבלו, ואז מצמצם את ההקצאה כשהביקוש יורד. משלמים רק על ה-CPU, הזיכרון והרשת שנדרשים במהלך הטיפול בבקשות.

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

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

gcloud run services delete helloworld

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

השלב הבא המומלץ הוא פריסה ב-Cloud Run ב-GKE.

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