在本機測試 Cloud Run 服務

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

事前準備

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

請參閱支援的容器登錄資料說明文件,瞭解如何取得存取權。您可以設定 Docker,使用 gcloud CLI 憑證輔助程式存取 Artifact Registry:

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

本機測試

您可以使用 Docker、具備 Google Cloud Access 的 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 說明文件

搭配 Google Cloud 存取權的 Docker

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

如要在本機執行:

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

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

    1. 如果您已經在機器上設定 GOOGLE_APPLICATION_CREDENTIALS 環境變數,請使用 --volume (-v) 標記,將憑證檔案植入容器:
      -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 模擬器

VS CodeJetBrains IDECloud Code 外掛程式可讓您在 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 的 Buildpack 建構容器。

如要查看服務執行情形,請在瀏覽器中前往 http://localhost:8080/。如果您使用了 --local-port 選項指定自訂通訊埠,請務必在瀏覽器中開啟該通訊埠。

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

  • Mac OS 和 Linux:Control-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 環境變數,但由於未設定該變數,因此不會顯示任何值。

搭配 Google Cloud 存取權的 Docker

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

Cloud Code 模擬器

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

gcloud CLI

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

後續步驟