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

1. บทนำ

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

Cloud SQL คืออะไร

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

ฟังก์ชันระบบคลาวด์คืออะไร

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

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

ในโค้ดแล็บนี้ คุณจะได้เขียน Cloud Function ใน Python ฟังก์ชัน

  • เชื่อมต่อกับอินสแตนซ์ฐานข้อมูล 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 Functions สำหรับเชื่อมต่อกับฐานข้อมูล 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. Selในหน้าต่างโปรแกรมแก้ไขซอร์สโค้ด ให้ลบเนื้อหาที่มีอยู่สำหรับทั้ง requirements.txt และ main.py แล้วแทนที่ด้วยโค้ดเวอร์ชันที่แก้ไขแล้วด้านบน
  12. ป้อน insert เป็นชื่อจุดแรกเข้า
  13. คลิกติดตั้งใช้งานและรอขณะที่ระบบสร้างฟังก์ชัน วงกลมหมุนจะหยุดหมุนและเครื่องหมายถูกสีเขียวจะปรากฏในหน้าถัดไปเมื่อฟังก์ชันพร้อมใช้งาน

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

  1. ในเบราว์เซอร์ ให้ไปที่ UI ของคอนโซล Google Cloud Platform
  2. เลือก Cloud Functions จากเมนูการนำทาง
  3. คลิกชื่อฟังก์ชันที่คุณสร้างไว้ก่อนหน้านี้
  4. เลือกลิงก์การทดสอบตรงกลางหน้า
  5. เลือกทดสอบฟังก์ชัน
  6. ผลลัพธ์ควรปรากฏเป็น ok (หากการทดสอบไม่สำเร็จ คุณจะเห็น Stack Trace เพื่อช่วยในการแก้ไขข้อบกพร่อง)
  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 ที่ใช้ได้กับ Cloud SQL เรียบร้อยแล้ว

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

7. ขั้นตอนต่อไปคืออะไร

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

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

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