การเชื่อมต่อกับ Cloud SQL ด้วย Cloud Functions

1. บทนำ

อัปเดตล่าสุด 11-05-2021

Cloud SQL คืออะไร

Cloud SQL เป็นบริการฐานข้อมูลที่มีการจัดการครบวงจร ซึ่งทำให้ง่ายต่อการตั้งค่า บำรุงรักษา จัดการ และดูแลฐานข้อมูลเชิงสัมพันธ์บน Google Cloud Platform

Cloud Function คืออะไร

Cloud Functions เป็นโซลูชันประมวลผลที่ใช้งานง่ายสำหรับนักพัฒนาแอปในการสร้างฟังก์ชันแบบสแตนด์อโลนวัตถุประสงค์เดียวที่ตอบสนองต่อเหตุการณ์ระบบคลาวด์ โดยไม่ต้องจัดการเซิร์ฟเวอร์หรือสภาพแวดล้อมรันไทม์

สิ่งที่คุณจะสร้าง

คุณจะต้องเขียน Cloud Function ใน Python ใน Codelab นี้ ฟังก์ชัน

  • เชื่อมต่อกับอินสแตนซ์ฐานข้อมูล Cloud SQL
  • ส่งคำสั่งแทรกไปยังตารางในฐานข้อมูล

สิ่งที่คุณจะได้เรียนรู้

  • วิธีเข้าถึง UI เว็บ Cloud Functions ใน Google Cloud Console
  • วิธีสร้าง Cloud Function
  • วิธีทดสอบ Cloud Function
  • วิธีเชื่อมต่อกับอินสแตนซ์ฐานข้อมูล Cloud SQL (MySQL หรือ PostgreSQL) โดยใช้ Python
  • วิธีเขียนไปยังฐานข้อมูล Cloud SQL โดยใช้ Python

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โครงการ Google Cloud Platform ที่มีอินสแตนซ์ Cloud SQL
  • หากยังไม่มี ให้ทำตามขั้นตอนในการเริ่มต้นใช้งานอย่างรวดเร็วสำหรับ MySQL หรือ PostgreSQL ทำตามขั้นตอนทั้งหมดยกเว้นการล้างข้อมูล
  • อินสแตนซ์ของคุณมีฐานข้อมูล MySQL หรือ PostgreSQL พร้อมตาราง
  • ชื่อการเชื่อมต่ออินสแตนซ์ ฐานข้อมูลและชื่อตาราง ชื่อผู้ใช้ฐานข้อมูล และรหัสผ่านของผู้ใช้
  • บัญชีบริการที่มีบทบาทไคลเอ็นต์ Cloud SQL

3. เตรียมโค้ดและสร้างฟังก์ชัน

เตรียมโค้ด

รหัส Cloud Function สำหรับเชื่อมต่อกับฐานข้อมูล Cloud SQL อยู่ที่นี่ ค่าตัวแปรบางค่าขึ้นอยู่กับว่าฐานข้อมูล Cloud SQL เป็น MySQL หรือ PostgreSQL และขึ้นอยู่กับข้อมูลฐานข้อมูลของคุณเอง

