在本地测试 Cloud Run 服务

在开发期间,您可以在部署前先在本地运行和测试容器映像。您可以使用 Cloud Code本地安装的 Docker 在本地运行和测试,包括在本地运行且可以访问 Google Cloud 服务。

Cloud Code 模拟器

Cloud Code for VS Code 插件和 JetBrains IDE 可让您在 IDE 内的 Cloud Run 模拟器中本地运行和调试容器映像。您可以使用模拟器来配置环境以代表在 Cloud Run 上运行的服务。

您可以配置 CPU 和内存分配等属性、指定环境变量,以及设置 Cloud SQL 数据库连接。

  1. 安装 Cloud Code for VS CodeJetBrains IDE
  2. 按照在 IDE 本地开发和调试的说明操作。
  3. VS Code:本地开发调试
  4. IntelliJ:本地开发调试

Cloud SDK

Cloud SDK 包含一个用于模拟 Cloud Run 的本地开发环境,此环境可以从源代码构建容器、在本地机器上运行容器以及在源代码更改时自动重建容器。

如需启动本地开发环境,请执行以下操作:

  1. 将目录更改为包含服务源代码的目录。

  2. 调用命令:

    gcloud beta code dev

如果本地目录中存在 Dockerfile,则用于构建容器。如果不存在 Dockerfile,则该容器使用 Google Cloud Buildpacks 构建。

如需查看服务是否正在运行,请在浏览器中访问 http://localhost:8080/。如果您使用 --local-port 选项指定了自定义端口,请记得在浏览器中指向该端口。

如需停止本地服务器,请执行以下操作:

  • Mac OS 和 Linux:Control-C
  • Windows:Control-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
  spec:
    template:
      spec:
        containers:
        - env:
          - name: FOO
            value: bar
        resources:
          limits:
            memory: 128Mi
            cpu: 1

使用凭据

如需向容器授予使用 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

    --service-account 标志会导致服务帐号密钥下载并缓存在本地。用户负责确保密钥的安全以及删除不再需要的密钥。

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

    PORT 环境变量指定应用将用于侦听 HTTP 或 HTTPS 请求的端口。这是容器运行时合同中的一项要求。在此示例中,我们使用的端口是 8080。

  2. 通过浏览器打开 http://localhost:9090

如果您初次使用容器,可能需要查看 Docker 使用入门指南。如需详细了解 Docker 命令,请参阅 Docker 文档

拥有 GCP 访问权限的 Docker

如果您使用 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 服务,您可能需要使用备用配置将本地问题排查与生产性能和数据隔离开来。

后续步骤