從命令行到雲端:使用 gcloud CLI 部署現代化 Python 服務

從命令行到雲端:使用 gcloud CLI 部署現代化 Python 服務

從命令行到雲端:使用 gcloud CLI 部署現代化 Python 服務

本篇文章將介紹如何使用 Google Cloud Command Line Interface (gcloud CLI) 搭配 Python 的 FastAPI 框架,將應用程式託管在 Google Cloud Run 服務上。這套流程是實現我們的 LINE Bot 應用程式的基礎。

一、 gcloud CLI 簡介與安裝

gcloud 命令行工具是 Google Cloud 的主要工具,用於管理您的 GCP 資源。它讓您能夠從本地終端機管理部署、查看日誌和配置服務。

  • 功能: 部署、配置、管理 Google Cloud Platform 服務。
  • 官方下載連結: Google Cloud CLI 官方文件

二、 託管與部署:Cloud Run 服務

Cloud Run 是一個託管的計算平台,允許您部署容器化的應用程式。使用 gcloud run deploy 命令,您可以直接從原始碼(Source Code)或 Docker 映像檔進行部署。

1. 部署指令與關鍵參數

我們使用 gcloud run deploy 搭配 --source . 參數,讓 Google Cloud Build 自動為我們構建容器並部署到 Cloud Run。

以下是我們在專案中使用的範例部署指令:

gcloud run deploy [服務名稱] \    --source . \    --region asia-east1 \    --platform managed \    --allow-unauthenticated \    --set-env-vars LINE_CHANNEL_ACCESS_TOKEN="..." \    --set-env-vars LINE_CHANNEL_SECRET="..." \    --port 8080 \    --memory 512Mi \    --min-instances 0

參數

2. 取得服務連結 (URL)

部署成功後,服務的 URL 是外部存取服務的唯一地址。

命令行介面 (CLI) 方式

如果錯過了輸出,您可以使用以下指令來查詢服務的詳細資訊,包括其 URL:

gcloud run services describe [服務名稱] --platform managed --region [區域] --format='value(status.url)'
  • 服務 URL 格式: https://[服務名稱]-[專案編號].[區域].run.app

圖像介面 (Google Cloud Console) 方式

登入 Google Cloud Console

搜尋 Cloud Run 服務頁面。

點擊您的服務名稱(例如 service-now)。

在服務詳情頁面的頂部,您會看到一個 URL 連結,可以直接點擊訪問。

三、 檢視日誌與診斷錯誤

Cloud Run 的日誌系統與 Google Cloud Logging 整合。這是診斷部署失敗或運行時錯誤(例如常見的 500 Internal Server Error)的關鍵。

1. 透過 gcloud CLI 檢視日誌

要即時追蹤服務的日誌,可以使用 gcloud run logs tail 指令:

gcloud run logs tail [服務名稱] --platform managed --region [區域]
  • 此指令會持續輸出最新的日誌訊息(類似 tail -f),對於診斷啟動失敗或 Webhook 錯誤非常有用。

2. 透過 Google Cloud Console 檢視日誌

對於更詳細的篩選和歷史日誌查詢,圖像介面更為方便:

登入 Google Cloud Console

導航至 Cloud Run 服務頁面。

點擊您的服務名稱,進入服務詳情頁面。

點選頂部的 「日誌 (Logs)」 選項卡。

這裡會顯示結構化的日誌,您可以利用強大的篩選器(例如依據嚴重性 severity 或請求 ID trace)來診斷問題。

3. 了解日誌類型

在日誌中,請特別關注 stderr 輸出,這是 Python 程式碼中 logger.error 或未捕獲的異常(如 Traceback)會出現的地方。

四、 透過 Shell 進行 POST 測試

在我們使用 Cloud Scheduler 之前,需要手動測試 /trigger-push 路由是否能正常工作。

1. 測試指令 (使用 curl)

假設您的服務 URL 為 YOUR_SERVICE_URL:

# 測試 /trigger-push 路由是否能觸發 LINE 廣播curl -X POST YOUR_SERVICE_URL/trigger-push

2. 測試結果與日誌

  • 如果返回 200 OK,並且日誌顯示 廣播訊息發送成功,則表示廣播 API 呼叫成功。
  • 如果返回 500 Internal Server Error,日誌中會輸出我們在 line_bot_scheduler.py 中設置的詳細錯誤訊息,例如:ERROR:trigger-push: LINE API 呼叫失敗,狀態碼: 401, 錯誤詳情: ...,這表示 LINE Bot 金鑰有誤。

五、 基本 FastAPI 服務模板

我們的 LINE Bot 專案基於 FastAPI,它是一種高性能的現代 Web 框架。

主要結構:

  • 初始化應用程式: app = FastAPI()
  • 健康檢查路由: @app.get("/") 提供給 Cloud Run 內部監控使用。
  • Webhook 核心路由: @app.post("/") 接收 LINE 伺服器的訊息。
  • 排程任務路由: @app.post("/trigger-push") 供 Cloud Scheduler 呼叫。
    相關連結:

  • FastAPI 官方文件

  • LINE Bot SDK (Python) 官方文件

Comments

Loading comments…

Leave a Comment