1. מבוא

Cloud Run היא פלטפורמה מנוהלת שמאפשרת להריץ קונטיינרים בלי שמירת מצב שאפשר להפעיל באמצעות בקשות HTTP. Cloud Run הוא שירות בלי שרת (serverless): הוא מסתיר את כל ניהול התשתית, כך שתוכלו להתמקד במה שהכי חשוב – יצירת אפליקציות מעולות.
הוא מבוסס על Knative, ומאפשר לכם לבחור אם להריץ את הקונטיינרים שלכם באופן מנוהל לחלוטין באמצעות Cloud Run, או באשכול Google Kubernetes Engine באמצעות Cloud Run on GKE.
המטרה של ה-Codelab הזה היא שתבנו קובץ אימג' של קונטיינר ותפרסו אותו ב-Cloud Run.
2. הגדרה ודרישות
הגדרת סביבה בקצב אישי
- נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.



- שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. תמיד אפשר לעדכן את המיקום.
- מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל מסומן כ-
PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר לאורך הפרויקט. - לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
- בשלב הבא, תצטרכו להפעיל את החיוב במסוף 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, פשוט לוחצים על הפעלת Cloud Shell :

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

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

אחרי שמתחברים ל-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 :

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

ב-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 של השירות בדפדפן אינטרנט כדי להיכנס למאגר התגים שהוטמע :

מעולה! הרגע פרסתם אפליקציה שנארזה בקובץ אימג' של קונטיינר ב-Cloud Run. Cloud Run מבצע התאמה אוטומטית לעומס (autoscaling) של קובץ אימג' של קונטיינר באופן אופקי כדי לטפל בבקשות שהתקבלו, ואז מצמצם את ההקצאה כשהביקוש יורד. משלמים רק על ה-CPU, הזיכרון והרשת שנעשה בהם שימוש במהלך הטיפול בבקשות.
5. הגיע הזמן לנקות
כדי להימנע מחיובים, אפשר למחוק את הפרויקט ב-GCP, וכך החיוב על כל המשאבים שנעשה בהם שימוש בפרויקט יופסק. אפשרות אחרת היא פשוט למחוק את שירות Cloud Run:
gcloud run services delete helloworld
6. מה השלב הבא?
השלב הבא המומלץ הוא פריסה ב-Cloud Run ב-GKE.
מידע נוסף על יצירת קונטיינר HTTP ללא שמירת מצב שמתאים ל-Cloud Run מקוד מקור והעברתו בדחיפה ל-Container Registry זמין במאמרים הבאים: