在本機測試 Cloud Run 服務

開發期間,您可以先在本機執行並測試容器映像檔,然後再進行部署。您可以使用 Cloud Code本地安裝的 Docker 在本地運行和測試,包括在本地運行並存取 Google Cloud 服務。

事前準備

如果您是第一次嘗試在本機執行,可能沒有從支援的容器登錄檔存取映像檔所需的所有權限。

請查閱您所支援的容器註冊表文檔,以瞭解如何取得存取權限。 您可以設定 Docker,使用 gcloud CLI 憑證輔助程式存取 Artifact Registry:

gcloud auth configure-docker LOCATION-docker.pkg.dev
LOCATION 替換為容器存放區的區域名稱,例如 us-west2

在本機測試

您可以使用 Docker、具備 Google Cloud 存取權的 Docker、Cloud Code 模擬器或 Google Cloud CLI 在本機進行測試。請選擇對應的標籤頁查看說明。

Docker

如要使用 Docker 測試您的容器映像檔:

  1. 使用 Docker 指令:

    PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} IMAGE_URL

    IMAGE_URL 替換為容器映像檔的參照,例如 us-docker.pkg.dev/cloudrun/container/hello:latest。如果您使用 Artifact Registry,則必須先建立存放區 REPO_NAME。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

    PORT 環境變數會指定應用程式將使用的通訊埠,以聽取 HTTP 或 HTTPS 要求。這是容器執行階段合約的要求。在本範例中,我們使用通訊埠 8080。

  2. 在瀏覽器中開啟 http://localhost:9090

如果您是容器操作新手,您可能需要回顧一下…Docker 入門指南指導。要瞭解有關 Docker 命令的更多信息,請參閱 Docker 文件

Docker with Google Cloud Access

如果您使用 Google Cloud 用戶端程式庫整合使用 Google Cloud 服務的應用程式,並且並未保護這些服務的安全以控制外部存取權,便可設定本機容器,透過使用應用程式預設憑證的 Google Cloud 服務進行驗證。

本地運行:

  1. 請參閱設定服務帳戶金鑰的操作說明。

  2. 下列 Docker 執行標記會將本機系統的憑證和設定植入本機容器:

    1. 使用 --volume (-v) 標誌將憑證檔案注入容器(假設您已在機器上設定了 GOOGLE_APPLICATION_CREDENTIALS 環境變數):
      -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro
    2. 使用 --environment (-e) 標誌來設定容器內的 GOOGLE_APPLICATION_CREDENTIALS 變數:
      -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
  3. 或者,使用這個完整設定的 Docker run 指令:

    PORT=8080 && docker run \
    -p 9090:${PORT} \
    -e PORT=${PORT} \
    -e K_SERVICE=dev \
    -e K_CONFIGURATION=dev \
    -e K_REVISION=dev-00001 \
    -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json \
    -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro \
    IMAGE_URL

    請注意,路徑

    如上例所示,
    /tmp/keys/FILE_NAME.json
    是放置容器內憑證的合理位置。

    不過也可以放到其他目錄位置。重點是 GOOGLE_APPLICATION_CREDENTIALS 環境變數必須與容器內的繫結掛接位置相符。

    此外還要注意,針對部分 Google Cloud 服務,您可能想要使用不同的設定,將本機的疑難排解與實際工作環境效能和資料做出區隔。

Cloud Code 模擬器

Cloud Code 外掛程式適用於 VS CodeJetBrains IDE,可讓您在本機 IDE 的 Cloud Run 模擬器中執行容器映像檔並進行偵錯。您可以使用模擬器設定環境,代表在 Cloud Run 上執行的服務。

您可以設定 CPU 和記憶體配置等屬性、指定環境變數,以及設定 Cloud SQL 資料庫連線。

  1. 安裝 VS CodeJetBrains IDE 的 Cloud Code。
  2. 按照操作說明,在 IDE 中進行本機開發和偵錯。
  3. VS Code:在本機開發偵錯
  4. IntelliJ:在本機開發偵錯

gcloud CLI

Google Cloud CLI 包含 本機開發環境,可模擬 Cloud Run,從來源建構容器、在本機電腦上執行容器,並在原始碼變更時自動重建容器。

啟動本機開發環境:

  1. 將目錄變更為包含服務原始碼的目錄。

  2. 叫用指令:

    gcloud beta code dev
    如果本機目錄中有 Dockerfile,系統會用來建構容器。如果沒有 Dockerfile,系統會使用 Google Cloud 的建構套件建構容器。

若要查看您的服務是否正在運行,請在瀏覽器中造訪 http://localhost:8080/。 如果您使用 --local-port 選項指定了自訂端口,請記住在瀏覽器中開啟該端口。

如要停止本機伺服器,請按照下列步驟操作:

  • Mac OS 與 Linux:Ctrl+C
  • Windows:Ctrl + Break

自訂服務設定

您可以使用 YAML 檔案自訂本機運作服務的 Cloud Run 設定。 YAML 格式與用於部署 Cloud Run 服務的格式相同,但僅支援部分 Cloud Run 服務設定。gcloud beta code dev 會在目前目錄中尋找並使用任何以 *.service.dev.yaml 結尾的檔案。如果找不到任何檔案,系統會使用以 *.service.yaml 結尾的檔案。

您可以為本機開發設定下列項目:

本機開發時不需要 image 容器欄位,因為執行指令時,系統會建構映像檔並提供給服務。

您可以在本機開發作業中使用下列 service.dev.yaml 檔案範例:

  apiVersion: serving.knative.dev/v1
  kind: Service
  metadata:
    name: my-service-name
  spec:
    template:
      spec:
        containers:
        - env:
          - name: FOO
            value: bar

使用憑證進行測試

若要授予容器使用 Google Cloud 服務的權限,必須提供容器存取憑證。

  • 如要讓容器透過您的帳戶存取憑證,請使用 gcloud 登入,並使用 --application-default-credential 標記:

    gcloud auth application-default login
    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --application-default-credential

  • 若要將應用程式憑證作為服務帳戶提供,請使用 --service-account 標誌:

    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --service-account=SERVICE_ACCOUNT_EMAIL

確認您的程式碼正在本地運行。

在本機測試 Cloud Run 時,您可以檢查 K_REVISION 環境變數,確認容器是否在本機執行。Cloud Run 會將這個變數提供給所有容器。

Docker

如要確認您是在 Google Cloud CLI 上在本機執行程式碼,可以嘗試查詢 K_REVISION 環境變數,但由於尚未設定,因此不會有任何值。

Docker with Google Cloud Access

如果您在步驟 3 中使用上述章節的確切值,確認您是在 Google Cloud CLI 上在本機執行程式碼,則可以查詢 K_REVISION 環境變數,並尋找 dev-00001 值,確認程式碼是在本機執行。

Cloud Code 模擬器

如要確認您是在 Cloud Code 本機執行程式碼,可以查詢 K_REVISION 環境變數,並尋找 local 值,確認程式碼是在本機執行。

gcloud CLI

如要確認您是在 Google Cloud CLI 本機執行程式碼,可以查詢 K_REVISION 環境變數,並尋找以 dev- 開頭的值,確認程式碼是在本機執行。

後續步驟