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