1. מבוא
Cloud Run היא פלטפורמה מנוהלת שמאפשרת להריץ קונטיינרים ללא שמירת מצב, שניתן לבצע באמצעות בקשות HTTP. Cloud Run הוא ללא שרת (serverless): הוא מפשט את כל ניהול התשתית, כך שאתם יכולים להתמקד במה שהכי חשוב – פיתוח אפליקציות מעולות.
היא מבוססת על Knative, ומאפשרת לכם להריץ את הקונטיינרים בניהול מלא באמצעות Cloud Run, או באשכול Google Kubernetes Engine באמצעות Cloud Run ב-GKE.
המטרה של ה-Codelab היא לפתח קובץ אימג' של קונטיינר ולפרוס אותו ב-Cloud Run.
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.
- Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
- Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-
PROJECT_ID
). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט. - לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
- בשלב הבא צריך להפעיל את החיוב במסוף 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 :
אם זו הפעם הראשונה שאתם מפעילים את 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 תוכלו לקרוא :
אפשר גם לבדוק את פרטי הפרויקט באמצעות 'הגדרות ותוכניות שירות' :
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 של השירות בדפדפן אינטרנט :
מעולה! פרסתם עכשיו אפליקציה ארוזה בקובץ אימג' של קונטיינר ל-Cloud Run. Cloud Run מגדיל את קובץ האימג' של הקונטיינר באופן אוטומטי ואופקי כדי לטפל בבקשות שהתקבלו, ואז מקטין את הפוטנציאל כשהביקוש יורד. התשלום הוא רק על המעבד (CPU), הזיכרון והרשת שנצרכו במהלך הטיפול בבקשה.
5. הגיע הזמן לפנות מקום
אתם יכולים למחוק את הפרויקט ב-GCP כדי להימנע מצבירת חיובים שיגרמו להפסקת החיוב של כל המשאבים באותו פרויקט, או פשוט למחוק את שירות Cloud Run:
gcloud run services delete helloworld
6. מה השלב הבא?
מומלץ להיעזר בפריסה ל-Cloud Run ב-GKE.
למידע נוסף על פיתוח קונטיינר HTTP ללא שמירת מצב שמתאים ל-Cloud Run ממקור הקוד ולדחוף אותו ל-Container Registry, ראו: