想透過簡單的指令,快速構建並部署程式碼到 Cloud Run 嗎?使用 Cloud Run,您不必建立、管理 Kubernetes 節點,即可執行容器化應用程式、快速將容器化映像檔轉到完全託管的 Web 應用程式,該應用程式也會在具有 TLS 憑證的網域上運行,並根據請求自動擴展。

在全代管的無伺服器平台上,您可以使用自己慣用的程式語言 (如:Go、Python、Java、Node.js、NET 等) 開發及部署具備高擴充性的容器化應用程式,且所有 Google Cloud 客戶每月可發出 200 萬次免費請求。當然,您僅須支付程式碼運作期間的費用。就讓宏庭科技架構師手把手帶您深入了解 Cloud Run 該怎麼建置與自動化部署吧!

 

如何從 Cloud Shell Editor 連到 GCP 專案?

Step 1:首先,請點擊這邊進入 Cloud Shell Editor

Cloud Run-1

Step 2:輸入下面的指令來連到專案(Project),[PROJECT_ID]請填入專案ID

gcloud config set project [PROJECT_ID]

Step 3:點擊Authorize

Step 4:設定完成後會像下面這樣,出現黃色的括弧

 

如何撰寫 Demo 程式?

Step 1:創建一個 helloworld 資料夾,並切換進去

mkdir helloworld

cd helloworld

Step 2:由於我們的 Demo 是要採用 GO 語言來開發,所以這邊我們需要下面的指令去初始化 go.mod 以聲明 go module

go mod init demo

demo:這個參數可以替換成你想要的命名

Step 3:接著我們需要建立我們的主程式 main.go

vi main.go

Step 4:輸入以下程式碼。這段程式碼是在創建一個基本的 Web Server,並監聽 PORT 這個環境變數定義的端口。

// Sample run-helloworld is a minimal Cloud Run service.

package main

 

import (

     “fmt”

     “log”

     “net/http”

     “os”

)

 

func main() {

     log.Print(“starting server…”)

     http.HandleFunc(“/”, handler)

 

     // Determine port for HTTP service.

     port := os.Getenv(“PORT”)

     if port == “” {

             port = “8080”

             log.Printf(“defaulting to port %s”, port)

     }

 

     // Start HTTP server.

     log.Printf(“listening on port %s”, port)

     if err := http.ListenAndServe(“:”+port, nil); err != nil {

             log.Fatal(err)

     }

}

 

func handler(w http.ResponseWriter, r *http.Request) {

     name := os.Getenv(“NAME”)

     if name == “” {

             name = “World”

     }

     fmt.Fprintf(w, “Hello %s!\n”, name)

}

如何將程式容器化並上傳到 Container Registry?

接下來我們就可以將這段程式碼打包成 container,並上傳到Container Registry之中。

Step 1:首先我們需要創建一個 Dockerfile 文件

vi Dockerfile

Step 2:貼上以下內容

# Use the offical golang image to create a binary.

# This is based on Debian and sets the GOPATH to /go.

# https://hub.docker.com/_/golang

FROM golang:1.15-buster as builder

 

# Create and change to the app directory.

WORKDIR /app

 

# Retrieve application dependencies.

# This allows the container build to reuse cached dependencies.

# Expecting to copy go.mod and if present go.sum.

COPY go.* ./

RUN go mod download

 

# Copy local code to the container image.

COPY . ./

 

# Build the binary.

RUN go build -mod=readonly -v -o server

 

# Use the official Debian slim image for a lean production container.

# https://hub.docker.com/_/debian

# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds

FROM debian:buster-slim

RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \

ca-certificates && \

rm -rf /var/lib/apt/lists/*

 

# Copy the binary to the production image from the builder stage.

COPY –from=builder /app/server /app/server

 

# Run the web service on container startup.

CMD [“/app/server”]

Step 3:添加一個 .dockerignore 文件,以從 container image 中排除文件

vi .dockerignore

Step 4:貼上以下內容

# The .dockerignore file excludes files from the container build process.

#

# https://docs.docker.com/engine/reference/builder/#dockerignore-file

 

# Exclude locally vendored dependencies.

vendor/

 

# Exclude “build-time” ignore files.

.dockerignore

.gcloudignore

 

# Exclude git history and configuration.

.gitignore

Step 5:使用 Cloud Build 來建構 container image,方法是從包含 Dockerfile 的目錄中運行下面的指令

gcloud builds submit –tag gcr.io/PROJECT-ID/helloworld

其中 PROJECT-ID 是GCP專案ID,可以透過執行gcloud config get-value project來獲得該ID

Step 6:建置成功後,我們會看到一條包含image名稱 (gcr.io/PROJECT-ID/helloworld) 的SUCCESS訊息。該image是存儲在Container Registry中,並可以根據需求重複使用。

 

如何部署到 Cloud Run?

Step 1:透過以下指令將剛剛建好的 image 部署到 Cloud Run 中

gcloud run deploy –image gcr.io/PROJECT-ID/helloworld –platform managed

Step 2:將 PROJECT-ID 帶入我們的GCP專案ID

Step 3:系統會提示我們輸入服務名稱:按 Enter 接受默認名稱 helloworld

Step 4:系統會提示我們輸入區域:選擇我們所要部署的區域,例如 asia-east1

Step 5:系統會提示我們「是否允許未通過身份驗證的呼叫」,這邊輸入Y

Step 6:部署完畢後,會得到 Cloud Run 的服務網址,可以在瀏覽器中開啟

現在,您已經學會如何打包一個 Container image 並將其部署到 Cloud Run 中運行了。Cloud Run 會在需要處理收到的請求時,自動橫向擴充我們的 Container image,並在需要處理的請求減少時,自動橫向限縮我們的 Container image。

想了解更多 Google Cloud 的隱藏版實用功能,請持續鎖定宏庭架構師專欄,讓您新知訊息接不完喔!

常見問題 FAQ

建置與自動化部署全代管的無伺服器平台 Cloud Run 適合哪些類型的企業?

想透過簡單的指令,快速構建並部署程式碼到 Cloud Run 嗎?使用 Cloud Run,您不必建立、管理 Kubernetes 節點,即可執行容器化應用程式。

導入 建置與自動化部署全代管的無伺服器平台 Cloud Run 需要多少時間?

導入時程依企業規模與系統複雜度而定,建議先進行完整評估與規劃,確保順利上線。

建置與自動化部署全代管的無伺服器平台 Cloud Run 有哪些常見問題需要注意?

主要注意事項包含權限設定、資安配置與成本控管,Microfusion 宏庭科技提供專業顧問支援。