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. 需求條件
- 瀏覽器,例如 Chrome 或 Firefox。
- 包含您的 Cloud SQL 執行個體的 Google Cloud Platform 專案。
- 如果您沒有帳戶,請按照 MySQL 或 PostgreSQL 快速入門導覽課程中的步驟操作。執行所有步驟,但清除所用資源。
- 執行個體含有內含資料表的 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'
建立函式
- 使用瀏覽器前往 Google Cloud Platform Console UI。
- 從導覽選單中選取「Cloud Functions」。
- 按一下按鈕列上的「建立函式」。
- 輸入函式的名稱。
- 選取「HTTP」觸發條件。(請記下觸發項目下方顯示的網址,格式如下:https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME)。
- 選取「驗證」下方的「允許未經驗證的叫用」,將函式設為公開。
- 在「Runtime service account」(執行階段服務帳戶) 中,展開「Runtime, Build and Connections Settings」(執行階段、建構與連線設定),並選取具備「Cloud SQL Client」(Cloud SQL 用戶端) 角色的服務帳戶。
- 點選「下一步」按鈕。
- 在「runtime」選項中選取「Python 3.7」。
- 選取「Inline Editor」(內嵌編輯器) 做為原始碼選項。
- 在原始碼編輯器視窗中,刪除 requirements.txt 和 main.py 的現有內容,然後替換成以上編輯版程式碼。
- 輸入 insert 做為進入點的名稱。
- 按一下「Deploy」(部署),等待函式建立完成。此時旋轉圖示會停止旋轉,並在函式可供使用時,繼續顯示綠色勾號。
4. 測試函式
- 使用瀏覽器前往 Google Cloud Platform Console UI。
- 從導覽選單中選取「Cloud Functions」。
- 按一下您先前建立的函式名稱。
- 選取頁面中間的「測試」連結。
- 選取「測試函式」。
- 結果應該會顯示:「ok」 (如果測試失敗,系統會顯示堆疊追蹤,協助您進行偵錯)。
- 在瀏覽器中,前往您之前建立函式時儲存的網址。如果您忘記儲存網址,可以透過 [TRIGGER] 連結取得網址。
- ok 結果也會顯示在瀏覽器中。
5. 清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取這個程式碼研究室所用資源的費用,請按照下列步驟操作。
刪除 Cloud SQL 執行個體
- 前往 Google Cloud 控制台的 Cloud SQL 執行個體頁面。
- 選取您建立的執行個體,開啟「執行個體詳細資料」頁面。
- 在頁面頂端的圖示列中,按一下 [刪除]。
- 在「Delete instance」(刪除執行個體) 視窗中輸入執行個體名稱,然後按一下「Delete」(刪除) 以刪除執行個體。執行個體刪除後,您大約在 7 天內無法重複使用該執行個體名稱。
刪除 Cloud 函式
- 前往 Google Cloud 控制台的 Cloud Functions 頁面。
- 在函式的「動作」下方選取三點圖示,然後選擇「刪除」。
- 按一下「刪除」按鈕確認刪除。
6. 恭喜
恭喜!您已成功建立可與 Cloud SQL 搭配使用的 Cloud 函式。
具體來說,您建立了 Cloud 函式,該函式會連線至 Cloud SQL 資料庫執行個體並寫入其中。