1. לפני שמתחילים
Cloud Run היא פלטפורמת מחשוב מנוהלת שמאפשרת להריץ קונטיינרים ללא שמירת מצב, שניתן להפעיל באמצעות בקשות HTTP. Cloud Run הוא ללא שרת (serverless), בלי צורך בניהול תשתית, כך שתוכלו להתמקד במה שהכי חשוב – פיתוח אפליקציות מעולות. היא מבוססת על Knative, ומאפשרת לכם להריץ את הקונטיינרים באמצעות Cloud Run (מנוהל במלואו) או עם Cloud Run for Anthos. המטרה של ה-Codelab היא לפתח קובץ אימג' של קונטיינר ולפרוס אותו ב-Cloud Run.
דרישות מוקדמות
לא רלוונטי
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמאי
- נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, תצטרכו ליצור חשבון).
חשוב לזכור את מזהה הפרויקט, שם ייחודי בכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID
.
- בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.
מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.
Cloud Shell
את Google Cloud אפשר להפעיל מרחוק מהמחשב הנייד, אבל משתמשים ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud.
המכונה הווירטואלית הזו שמבוססת על Debian נטענת עם כל הכלים למפתחים שדרושים לכם. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. כלומר, כל מה שדרוש ל-Codelab הזה הוא דפדפן (כן, הוא פועל ב-Chromebook).
- כדי להפעיל את Cloud Shell ממסוף Cloud, לוחצים על Activate Cloud Shell (ההקצאה וההתחברות לסביבה אמורות להימשך כמה דקות).
אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות ושהפרויקט כבר מוגדר ל-PROJECT_ID
שלכם.
gcloud auth list
פלט הפקודה
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
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. כתיבת האפליקציה לדוגמה
נפתח אפליקציית Node.js פשוטה שמבוססת על אקספרס ומגיבה לבקשות HTTP.
כדי לפתח את האפליקציה, משתמשים ב-Cloud Shell כדי ליצור ספרייה חדשה בשם helloworld-nodejs
ולהוסיף אליה את הספרייה.
mkdir helloworld-nodejs cd helloworld-nodejs
יוצרים קובץ package.json
עם התוכן הבא:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
הדבר החשוב ביותר הוא שהקובץ שלמעלה מכיל פקודת סקריפט להתחלה ותלות ב-framework של אפליקציית האינטרנט Express.
לאחר מכן, באותה ספרייה, יוצרים קובץ index.js
ומעתיקים אליו את התוכן הבא:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
הקוד הזה יוצר שרת אינטרנט בסיסי שמאזינים ליציאה שהוגדרה על ידי משתנה הסביבה PORT
. האפליקציה מוכנה עכשיו ליצירת קונטיינרים, לבדיקה ולהעלאה שלה ל-Container Registry.
4. יצירת קונטיינרים של האפליקציה והעלאתה ל-Container Registry
כדי ליצור קונטיינרים של האפליקציה לדוגמה, יוצרים קובץ חדש בשם Dockerfile
באותה ספרייה כמו קובצי המקור ומעתיקים אליה את התוכן הבא:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
עכשיו יוצרים קובץ אימג' בקונטיינר באמצעות Cloud Build על ידי הרצת הפקודה הבאה מהספרייה שמכילה את קובץ ה-Docker:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT
הוא משתנה סביבה שמכיל את מזהה הפרויקט ב-Google Cloud כשמריצים אותו ב-Cloud Shell. אפשר לקבל אותו גם בהרצה של gcloud config get-value project
.
לאחר ההעברה למרשם, תופיע הודעה SUCCESS
שמכילה את שם התמונה (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
). התמונה מאוחסנת ב-Container Registry ואפשר להשתמש בה שוב אם צריך.
כדי להציג את רשימת כל קובצי האימג' של הקונטיינרים שמשויכים לפרויקט הנוכחי, אפשר להשתמש בפקודה הבאה:
gcloud container images list
כדי להריץ ולבדוק את האפליקציה באופן מקומי מ-Cloud Shell, אפשר להפעיל אותה באמצעות הפקודה הרגילה הבאה של docker
:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
ב-Cloud Shell, לוחצים על Web Preview ובוחרים באפשרות Preview on Port 8080.
נפתח חלון דפדפן עם הכיתוב Hello World!
אפשר גם להשתמש ב-curl localhost:8080
.
5. פריסה ב-Cloud Run
פריסת האפליקציה בקונטיינרים ב-Cloud Run מתבצעת באמצעות הפקודה הבאה (חשוב להתאים אותה לשם התמונה הנכון של האפליקציה שיצרתם, או להשתמש בתמונה המובנית מראש gcr.io/cloudrun/hello
):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
אפשרות הפריסה של --allow-unauthenticated
מאפשרת לגשת לאפליקציה ללא אימות. המשמעות של אפשרות הפריסה של --platform managed \
היא שמבקשים את הסביבה המנוהלת במלואה (ולא את תשתית Kubernetes דרך Anthos).
ממתינים כמה דקות עד שהפריסה תושלם. לאחר השלמת התהליך, כתובת ה-URL של השירות תוצג בשורת הפקודה.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
עכשיו אפשר לבקר במאגר התגים שנפרס על ידי פתיחת כתובת ה-URL של השירות בדפדפן אינטרנט:
Cloud Run מגדיל את קובץ האימג' של הקונטיינר באופן אוטומטי ואופקי כדי להתמודד עם הבקשות שהתקבלו, ואז מקטין את הפוטנציאל כשהביקוש יורד. התשלום הוא רק על המעבד (CPU), הזיכרון והרשת שנצרכו במהלך הטיפול בבקשה.
6. הסרת המשאבים
אמנם Cloud Run לא נטען כשהשירות לא בשימוש, אבל ייתכן שעדיין תחויבו על אחסון קובץ האימג' של הקונטיינר שנוצר.
אפשר למחוק את הפרויקט ב-Google Cloud כדי להימנע מחיובים, שיפסיקו את החיוב על כל המשאבים שבהם נעשה שימוש בפרויקט, או פשוט למחוק את קובץ האימג' של helloworld באמצעות הפקודה הבאה:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
כדי למחוק את השירות Cloud Run, משתמשים בפקודה הבאה:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. מזל טוב
מעולה! פרסתם אפליקציה ארוזה בקובץ אימג' של קונטיינר ל-Cloud Run.
מידע נוסף
כדאי לקרוא את המאמר מדריך למתחילים: Deploy to Cloud Run for Anthos ב-Google Cloud.
למידע נוסף על פיתוח קונטיינר HTTP ללא שמירת מצב שמתאים ל-Cloud Run ממקור הקוד ולדחוף אותו ל-Container Registry, עיינו במקורות המידע הבאים:
למידע נוסף על Knative, הפרויקט המקורי בקוד פתוח, ראו Knative