1. מבוא
העדכון האחרון: 2021-05-06
מידע על החיבור
יש הרבה סוגים של אפליקציות ומסגרות. ב-codelab הזה נסביר איך להתחבר ל-Cloud SQL מאפליקציה שמופעלת במכונה וירטואלית מנוהלת ב-Google Compute Engine באמצעות כתובת IP פרטית פנימית, באמצעות Cloud SQL Proxy. זוהי דרך מאובטחת במיוחד להריץ אפליקציה עם שמירת מצב בענן. אתם מצמצמים את החשיפה שלכם לאינטרנט על ידי הגבלה לשימוש רק בכתובת IP פרטית, ושימוש ב-SQL Proxy שמטפל בקישוריות SSL בשבילכם.
תרחיש נפוץ לשימוש בתכונה הזו הוא למשל אפליקציה מקומית שהועברה להפעלה בענן במקום באופן מקומי.
מה תפַתחו
ה-codelab הזה הוא מינימליסטי מאוד. המטרה היא להסביר לכם את כל הפרטים על החיבור, בלי להתעמק יותר מדי באפליקציה עצמה. במצב אידיאלי, החיבור ל-Cloud SQL דומה לחיבור לכל מופע אחר של מסד נתונים מסוג SQL, כך שאפשר לקחת את מה שיוצרים ב-codelab הזה ולהחיל אותו על כל אפליקציה לייצור.
ההוראות יכללו גם הסבר מפורט על ביצוע פעולות במסוף GCP, וגם את הפקודות המקבילות של gcloud לשימוש ב-CLI או באוטומציה.
אלה השלבים:
- יצירת חשבון שירות מינימלי כדי לאפשר חיבור למכונת Cloud SQL
- יצירת מכונה וירטואלית ב-Google Compute Engine (GCE)
- יצירת מכונה של Cloud SQL (במדריך הזה נעשה שימוש ב-Postgres, אבל התהליך דומה ל-MySQL או ל-SQL Server)
- הורדה והפעלה של Cloud SQL Proxy במכונת GCE
מה תצטרכו
- חשבון GCP שיש לכם הרשאות להפעלת ממשקי API וליצירת שירותים בו
2. יצירה של חשבון שירות
חשבונות שירות משמשים למתן הרשאות לשימוש בשירותים שונים בפרויקט GCP. ב-codelab הזה אנחנו צריכים אחת כדי להעניק ל-Cloud SQL Proxy הרשאה להתחבר למופע Cloud SQL שלנו.
במסוף
עוברים אל הדף של חשבונות השירות ב-IAM ולוחצים על הלחצן
בראש הדף.
נותנים לחשבון השירות שם ומזהה ייחודיים ולוחצים על CREATE (יצירה).
בדף הבא, לוחצים על התפריט הנפתח 'בחירת תפקיד'. מסננים לפי Cloud SQL ובוחרים בתפקיד Cloud SQL Client. לוחצים על 'המשך'.
לוחצים על 'סיום'.
שימוש ב-gcloud
יוצרים את חשבון השירות:
gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"
פעולה זו יוצרת את חשבון השירות, אבל כרגע לא מוקצים לו תפקידים או הרשאות. כדי להקצות את התפקיד המתאים, מריצים את הפקודה:
gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client
לדוגמה, אם חשבון השירות נקרא sa-test כשיוצרים אותו, והפרויקט הוא my-project-test, הפקודה תהיה:
gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com
3. יצירת מכונה וירטואלית ב-Compute Engine
Google Compute Engine הוא השירות המנוהל שבו תפעל המכונה הווירטואלית שתכיל את האפליקציה שממנה אנחנו רוצים להתחבר. ב-Codelab הזה אנחנו לא בונים אפליקציה, אבל נאשר את הקישוריות על ידי הרצת psql.
במסוף
עוברים לדף Google Compute Engine ולוחצים על הלחצן
.
יש כאן הרבה אפשרויות, אבל אתם צריכים רק:
- נותנים שם למופע
- שינוי הערך
Machine typeל-f1-micro - בקטע Identity and API access (זהות וגישת API), משנים את התפריט הנפתח של
Service accountמ-Default compute service accountלזה שיצרתם בשלב הקודם. - לוחצים על 'יצירה' בתחתית הדף.
שימוש ב-gcloud
חשבון השירות הוא השם המלא של חשבון השירות שיצרתם קודם, ולכן הוא יהיה בפורמט: <NAME>@<PROJECT>.iam.gserviceaccount.com.
gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list
4. יצירת מכונה של Cloud SQL
Cloud SQL הוא שירות מסדי נתונים רלציוניים מנוהל. הוא תומך ב-MySQL, PostgreSQL ושרת SQL. ב-codelab הזה ניצור מסד נתונים של Postgres, אבל ההוראות דומות לכל שלושת מסדי הנתונים.
במסוף
עוברים לדף Cloud SQL ולוחצים על הלחצן
.
כמו שציינתי, רוב התוכן של ה-codelab הזה רלוונטי לכל סוג של SQL, אבל לצורך ה-codelab הזה, צריך לבחור ב-PostgreSQL.
- הקצאת מזהה למכונה
- מזינים סיסמה למשתמש שמוגדר כברירת מחדל (שם המשתמש יהיה ברירת המחדל של מסד הנתונים שנבחר, למשל
rootל-MySQL אוpostgresל-PostgreSQL) - אם שיניתם את האזור של מכונת החישוב, כדאי לשנות גם את האזור כאן כדי שיהיה זהה.
- גוללים למטה ולוחצים על
show configuration options - הרחבת הקטע
Connectivity - מבטלים את הסימון של האפשרות
Public IPומסמנים את תיבת הסימוןPrivate IP. - מוודאים שהאפשרות
defaultמסומנת בתפריט הנפתח שמופיע כשמסמנים את התיבה 'כתובת IP פרטית'. - גוללים למטה ולוחצים על סמל היצירה
בדרך כלל לוקח כמה דקות עד שהמכונה מתחילה לפעול.
שימוש ב-gcloud
מכיוון שאין לנו הנחיות טובות להפעלת ממשקי API מכאן, נצטרך לעשות זאת באופן ידני
gcloud services enable servicenetworking.googleapis.com
בשלב הבא, צריך להפעיל קישוריות לשירותים פרטיים ברשת ה-VPC שמוגדרת כברירת מחדל. השלב הראשון הוא להקצות טווח כתובות IP עם שם לשימוש במכונה שלנו.
gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default
השלב הבא הוא הקצאת טווח כתובות ה-IP הזה לשירותים הפנימיים שלנו (התהליך הזה נמשך כדקה).
gcloud services vpc-peerings update --service=servicenetworking.googleapis.com --network=default --project=<PROJECT ID> --ranges=sql-codelab-allocation --force
בנוסף, כרגע אפשר ליצור את המופע רק בגרסת הבטא. השילוב של --no-assign-ip ו---network=default מאפשר קישוריות של כתובות IP פרטיות. בשלב הזה, אין אפשרות להפעיל גם כתובת IP פרטית וגם כתובת IP ציבורית בו-זמנית, כך שאם אתם צריכים גישה ציבורית, תצטרכו לערוך את המכונה אחרי היצירה שלה. הפעולה הזו תימשך כמה דקות.
gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>
5. הגדרה והפעלה של Cloud SQL Proxy
אחרי שמתחברים למכונת ה-VM, צריך מחרוזת חיבור למופע. קודם נשיג את זה, ואז נתחבר למכונה הווירטואלית עצמה באמצעות SSH. ההוראות לגבי החלקים האלה יופיעו בקטעים הרלוונטיים לגבי Console לעומת gcloud, ואז שאר ההוראות יהיו פקודות שמופעלות מהמעטפת במכונה הווירטואלית בקטע נפרד.
במסוף
עוברים לכאן ולוחצים על השם של מופע Cloud SQL.
גוללים קצת למטה ומעתיקים את Connection name למקום כלשהו לשימוש מאוחר יותר.
נכנסים לדף הרשימה של מופעי Google Compute Engine ומחפשים את השורה עם המכונה הווירטואלית.
בעמודה Connect, לוחצים על הלחצן SSH. ייפתח חלון נפרד שמתחבר בצורה מאובטחת למכונה הווירטואלית.
ההוראות שבהמשך זהות לשני המקרים, לכן אפשר לדלג על הקטע Using gcloud.
שימוש ב-gcloud
מחליפים את <INSTANCE NAME> בשם של מופע Cloud SQL:
gcloud sql instances describe <INSTANCE NAME> | grep connectionName
שומרים את שם החיבור של המופע לשימוש בהמשך.
צריך להחליף את <ZONE> בתחום שבו השתמשתם כשיצרתם את המכונה. אם לא שיניתם את ההגדרה, היא הייתה מוגדרת ל-us-central1-b. מחליפים גם את הערך <INSTANCE_NAME> בכל מה שצוין קודם.
gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>
אחרי שמתחברים ל-VM
קודם כול, צריך להוריד את ה-proxy. תלוי במערכת ההפעלה. אם לא שיניתם את מערכת ההפעלה בתהליך יצירת ה-VM, מערכת ההפעלה תהיה Linux ותוכלו להשתמש בפקודה:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy
אם החלפתם את מערכת ההפעלה, כאן תוכלו למצוא את הפקודה המתאימה להשגת ה-proxy עבור מערכת ההפעלה שלכם.
כדי להריץ את ה-proxy, מעתיקים את שם החיבור של המופע מפרטי המופע של Cloud SQL ומחליפים את <INSTANCE_CONNECTION_NAME>. שימו לב גם שמספר יציאת ה-TCP עשוי להשתנות אם אתם לא משתמשים במסד נתונים של Postgres, או אם שיניתם את יציאת ברירת המחדל שהמסד מאזין לה.
./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &
6. בדיקת החיבור וסיום התהליך
כמו שציינו קודם, אם יש לכם אפליקציה שאתם רוצים להפעיל במופע GCE כדי לבדוק אותה, זה גם בסדר. ב-codelab הזה נתקין את psql ונשתמש בלקוח הזה כדי לוודא שאפשר להתחבר למסד הנתונים שלנו.
בסשן ה-SSH במכונה הווירטואלית:
sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"
לאחר מכן מציינים את הסיסמה של משתמש ברירת המחדל שהגדרתם כשיוצרים את מופע Cloud SQL.
מעולה! אם הכול עבר בצורה חלקה, אמור להופיע הפקודה של Postgres, ותוכלו להריץ פקודות במסד הנתונים.
מה השלב הבא?
כדאי לעיין ב-Codelabs הבאים…