使用 Cloud Functions 連線至 Cloud SQL

1. 簡介

上次更新時間:2021 年 5 月 11 日

什麼是 Cloud SQL?

Cloud SQL 是一項全代管資料庫服務,可協助您輕鬆設定、維護及管理 Google Cloud Platform 中的關聯資料庫。

什麼是 Cloud Functions?

Cloud Functions 是一個輕量的運算解決方案,可讓開發人員建立獨立的單一用途函式來回應雲端事件,而不必管理伺服器或執行階段環境。

建構項目

在本程式碼研究室中,您將使用 Python 編寫 Cloud 函式。這個函式:

  • 連線至 Cloud SQL 資料庫執行個體。
  • 這個外掛程式能將插入陳述式傳送至資料庫中的資料表。

課程內容

  • 如何在 Google Cloud 控制台中存取 Cloud Functions 網頁版 UI。
  • 如何建立 Cloud 函式。
  • 如何測試 Cloud 函式。
  • 如何使用 Python 連線至 Cloud SQL 資料庫執行個體 (MySQL 或 PostgreSQL)。
  • 如何使用 Python 寫入 Cloud SQL 資料庫。

2. 需求條件

  • 瀏覽器,例如 ChromeFirefox
  • 包含您的 Cloud SQL 執行個體的 Google Cloud Platform 專案。
  • 如果您沒有帳戶,請按照 MySQLPostgreSQL 快速入門導覽課程中的步驟操作。執行所有步驟,但清除所用資源。
  • 執行個體含有內含資料表的 MySQL 或 PostgreSQL 資料庫。
  • 執行個體連線名稱、資料庫和資料表名稱、資料庫使用者名稱及使用者密碼。
  • 擁有 Cloud SQL 用戶端角色的服務帳戶。

3. 準備程式碼並建立函式

準備程式碼

這裡提供可連線至 Cloud SQL 資料庫的 Cloud 函式程式碼。部分變數值取決於您的 Cloud SQL 資料庫為 MySQL 或 PostgreSQL,且取決於您的資料庫資訊。

Cloud 控制台中的 Cloud Functions 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. 使用瀏覽器前往 Google Cloud Platform Console UI
  2. 從導覽選單中選取「Cloud Functions」
  3. 按一下按鈕列上的「建立函式」
  4. 輸入函式的名稱。
  5. 選取「HTTP」觸發條件。(請記下觸發項目下方顯示的網址,格式如下:https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME)。
  6. 選取「驗證」下方的「允許未經驗證的叫用」,將函式設為公開。
  7. 在「Runtime service account」(執行階段服務帳戶) 中,展開「Runtime, Build and Connections Settings」(執行階段、建構與連線設定),並選取具備「Cloud SQL Client」(Cloud SQL 用戶端) 角色的服務帳戶。
  8. 點選「下一步」按鈕。
  9. 在「runtime」選項中選取「Python 3.7」
  10. 選取「Inline Editor」(內嵌編輯器) 做為原始碼選項。
  11. 在原始碼編輯器視窗中,刪除 requirements.txtmain.py 的現有內容,然後替換成以上編輯版程式碼。
  12. 輸入 insert 做為進入點的名稱。
  13. 按一下「Deploy」(部署),等待函式建立完成。此時旋轉圖示會停止旋轉,並在函式可供使用時,繼續顯示綠色勾號。

4. 測試函式

  1. 使用瀏覽器前往 Google Cloud Platform Console UI
  2. 從導覽選單中選取「Cloud Functions」
  3. 按一下您先前建立的函式名稱。
  4. 選取頁面中間的「測試」連結。
  5. 選取「測試函式」
  6. 結果應該會顯示:「ok」 (如果測試失敗,系統會顯示堆疊追蹤,協助您進行偵錯)。
  7. 在瀏覽器中,前往您之前建立函式時儲存的網址。如果您忘記儲存網址,可以透過 [TRIGGER] 連結取得網址。
  8. ok 結果也會顯示在瀏覽器中。

5. 清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取這個程式碼研究室所用資源的費用,請按照下列步驟操作。

刪除 Cloud SQL 執行個體

  1. 前往 Google Cloud 控制台的 Cloud SQL 執行個體頁面
  2. 選取您建立的執行個體,開啟「執行個體詳細資料」頁面。
  3. 在頁面頂端的圖示列中,按一下 [刪除]
  4. 在「Delete instance」(刪除執行個體) 視窗中輸入執行個體名稱,然後按一下「Delete」(刪除) 以刪除執行個體。執行個體刪除後,您大約在 7 天內無法重複使用該執行個體名稱。

刪除 Cloud 函式

  1. 前往 Google Cloud 控制台的 Cloud Functions 頁面
  2. 在函式的「動作」下方選取三點圖示,然後選擇「刪除」
  3. 按一下「刪除」按鈕確認刪除。

6. 恭喜

恭喜!您已成功建立可與 Cloud SQL 搭配使用的 Cloud 函式。

具體來說,您建立了 Cloud 函式,該函式會連線至 Cloud SQL 資料庫執行個體並寫入其中。

7. 接下來要做什麼?

查看一些程式碼研究室...

其他資訊

參考文件