התחברות ל-Cloud SQL באמצעות Cloud Functions

1. מבוא

עדכון אחרון:11 במאי 2021

מה זה Cloud SQL?

Cloud SQL הוא שירות מנוהל של מסד נתונים, שבעזרתו אפשר ליצור, לתחזק ולנהל בקלות מסדי נתונים רלציוניים ב-Google Cloud Platform.

מה זה Cloud Functions?

Cloud Functions הוא פתרון מחשוב קל שמאפשר למפתחים ליצור פונקציות עצמאיות שמגיבות לאירועים ב-Cloud בלי צורך לנהל שרת או סביבת זמן ריצה.

מה תפַתחו

ב-Codelab הזה תכתוב פונקציה של Cloud Functions ב-Python. הפונקציה:

  • התחברות למכונה של מסד נתונים ב-Cloud SQL.
  • שולח הצהרת הוספה לטבלה במסד הנתונים.

מה תלמדו

  • איך נכנסים לממשק המשתמש של Cloud Functions במסוף Google Cloud.
  • איך יוצרים פונקציה של Cloud Functions.
  • איך בודקים פונקציה של Cloud Functions.
  • איך מתחברים למכונה של מסד נתונים ב-Cloud SQL (MySQL או PostgreSQL) באמצעות Python.
  • איך לכתוב למסד נתונים של Cloud SQL באמצעות Python.

2. דרישות

  • דפדפן כמו Chrome או Firefox.
  • פרויקט ב-Google Cloud Platform שמכיל את המכונה של Cloud SQL.
  • אם עדיין אין לכם חשבון, תוכלו לפעול לפי השלבים שמפורטים במדריך למתחילים של MySQL או PostgreSQL. מבצעים את כל השלבים מלבד הניקוי.
  • המכונה מכילה מסד נתונים MySQL או PostgreSQL עם טבלה.
  • שם החיבור של המכונה, שמות מסד הנתונים והטבלאות, שם המשתמש במסד הנתונים והסיסמה של המשתמש.
  • חשבון שירות עם התפקיד לקוח Cloud SQL.

3. מכינים את הקוד ויוצרים את הפונקציה

הכנת הקוד

קוד הפונקציה של Cloud Functions להתחברות למסד נתונים של Cloud SQL נמצא כאן. חלק מערכי המשתנים תלויים בשאלה אם מסד הנתונים שלכם ב-Cloud SQL הוא MySQL או PostgreSQL, והם תלויים בפרטי מסד הנתונים שלכם.

ממשק המשתמש של Cloud Functions במסוף Cloud כולל כלי לעריכת טקסט. תוכלו להעתיק, להדביק ולערוך את הקוד שם, או לערוך קודם את הקוד באופן מקומי ואז להעתיק ולהדביק אותו בממשק המשתמש.

requirements.txt

# This file tells Python which modules it needs to import
SQLAlchemy==1.3.12      
# If your database is MySQL, uncomment the following line:
#PyMySQL==0.9.3
# If your database is PostgreSQL, uncomment the following line:
#pg8000==1.13.2

main.py

# This file contains all the code used in the codelab. 
import sqlalchemy

# Depending on which database you are using, you'll set some variables differently. 
# In this code we are inserting only one field with one value. 
# Feel free to change the insert statement as needed for your own table's requirements.

# Uncomment and set the following variables depending on your specific instance and database:
#connection_name = ""
#table_name = ""
#table_field = ""
#table_field_value = ""
#db_name = ""
#db_user = ""
#db_password = ""

# If your database is MySQL, uncomment the following two lines:
#driver_name = 'mysql+pymysql'
#query_string = dict({"unix_socket": "/cloudsql/{}".format(connection_name)})

# If your database is PostgreSQL, uncomment the following two lines:
#driver_name = 'postgres+pg8000'
#query_string =  dict({"unix_sock": "/cloudsql/{}/.s.PGSQL.5432".format(connection_name)})

# If the type of your table_field value is a string, surround it with double quotes.

def insert(request):
    request_json = request.get_json()
    stmt = sqlalchemy.text('insert into {} ({}) values ({})'.format(table_name, table_field, table_field_value))
    
    db = sqlalchemy.create_engine(
      sqlalchemy.engine.url.URL(
        drivername=driver_name,
        username=db_user,
        password=db_password,
        database=db_name,
        query=query_string,
      ),
      pool_size=5,
      max_overflow=2,
      pool_timeout=30,
      pool_recycle=1800
    )
    try:
        with db.connect() as conn:
            conn.execute(stmt)
    except Exception as e:
        return 'Error: {}'.format(str(e))
    return 'ok'

