利用Google Cloud Run 實現自動部屬

cloud-run.png

Cloud Run 的特點

實作步驟

本篇實作步驟以django作為範例

1.撰寫Dockerfile

# 使用官方的 Python 基本映像
FROM python:3.12

# 設定工作目錄
WORKDIR /app

# Install necessary dependencies
RUN apt-get update && apt-get install -y \
    cmake \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

RUN apt-get update && apt-get install -y \
    libgl1 \
    libglib2.0-0   

# 複製 requirements.txt 並安裝 Python 套件
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 複製 Django 應用程式
COPY . .
# 設定環境變數
ENV PORT 8000
ENV PYTHONUNBUFFERED TRUE

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

2.登入 google cloud 控制台 新建專案

step2.JPG

3.到 API程式庫 啟用 Cloud Run Admin API 及 Cloud Build API

step3-1.JPG step3-2.JPG

4. 選取專案 切換至cloud run 功能 新建一個服務

step4-1.png

5.進入服務設定介面

5.1 選擇 從存放區持續部署 (原始碼或函式)

step5-1.JPG

5.2 按下透過 CLOUD BUILD 設定按鈕出現右側選單

step5-2.JPG

5.3 按下管理以連結的存放區 選擇想要部屬的repositry

step5-3.JPG

5.4 存放區下拉選單選擇該repositry 之後按下一步

step5-4.JPG

5.5 選擇分支 及建構類型為Dockerfile 按下儲存

step5-5.JPG

5.6 設定容器的通訊埠

這邊對應的是dockerfile 啟動 django的port

step5-6.JPG

5.7 資源選擇記憶體 32 GiB 及 CPU 8

step5-7.JPG

5.8設定os的env變數

範例專案中有使用到 SPOTIFY_CLIENT_ID 及SPOTIFY_CLIENT_SECRET

step5-8.JPG

settings.py

SPOTIFY_CLIENT_ID = os.getenv('SPOTIFY_CLIENT_ID')
SPOTIFY_CLIENT_SECRET = os.getenv('SPOTIFY_CLIENT_SECRET')
5.9 執行個體數量上限輸入62

step5-9.JPG

5.10 按下建立按鈕

step5-10.JPG

6.開始部屬

step6.JPG

7.部屬完成

step7.JPG

django網頁

step7-2.JPG

Cloud Run 與 Compute Engine 比較

結論:

Google Cloud Run 更適合快速開發、部署,並需要隨著流量動態調整資源的應用,尤其是無伺服器架構的微服務和事件驅動應用。然而,由於是無伺服器架構,Cloud Run 會有 冷啟動 的情況:當容器沒有運行且接收到新請求時,系統會啟動新的容器,這可能導致延遲。冷啟動通常只發生在流量較低或無流量時,而對於穩定的高流量應用,冷啟動影響較小。

Google Compute Engine 則適合需要完整掌控虛擬機環境的大型應用或複雜系統,特別是那些需要持續運行、有狀態、以及自定義配置的應用程式。由於虛擬機長期運行,沒有冷啟動的問題,但維護成本和手動擴展管理會相對較高。