การเชื่อมต่อกับ 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 เหล่านี้...

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

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