יצירת הפונקציה

  1. בדפדפן, עוברים אל ממשק המשתמש של מסוף Google Cloud Platform.
  2. בתפריט הניווט, בוחרים באפשרות Cloud Functions.
  3. לוחצים על יצירת פונקציה בסרגל הלחצנים.
  4. מזינים שם לפונקציה.
  5. בוחרים את הטריגר HTTP. (שימו לב לכתובת ה-URL שמוצגת מתחת לפריט הטריגר. הקוד יהיה בפורמט הזה: https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME)
  6. בקטע Authentication, בוחרים באפשרות Allow unauthenticated invocations (הפעלת הפעלות לא מאומתות) כדי להגדיר את הפונקציה כציבורית.
  7. מרחיבים את הקטע Runtime, Build and Connections Settings (הגדרות זמן הריצה, build וחיבורים) בחשבון השירות של סביבת זמן הריצה, בוחרים חשבון שירות עם התפקיד לקוח Cloud SQL.
  8. לוחצים על הלחצן הבא.
  9. בוחרים באפשרות Python 3.7 באפשרות סביבת זמן הריצה.
  10. בוחרים באפשרות עורך מוטבע עבור האפשרות קוד מקור.
  11. בחלונות של עורך קוד המקור, מוחקים את התוכן הקיים ב-requirements.txt וב-main.py, ומחליפים אותם בגרסאות הקוד שערכתם למעלה.
  12. מזינים insert בתור השם של נקודת הכניסה.
  13. לוחצים על Deploy (פריסה) וממתינים בזמן יצירת הפונקציה. העיגול מפסיק להסתובב, ובדף שלאחר מכן מופיע סימן וי ירוק כשהפונקציה מוכנה לשימוש.

4. בדיקת הפונקציה

  1. בדפדפן, עוברים אל ממשק המשתמש של מסוף Google Cloud Platform.
  2. בתפריט הניווט, בוחרים באפשרות Cloud Functions.
  3. לוחצים על השם של הפונקציה שיצרתם קודם.
  4. לוחצים על הקישור בדיקה שבאמצע הדף.
  5. בוחרים באפשרות בדיקת הפונקציה.
  6. התוצאה אמורה להופיע: תקין (אם הבדיקה תיכשל, יופיע דוח קריסות שיעזור לכם בניפוי באגים).
  7. בדפדפן, עוברים לכתובת ה-URL ששמרתם קודם, כשיצרתם את הפונקציה. אם שכחתם לשמור את כתובת ה-URL, תוכלו לקבל אותה דרך הקישור TRIGGER.
  8. התוצאה תקין אמורה להופיע גם בדפדפן.

5. הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud עבור המשאבים שבהם השתמשתם ב-Codelab הזה, מבצעים את השלבים הבאים.

מחיקת המכונה של Cloud SQL

  1. נכנסים לדף Cloud SQL Instances במסוף Google Cloud.
  2. בוחרים את המכונה שיצרתם כדי לפתוח את דף פרטי המכונה.
  3. בסרגל הסמלים שבחלק העליון של הדף, לוחצים על מחיקה.
  4. בחלון Delete instance, מקלידים את שם המכונה ולוחצים על Delete כדי למחוק אותה. אחרי שמוחקים מכונה, אי אפשר להשתמש שוב בשם של מכונה במשך 7 ימים בערך.

מחיקת הפונקציה של Cloud Functions

  1. נכנסים אל הדף Cloud Functions במסוף Google Cloud.
  2. בוחרים את שלוש הנקודות בקטע פעולות בשביל הפונקציה ובוחרים באפשרות מחיקה.
  3. מאשרים את המחיקה על ידי לחיצה על הלחצן מחיקה.

6. מזל טוב

מזל טוב, יצרתם בהצלחה פונקציה של Cloud Functions שפועלת עם Cloud SQL.

באופן ספציפי, יצרתם פונקציה של Cloud Functions שמתחברת וכותבת למכונה של מסד נתונים ב-Cloud SQL.

7. מה השלב הבא?

רוצים לנסות כמה ממעבדי הקוד האלה?

קריאה נוספת

מסמכי עזר