במדריך הזה מוסבר איך להעביר אפליקציות אינטרנט של Node.js שפועלות ב-Heroku ל-Cloud Run ב- Cloud de Confiance by S3NS. המדריך הזה מיועד לאדריכלי מערכות ולבעלי מוצרים שרוצים להעביר את האפליקציות שלהם מ-Heroku לשירותים מנוהלים ב- Cloud de Confiance.
Cloud Run היא פלטפורמת מחשוב מנוהלת שמאפשרת להריץ קונטיינרים ללא שמירת מצב (stateless) שאפשר להפעיל באמצעות בקשות HTTP. הוא מבוסס על Knative בקוד פתוח, שמאפשר ניידות בין פלטפורמות ותומך בתהליכי עבודה של קונטיינרים ובתקנים לפיתוח רציף (continuous delivery). פלטפורמת Cloud Run משולבת היטב בחבילת המוצרים של Cloud de Confiance , ומאפשרת לכם לתכנן ולפתח בקלות אפליקציות ניידות, ניתנות להתאמה וגמישות.
במדריך הזה נסביר איך להעביר ל- Cloud de Confiance אפליקציה שכתובה ב-Node.js ומשתמשת ב-Heroku Postgres כשירות תומך ב-Heroku. אפליקציית האינטרנט מנוהלת בקונטיינר ומארחת ב-Cloud Run, ומשתמשת ב-Cloud SQL ל-PostgreSQL כשכבת ההתמדה שלה.
במדריך הזה תשתמשו באפליקציה פשוטה בשם Tasks, שמאפשרת לראות וליצור משימות. המשימות האלה מאוחסנות ב-Heroku Postgres בפריסה הנוכחית של האפליקציה ב-Heroku.
במדריך הזה אנחנו מניחים שאתם מכירים את הפונקציונליות הבסיסית של Heroku, ושיש לכם חשבון Heroku (או גישה לחשבון כזה). בנוסף, אתם צריכים להכיר את Cloud Run, Cloud SQL, Docker ו-Node.js.
מטרות
- יוצרים קובץ אימג' של Docker כדי לפרוס את האפליקציה ב-Cloud Run.
- יוצרים מכונה של Cloud SQL ל-PostgreSQL שתשמש כ-backend אחרי ההעברה אל Cloud de Confiance.
- בודקים את קוד Node.js כדי להבין איך Cloud Run מתחבר ל-Cloud SQL, ולראות את השינויים בקוד (אם יש כאלה) שנדרשים כדי לעבור ל-Cloud Run מ-Heroku.
- העברת נתונים מ-Heroku Postgres ל-Cloud SQL ל-PostgreSQL.
- פורסים את האפליקציה ב-Cloud Run.
- בודקים את האפליקציה שנפרסה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום:
יכול להיות שתחויבו גם על המשאבים שבהם אתם משתמשים ב-Heroku.
לפני שמתחילים
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the Cloud SQL, Cloud Build, Cloud Run, Container Registry, Service Networking, Serverless VPC Access APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Make sure that you have the following role or roles on the project: Cloud Run > Cloud Run Admin, Cloud Storage > Storage Admin, Cloud SQL > Cloud SQL Admin, Compute Engine > Compute Network Admin, Resource Manager > Project IAM Admin, Cloud Build > Cloud Build Editor, Serverless VPC Access > Serverless VPC Access Admin, Logging > Logs Viewer, Service Accounts > Service Account Admin, Service Accounts > Service Account User, and Service Usage > Service Usage Consumer
Check for the roles
-
In the Cloud de Confiance console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Cloud de Confiance console, go to the IAM page.
Go to IAM - Select the project.
- Click Grant access.
-
In the New principals field, enter your user identifier. This is typically the identifier for a user in a workforce identity pool. For details, see Represent workforce pool users in IAM policies, or contact your administrator.
- Click Select a role, then search for the role.
- To grant additional roles, click Add another role and add each additional role.
- Click Save.
-
מגדירים את הסביבה
פותחים את Cloud Shell.
ב-Cloud Shell, מגדירים משתני סביבה וערכי ברירת מחדל ל-Google Cloud CLI שמשמש במדריך הזה.
gcloud config set project PROJECT_ID gcloud config set run/region us-central1
מחליפים את
PROJECT_IDבמזהה הפרויקט.
ארכיטקטורה
התרשימים הבאים מתארים את הארכיטקטורה של אפליקציית האינטרנט ב-Heroku (כפי שהיא) ואת הפריסה הארכיטקטונית שלה ב- Cloud de Confiance (שאותה תבנו).
אפליקציית Tasks שפרוסה כרגע ב-Heroku מורכבת מ-dyno אחד או יותר לאינטרנט. בניגוד ל-dynos של עובדים, שמתאימים יותר למשימות ברקע ולמשימות מתוזמנות, dynos של אינטרנט יכולים לקבל תנועת HTTP ולהגיב לה. האפליקציה מציגה דף אינדקס שבו מוצגות משימות שמאוחסנות במסד נתונים של Postgres, באמצעות ספריית התבניות Mustache ל-Node.js.
אפשר לגשת לאפליקציה בכתובת URL מסוג HTTPS. נתיב /tasks בכתובת ה-URL הזו מאפשר ליצור משימות חדשות.
ב- Cloud de Confiance, Cloud Run משמש כפלטפורמה ללא שרת (serverless) לפריסת אפליקציית Tasks. Cloud Run מיועד להרצת קונטיינרים ללא שמירת מצב (stateless) שמופעלים על ידי בקשות. הוא מתאים במיוחד כשאתם צריכים שהשירות המנוהל יתמוך באפליקציות בקונטיינרים עם התאמה אוטומטית לעומס, וגם עם צמצום הפעולה לאפס כשהן לא מטפלות בתנועה.
מיפוי רכיבים שמשמשים ב-Heroku אל Cloud de Confiance
בטבלה הבאה מופיע מיפוי של רכיבים בפלטפורמת Heroku ל- Cloud de Confiance. המיפוי הזה עוזר לתרגם את הארכיטקטורה שמתוארת במדריך הזה מ-Heroku ל- Cloud de Confiance.
| רכיב | פלטפורמת Heroku | Cloud de Confiance |
|---|---|---|
| קונטיינרים | Dynos: Heroku משתמשת במודל הקונטיינר כדי ליצור אפליקציות Heroku ולהתאים אותן לעומס. קונטיינרים של Linux נקראים dynos, ואפשר לשנות את הגודל שלהם למספר שאתם מציינים כדי לתמוך בדרישות המשאבים של האפליקציה ב-Heroku. אתם יכולים לבחור מתוך מגוון סוגי dyno על סמך דרישות הזיכרון וה-CPU של האפליקציה. | קונטיינרים של Cloud Run: Cloud de Confiance תומך בהרצת עומסי עבודה בקונטיינרים ללא שמירת מצב, שאפשר להריץ בסביבה מנוהלת או באשכולות של Google Kubernetes Engine (GKE). |
| אפליקציית אינטרנט | אפליקציית Heroku: Dynos הם אבני הבניין של אפליקציות Heroku. אפליקציות בדרך כלל מורכבות מסוג אחד או יותר של dyno, בדרך כלל שילוב של dyno לאינטרנט ו-dyno לעובדים. | שירות Cloud Run: אפשר ליצור מודל של אפליקציית אינטרנט כשירות Cloud Run. לכל שירות יש נקודת קצה (endpoint) משלו ב-HTTPS, והוא יכול להגדיל או להקטין את קנה המידה באופן אוטומטי מ-0 עד N, בהתאם לתנועה בנקודת הקצה של השירות. |
| מסד נתונים | Heroku Postgres הוא מסד נתונים כשירות (DaaS) של Heroku שמבוסס על PostgreSQL. | Cloud SQL הוא שירות מנוהל של מסדי נתונים רלציוניים ב- Cloud de Confiance. |
פריסת אפליקציית האינטרנט לדוגמה של Tasks ב-Heroku
בקטעים הבאים מוסבר איך להגדיר את ממשק שורת הפקודה (CLI) ל-Heroku, לשכפל את מאגר המקור של GitHub ולפרוס את האפליקציה ב-Heroku.
הגדרת ממשק שורת הפקודה (CLI) ל-Heroku
במדריך הזה מריצים את ה-CLI של Heroku ב-Cloud Shell, וצריך לבצע אימות באמצעות מפתח API של Heroku. כשמריצים את Heroku CLI ב-Cloud Shell, אי אפשר לאמת באמצעות סיסמה או אימות מבוסס-אינטרנט.
לחלופין, אם אתם מריצים את הדוגמה בטרמינל מקומי, אתם יכולים להשתמש בכל שיטת אימות של Heroku CLI. אם אתם מריצים את המדריך בטרמינל מקומי, אתם צריכים להתקין גם את Google Cloud CLI, את git ואת Docker.
נכנסים למסוף האינטרנט של Heroku, ומעתיקים את הערך של מפתח ה-API מדף הגדרות החשבון.
ב-Cloud Shell, מתקינים את Heroku CLI.
ב-Cloud Shell, מאמתים את ה-CLI של Heroku. כשתתבקשו להזין סיסמה, הזינו את הערך של מפתח ה-API שהעתקתם ממסוף Heroku, ולא את הסיסמה שאתם משתמשים בה כדי להיכנס למסוף.
heroku login --interactive
שכפול מאגר המקור
ב-Cloud Shell, משכפלים את המאגר של אפליקציית Tasks לדוגמה ב-GitHub:
git clone https://github.com/GoogleCloudPlatform/migrate-webapp-heroku-to-cloudrun-node.git
משנים את הספריות לספרייה שנוצרה על ידי שכפול המאגר:
cd migrate-webapp-heroku-to-cloudrun-node
הספרייה מכילה את הקבצים הבאים:
- סקריפט Node.js שנקרא
index.jsעם הקוד של הנתיבים שמוצגים באפליקציית האינטרנט. - קובצי
package.jsonו-package-lock.jsonשמפרטים את יחסי התלות של אפליקציית האינטרנט. כדי שהאפליקציה תפעל, צריך להתקין את יחסי התלות האלה. - קובץ
Procfileשמציין את הפקודה שהאפליקציה מריצה בזמן ההפעלה. יוצרים קובץProcfileכדי לפרוס את האפליקציה ב-Heroku. - ספרייה בשם
views, עם תוכן ה-HTML שמוצג על ידי אפליקציית האינטרנט בנתיב "/". - קובץ
.gitignore.
- סקריפט Node.js שנקרא
פריסת אפליקציה ב-Heroku
יוצרים אפליקציית Heroku ב-Cloud Shell:
heroku create
שימו לב לשם שנוצר לאפליקציה. תצטרכו את הערך הזה בשלב הבא.
יוצרים משתנה סביבה לשם האפליקציה ב-Heroku:
export APP_NAME=APP_NAME
מחליפים את
APP_NAMEבשם האפליקציה שהתקבל מהפקודהheroku create.מוסיפים את התוסף Heroku Postgres כדי להקצות מסד נתונים של PostgreSQL:
heroku addons:create heroku-postgresql:mini
מוודאים שהתוסף נוסף בהצלחה:
heroku addons
אם התוסף של Postgres נוסף בהצלחה, תופיע הודעה דומה לזו:
Add-on Plan Price State ----------------- ----- -------- ----- heroku-postgresql mini 5$/month created
פורסים את האפליקציה ב-Heroku:
git push heroku master
מריצים את הפקודה הבאה כדי לאשר את הערך של DATABASE_URL.
heroku config
שימו לב לערך שאוחזר עבור DATABASE_URL. תצטרכו את הערך הזה בשלב הבא.
להריץ קונטיינר של Docker.
docker run -it --rm postgres psql "DATABASE_URL"
מחליפים את
DATABASE_URLבכתובת ה-URL של Heroku Postgres שציינתם בשלב הקודם.בקונטיינר של Docker, יוצרים את הטבלה
TASKSבאמצעות הפקודה הבאה:CREATE TABLE TASKS (DESCRIPTION TEXT NOT NULL);
יוצאים מהמאגר:
exitב-Cloud Shell, מריצים את הפקודה הבאה כדי לקבל את כתובת ה-URL של האפליקציה ב-Heroku:
heroku info
פותחים את כתובת ה-URL בחלון דפדפן. האפליקציה נראית כמו בצילום המסך הבא (אבל בגרסה שלכם לא יופיעו המשימות שמופיעות כאן):
יוצרים משימות לדוגמה באפליקציה מהדפדפן. מוודאים שהמשימות מאוחזרות ממסד הנתונים ומוצגות בממשק המשתמש.
הכנת הקוד של אפליקציית האינטרנט להעברה ל-Cloud Run
בקטע הזה מפורטים השלבים שצריך לבצע כדי להכין את אפליקציית האינטרנט לפריסה ב-Cloud Run.
יצירה ופרסום של קונטיינר Docker ב-Container Registry
כדי ליצור את הקונטיינר של האפליקציה ולהריץ אותו ב-Cloud Run, צריך קובץ אימג' של Docker. אתם יכולים ליצור את הקונטיינר באופן ידני או באמצעות Buildpacks.
יצירת מאגר תגים באופן ידני
ב-Cloud Shell, יוצרים קובץ Docker בספרייה שנוצרה על ידי שכפול המאגר של המדריך הזה:
cat <<"EOF" > Dockerfile # Use the official Node image. # https://hub.docker.com/_/node FROM node:10-alpine # Create and change to the app directory. WORKDIR /app # Copying this separately prevents re-running npm install on every code change. COPY package*.json ./ RUN npm install # Copy local code to the container image. COPY . /app # Configure and document the service HTTP port. ENV PORT 8080 EXPOSE $PORT # Run the web service on container startup. CMD ["npm", "start"] EOF
יוצרים את הקונטיינר באמצעות Cloud Build ומפרסמים את קובץ האימג' ב-Container Registry:
gcloud builds submit --tag gcr.io/PROJECT_ID/APP_NAME:1 \ --gcs-log-dir=gs://PROJECT_ID_cloudbuild
יוצרים משתנה סביבה שיכיל את השם של קובץ האימג' של Docker שיצרתם:
export IMAGE_NAME="gcr.io/PROJECT_ID/APP_NAME:1"
יצירת קונטיינר באמצעות Buildpacks
ב-Cloud Shell, מתקינים את ה-CLI של pack.
מגדירים את ה-CLI של pack כך שישתמש ב-Heroku builder כברירת מחדל:
pack config default-builder heroku/buildpacks:22
יוצרים משתנה סביבה שיכיל את השם של קובץ האימג' של Docker:
export IMAGE_NAME=gcr.io/PROJECT_ID/APP_NAME:1
יוצרים את קובץ האימג' באמצעות הפקודה
packומעבירים אותו בדחיפה או מפרסמים אותו ב-Container Registry:pack build --publish $IMAGE_NAME
יצירת מכונה של Cloud SQL ל-PostgreSQL
אתם יוצרים מכונה של Cloud SQL ל-PostgreSQL שתשמש כקצה העורפי של אפליקציית האינטרנט. במדריך הזה, PostgreSQL מתאים במיוחד לאפליקציה לדוגמה שנפרסה ב-Heroku, שמשתמשת במסד נתונים של Postgres כקצה העורפי שלה. באפליקציה הזו, כדי להעביר את הנתונים משירות מנוהל של Postgres ל-Cloud SQL ל-PostgreSQL לא צריך לשנות את הסכימה.
הכנת הרשת ל-Cloud SQL עם כתובת IP פרטית.
gcloud compute addresses create google-managed-services-default \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --description="peering range for CloudSQL Private Service Access" \ --network=default gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=google-managed-services-default \ --network=default \ --project=PROJECT_ID
יוצרים משתנה סביבה בשם
CLOUDSQL_DB_NAMEשיכיל את השם של המכונה של מסד הנתונים שתיצרו בשלב הבא:export CLOUDSQL_DB_NAME=tasks-db
יוצרים את מסד הנתונים:
gcloud sql instances create $CLOUDSQL_DB_NAME \ --cpu=1 \ --memory=4352Mib \ --database-version=POSTGRES_15 \ --region=us-central1 \ --network default \ --no-assign-ip
יכול להיות שיעברו כמה דקות עד שהמכונה תופעל.
מגדירים סיסמה למשתמש Postgres:
gcloud sql users set-password postgres \ --instance=$CLOUDSQL_DB_NAME \ --password=POSTGRES_PASSWORDמחליפים את
POSTGRES_PASSWORDבסיסמה שבה רוצים להשתמש למסד הנתונים של Postgres.
ייבוא נתונים ל-Cloud SQL מ-Heroku Postgres
יש כמה דפוסי העברה שאפשר להשתמש בהם כדי להעביר נתונים ל-Cloud SQL. בדרך כלל, הגישה הטובה ביותר שדורשת זמן השבתה מינימלי או לא דורשת זמן השבתה בכלל היא להגדיר את Cloud SQL כרפליקה של מסד הנתונים שמועבר, ולהפוך את Cloud SQL למכונה הראשית אחרי ההעברה. Heroku Postgres לא תומך ברפליקות חיצוניות (followers), לכן במדריך הזה תשתמשו בכלים בקוד פתוח כדי להעביר את הסכימה של האפליקציה.
באפליקציית Tasks שבמדריך הזה, משתמשים בכלי pg_dump כדי לייצא נתונים מ-Heroku Postgres לקטגוריה של Cloud Storage, ואז לייבא אותם ל-Cloud SQL. הכלי הזה יכול להעביר נתונים בין גרסאות הומוגניות, או כשגרסת מסד הנתונים של היעד חדשה יותר מגרסת מסד הנתונים של המקור.
ב-Cloud Shell, מקבלים את פרטי הכניסה למסד הנתונים של Heroku Postgres שמצורף לאפליקציה לדוגמה. פרטי הכניסה האלה נדרשים בשלב הבא.
heroku pg:credentials:url
הפקודה הזו מחזירה את מחרוזת פרטי החיבור ואת כתובת ה-URL לחיבור של האפליקציה. הפורמט של מחרוזת פרטי החיבור הוא:
"dbname=DATABASE_NAME host=FQDN port=5432 user=USER_NAME password=PASSWORD_STRING sslmode=require"
תצטרכו את הערכים שמוצגים במחרוזת החיבור בשלב הבא.
במאמרי העזרה של Heroku מופיעה דוגמה לערך FQDN (שם דומיין שמוגדר במלואו) במחרוזת של פרטי החיבור.
מגדירים משתני סביבה שיכילו את הערכים של Heroku שבהם תשתמשו בשלבים הבאים:
export HEROKU_PG_DBNAME=DATABASE_NAME export HEROKU_PG_HOST=FQDN export HEROKU_PG_USER=USER_NAME export HEROKU_PG_PASSWORD=PASSWORD_STRING
מחליפים את מה שכתוב בשדות הבאים:
-
DATABASE_NAME: שם מסד הנתונים שמוצג במחרוזת המידע. -
FQDN: ה-FQDN שמוצג במחרוזת המידע. -
USER_NAME: שם המשתמש שמוצג במחרוזת המידע. PASSWORD_STRING: מחרוזת הסיסמה שמוצגת במחרוזת המידע.
-
יוצרים גיבוי בפורמט SQL של מסד הנתונים ב-Heroku Postgres:
docker run \ -it --rm \ -e PGPASSWORD=$HEROKU_PG_PASSWORD \ -v $(pwd):/tmp \ --entrypoint "pg_dump" \ postgres \ -Fp \ --no-acl \ --no-owner \ -h $HEROKU_PG_HOST \ -U $HEROKU_PG_USER \ $HEROKU_PG_DBNAME > herokudump.sql
יוצרים משתנה סביבה שיכיל את השם של הקטגוריה של Cloud Storage:
export PG_BACKUP_BUCKET=gs://PROJECT_ID-pg-backup-bucket
יוצרים קטגוריה של Cloud Storage:
gcloud storage buckets create $PG_BACKUP_BUCKET \ --location=us-central1 \ --public-access-prevention \ --uniform-bucket-level-access
מעלים את קובץ ה-SQL לקטגוריה הזו:
gcloud storage cp herokudump.sql $PG_BACKUP_BUCKET/herokudump.sql
נותנים למכונה של Cloud SQL את התפקידים שנדרשים כדי לייבא את קובץ ה-SQL מהקטגוריה של Cloud Storage:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='get("serviceAccountEmailAddress")') \ --role=roles/storage.objectAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='get("serviceAccountEmailAddress")') \ --role=roles/cloudsql.editorמייבאים את קובץ ה-SQL למכונה של Cloud SQL:
gcloud sql import sql $CLOUDSQL_DB_NAME $PG_BACKUP_BUCKET/herokudump.sql \ --database=postgres \ --user=postgres
כשמופיעה ההודעה
do you want to continue (y/n), מזינים "y".
איך Cloud Run ניגש למסד הנתונים של Cloud SQL
כמו שאפליקציית האינטרנט שנפרסה ב-Heroku צריכה להתחבר למכונה המנוהלת של Heroku Postgres, כך גם Cloud Run צריך גישה ל-Cloud SQL כדי לקרוא ולכתוב נתונים.
התקשורת בין Cloud Run ל-Cloud SQL מתבצעת באמצעות שרת ה-proxy ל-Cloud SQL, שמופעל ומוגדר באופן אוטומטי כשפורסים את הקונטיינר ב-Cloud Run. אין צורך לאשר כתובות IP חיצוניות למסד הנתונים, כי כל התקשורת שהוא מקבל מגיעה מה-proxy באמצעות TCP מאובטח.
הקוד צריך להפעיל פעולות במסד הנתונים (כמו אחזור נתונים ממסד הנתונים או כתיבה אליו) על ידי הפעלת שרת ה-proxy דרך שקע UNIX.
מכיוון שאפליקציית האינטרנט הזו כתובה ב-Node.js, משתמשים בספרייה pg-connection-string כדי לנתח כתובת URL של מסד נתונים וליצור אובייקט config. היתרון של הגישה הזו הוא שהיא מאפשרת להתחבר למסד הנתונים של הקצה העורפי בצורה חלקה ב-Heroku וב-Cloud Run.
בשלב הבא, מעבירים את כתובת ה-URL של מסד הנתונים כמשתנה סביבה כשפורסים את אפליקציית האינטרנט.
פריסת האפליקציה לדוגמה ב-Cloud Run
ב-Cloud Shell, מגדירים גישה ל-VPC ללא שרת (serverless) כדי לאפשר תעבורת נתונים פרטית מ-Cloud Run ל-Cloud SQL:
gcloud compute networks subnets create serverless-connector-subnet \ --network=default \ --range=10.0.0.0/28 \ --region=us-central1 gcloud compute networks vpc-access connectors create serverless-connector \ --region=us-central1 \ --subnet=serverless-connector-subnet
ב-Cloud Shell, יוצרים משתנה סביבה שמכיל את שם החיבור של המכונה שיצרתם ב-Cloud SQL:
export DB_CONN_NAME=$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='value(connectionName)')
יוצרים משתנה סביבה בשם
DATABASE_URLשיכיל את מחרוזת החיבור ל-Cloud SQL Proxy דרך יציאת UNIX.export DATABASE_URL="socket:/cloudsql/${DB_CONN_NAME}?db=postgres&user=postgres&password=POSTGRES_PASSWORD"יוצרים חשבון שירות ל-Cloud Run עם תפקיד IAM כדי להתחבר למסד הנתונים:
gcloud iam service-accounts create sa-run-db-client gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:sa-run-db-client@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role=roles/cloudsql.clientפורסים את אפליקציית האינטרנט ב-Cloud Run:
gcloud run deploy tasksapp-PROJECT_ID \ --image=$IMAGE_NAME \ --service-account=sa-run-db-client@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --set-env-vars=DATABASE_URL=$DATABASE_URL \ --add-cloudsql-instances $DB_CONN_NAME \ --vpc-connector serverless-connector \ --allow-unauthenticatedהפקודה הקודמת גם מקשרת את הקונטיינר של Cloud Run למכונה של מסד הנתונים ב-Cloud SQL שיצרתם. הפקודה מגדירה משתנה סביבה ל-Cloud Run כך שיצביע על המחרוזת
DATABASE_URLשיצרתם בשלב הקודם.
בדיקת האפליקציה
ב-Cloud Shell, מאתרים את כתובת ה-URL שבה Cloud Run משרת את התנועה:
gcloud run services list
אפשר גם לבדוק את שירות Cloud Run במסוףCloud de Confiance .
כדי לוודא שאפליקציית האינטרנט מקבלת בקשות HTTP, עוברים לכתובת ה-URL של שירות Cloud Run.
אם נשלחת בקשת HTTP לנקודת הקצה להצגה ואין קונטיינר שפועל, Cloud Run יוצר קונטיינר חדש או מפעיל אותו. המשמעות היא שהבקשה שגורמת להפעלת מאגר חדש עשויה להימשך קצת יותר זמן. בזמן הנוסף הזה, קחו בחשבון את מספר הבקשות המקבילות שהאפליקציה יכולה לתמוך בהן, ואת דרישות הזיכרון הספציפיות שלה.
באפליקציה הזו משתמשים בהגדרות ברירת המחדל של בו-זמניות, שמאפשרות לשירות Cloud Run לטפל ב-80 בקשות בו-זמנית ממארז אחד.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Cloud de Confiance בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה. יכול להיות שתרצו גם למחוק את המשאבים שיצרתם ב-Heroku בשביל המדריך הזה.
מחיקת הפרויקט Cloud de Confiance
- נכנסים לדף Manage resources במסוף Cloud de Confiance .
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
מחיקת האפליקציה ב-Heroku
כדי למחוק את האפליקציה לדוגמה שפרסתם ב-Heroku ואת התוסף המשויך של PostgreSQL, מריצים את הפקודה הבאה:
heroku apps:destroy -a APP_NAME