UI ของ Cloud Functions ใน Cloud Console มีเครื่องมือแก้ไขข้อความ คุณสามารถคัดลอก/วางและแก้ไขโค้ดจากที่นั่น หรือแก้ไขโค้ดในเครื่องก่อน แล้วจึงคัดลอก/วางลงใน UI

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. ในเบราว์เซอร์ ให้ไปที่ UI ของคอนโซล Google Cloud Platform
  2. เลือก Cloud Functions จากเมนูการนำทาง
  3. คลิกสร้างฟังก์ชันในแถบปุ่ม
  4. ป้อนชื่อฟังก์ชัน
  5. เลือกทริกเกอร์ HTTP (จด URL ที่แสดงใต้รายการทริกเกอร์ ซึ่งจะอยู่ในรูปแบบ https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME)
  6. ในส่วนการตรวจสอบสิทธิ์ ให้เลือกอนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์เพื่อทำให้ฟังก์ชันเป็นแบบสาธารณะ
  7. ขยายการตั้งค่ารันไทม์ การสร้าง และการเชื่อมต่อ ในบัญชีบริการรันไทม์ ให้เลือกบัญชีบริการที่มีบทบาทไคลเอ็นต์ Cloud SQL
  8. คลิกปุ่มถัดไป
  9. เลือก Python 3.7 สำหรับตัวเลือกรันไทม์
  10. เลือกตัวแก้ไขในบรรทัดสำหรับตัวเลือกซอร์สโค้ด
  11. ในหน้าต่างเครื่องมือแก้ไขซอร์สโค้ด ให้ลบเนื้อหาที่มีอยู่สำหรับทั้ง requirements.txt และ main.py และแทนที่ด้วยโค้ดเวอร์ชันที่แก้ไขแล้วข้างต้น
  12. ป้อน insert เป็นชื่อของจุดแรกเข้า
  13. คลิกทำให้ใช้งานได้ แล้วรอขณะสร้างฟังก์ชัน ไอคอนหมุนจะหยุดหมุนและเครื่องหมายถูกสีเขียวจะปรากฏขึ้นในหน้าถัดไปเมื่อฟังก์ชันพร้อมใช้งาน

4. ทดสอบฟังก์ชัน

  1. ในเบราว์เซอร์ ให้ไปที่ UI ของคอนโซล Google Cloud Platform
  2. เลือก Cloud Functions จากเมนูการนำทาง
  3. คลิกชื่อฟังก์ชันที่สร้างไว้ก่อนหน้านี้
  4. เลือกลิงก์การทดสอบที่อยู่ตรงกลางหน้า
  5. เลือกทดสอบฟังก์ชัน
  6. ผลลัพธ์ควรปรากฏขึ้น: ok (หากการทดสอบไม่สำเร็จ คุณจะเห็นสแต็กเทรซเพื่อช่วยในการแก้ไขข้อบกพร่อง)
  7. ในเบราว์เซอร์ ให้ไปที่ URL ที่บันทึกไว้ก่อนหน้านี้เมื่อสร้างฟังก์ชัน หากคุณลืมบันทึก URL คุณสามารถรับได้จากลิงก์ TRIGGER
  8. ผลลัพธ์ ok ควรปรากฏในเบราว์เซอร์ด้วย

5. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ใน Codelab นี้

ลบอินสแตนซ์ Cloud SQL

  1. ไปที่หน้าอินสแตนซ์ Cloud SQL ใน Google Cloud Console
  2. เลือกอินสแตนซ์ที่คุณสร้างเพื่อเปิดหน้ารายละเอียดอินสแตนซ์
  3. คลิกลบในแถบไอคอนที่ด้านบนของหน้า
  4. ในหน้าต่าง "ลบอินสแตนซ์" ให้พิมพ์ชื่ออินสแตนซ์ แล้วคลิกลบเพื่อลบอินสแตนซ์ คุณจะใช้ชื่ออินสแตนซ์ซ้ำไม่ได้เป็นเวลาประมาณ 7 วันหลังจากลบอินสแตนซ์

ลบ Cloud Function

  1. ไปที่หน้า Cloud Functions ใน Google Cloud Console
  2. เลือกจุด 3 จุดในส่วนการดำเนินการสำหรับฟังก์ชัน แล้วเลือกลบ
  3. ยืนยันการลบโดยคลิกปุ่มลบ

6. ขอแสดงความยินดี

ยินดีด้วย คุณสร้าง Cloud Function ที่ทำงานร่วมกับ Cloud SQL ได้สำเร็จแล้ว

คุณได้สร้าง Cloud Function ที่เชื่อมต่อและเขียนไปยังอินสแตนซ์ฐานข้อมูล Cloud SQL โดยเฉพาะ

7. ขั้นตอนถัดไปคือ

ลองดู Codelab เหล่านี้...

อ่านเพิ่มเติม

เอกสารอ้างอิง