arrow_back

Hello Cloud Run

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

Hello Cloud Run

实验 1 小时 universal_currency_alt 5 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!
done
学习 700 多个动手实验和课程并获得相关技能徽章

概览

Cloud Run 徽标

Cloud Run 是一个托管式计算平台,供您运行可通过 HTTP 请求调用的无状态容器。Cloud Run 采用无服务器设计:您不用管理基础架构,因此可全力专注于最重要的工作,即构建出色的应用。

Cloud Run 基于 Knative 构建而成,可让您选择使用 Cloud Run 在全托管式环境中运行容器,或使用 Cloud Run on GKE 在您的 Google Kubernetes Engine 集群中运行容器。

本实验的目标是构建一个简单的容器化应用映像并将其部署到 Cloud Run。

目标

在本实验中,您将学习如何执行以下任务:

  • 启用 Cloud Run API。
  • 创建一个能够部署为无服务器的无状态容器的简单 Node.js 应用。
  • 将您的应用容器化并上传到 Artifact Registry。
  • 在 Cloud Run 上部署容器化应用。
  • 删除不需要的映像,以免产生额外的存储费用。

设置和要求

对于每个实验,您都会免费获得一个新的 Google Cloud 项目及一组资源,它们都有固定的使用时限。

  1. 点击开始实验按钮。如果该实验需要付费,系统会打开一个弹出式窗口供您选择付款方式。左侧是实验详细信息面板,其中包含以下各项:

    • 打开 Google Cloud 控制台按钮
    • 剩余时间
    • 进行该实验时必须使用的临时凭据
    • 帮助您逐步完成本实验所需的其他信息(如果需要)
  2. 点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。

    该实验会启动资源并打开另一个标签页,显示登录页面。

    提示:将这些标签页安排在不同的窗口中,并排显示。

    注意:如果您看见选择账号对话框,请点击使用其他账号
  3. 如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。

    {{{user_0.username | "<用户名>"}}}

    您也可以在实验详细信息面板中找到用户名

  4. 点击下一步

  5. 复制下面的密码,然后将其粘贴到欢迎对话框中。

    {{{user_0.password | "<密码>"}}}

    您也可以在实验详细信息面板中找到密码

  6. 点击下一步

    重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。 注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
  7. 继续在后续页面中点击以完成相应操作:

    • 接受条款及条件。
    • 由于这是临时账号,请勿添加账号恢复选项或双重验证。
    • 请勿注册免费试用。

片刻之后,系统会在此标签页中打开 Google Cloud 控制台。

注意:如需查看列有 Google Cloud 产品和服务的菜单,请点击左上角的导航菜单导航菜单图标

激活 Google Cloud Shell

Google Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。

Google Cloud Shell 提供了可用于访问您的 Google Cloud 资源的命令行工具。

  1. 在 Cloud 控制台右上角的工具栏中,点击“打开 Cloud Shell”按钮。

    突出显示的 Cloud Shell 图标

  2. 点击继续

预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 PROJECT_ID。例如:

在 Cloud Shell 终端中突出显示的项目 ID

gcloud 是 Google Cloud 的命令行工具。它会预先安装在 Cloud Shell 上,且支持 Tab 自动补全功能。

  • 您可以通过以下命令列出有效的账号名称:
gcloud auth list

输出:

Credentialed accounts: - @.com (active)

输出示例

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 您可以通过以下命令列出项目 ID:
gcloud config list project

输出:

[core] project =

输出示例

[core] project = qwiklabs-gcp-44776a13dea667a6 注意:有关 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

参考文档

基本的 Linux 命令

下面是一些非常基本的 Linux 命令的参考列表,这些命令可能包含在本实验的说明或代码块中。

命令 --> 操作 . 命令 --> 操作
mkdir(创建目录 新建文件夹 . cd(更改目录 转入另一文件夹
ls(列出 列出目录中的文件和文件夹 . cat(串联 在不使用编辑器的情况下读取文件的内容
apt-get update 更新软件包管理器库 . ping 用于测试主机可达性的信号
mv(移动 移动文件 . cp(复制 创建文件副本
pwd(当前工作目录) 返回您当前所在的位置 . sudo(超级用户的操作 授予更高的管理员权限

任务 1. 启用 Cloud Run API 并配置 shell 环境

  1. 在 Cloud Shell 中,启用 Cloud Run API
gcloud services enable run.googleapis.com
  1. 如果系统提示您授权使用凭据,请进行相应授权。之后,您应看到如下所示的消息提示授权成功:
“operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e”操作已成功完成。 注意:您也可以使用控制台的 API 和服务部分来启用 API。
  1. 设置计算区域:
gcloud config set compute/region {{{project_0.default_region | "REGION"}}}
  1. 创建一个 LOCATION 环境变量:
LOCATION="{{{project_0.default_region | Region}}}"

任务 2. 编写示例应用

在此任务中,您将构建一个基于 Express 的简单 NodeJS 应用来响应 HTTP 请求。

  1. 在 Cloud Shell 中,创建一个名为 helloworld 的新目录,然后切换到该目录:
mkdir helloworld && cd helloworld
  1. 接下来,您需要创建并编辑一些文件。如需修改文件,您可以使用 nano;也可以在 Cloud Shell 中点击打开编辑器按钮来使用 Cloud Shell 的代码编辑器。

  2. 创建一个 package.json 文件,然后向该文件添加以下内容:

nano package.json { "name": "helloworld", "description": "Simple hello world sample in Node", "version": "1.0.0", "main": "index.js", "scripts": { "start": "node index.js" }, "author": "Google LLC", "license": "Apache-2.0", "dependencies": { "express": "^4.17.1" } }

请务必注意,上面的文件包含一个 start 脚本命令和一个 Express Web 应用框架依赖项。

  1. 按下 CTRL+X 键,然后按 Y 键和 Enter 键以保存 package.json 文件。

  2. 接下来,在同一目录中,创建 index.js 文件,并将下面的代码复制到该文件中:

nano index.js const express = require('express'); const app = express(); const port = process.env.PORT || 8080; app.get('/', (req, res) => { const name = process.env.NAME || 'World'; res.send(`Hello ${name}!`); }); app.listen(port, () => { console.log(`helloworld: listening on port ${port}`); });

这段代码会创建一个基本 Web 服务器,监听由 PORT 环境变量定义的端口。您的应用现已编写完毕,可以将其容器化并上传到 Artifact Registry。

  1. 按下 CTRL+X 键,然后按 Y 键和 Enter 键以保存 index.js 文件
注意:您也可以使用诸多其他编程语言来探索如何开始使用 Cloud Run。您可以在快速入门指南中找到关于 Go、Python、Java、PHP、Ruby 和 Shell 脚本等的说明。

任务 3. 容器化该应用并将其上传到 Artifact Registry

  1. 如需将示例应用容器化,请在与源文件相同的目录中创建一个名为 Dockerfile 的新文件,并向该文件添加下面的内容:
nano Dockerfile # 使用官方轻量级 Node.js 12 映像。 # https://hub.docker.com/_/node FROM node:12-slim # 创建应用目录并切换到该目录。 WORKDIR /usr/src/app # 将应用依赖项清单复制到容器映像。 # 这里会用到一个通配符,确保 package.json 和 package-lock.json(如有)都能得到复制。 # 首先进行这项复制,这样就不需要在后续每次更改代码时都重新运行 npm install。 COPY package*.json ./ # 安装生产依赖项。 # 如果您添加了 package-lock.json,则可以改用“npm ci”来加快构建速度。 # RUN npm ci --only=production RUN npm install --only=production # 将本地代码复制到容器映像。 COPY . ./ # 在容器启动时运行该 Web 服务。 CMD [ "npm", "start" ]
  1. 按下 CTRL+X 键,然后按 Y 键和 Enter 键以保存 Dockerfile 文件。

  2. 接下来,在包含 Dockerfile 的目录中运行以下命令,使用 Cloud Build 构建容器映像。(请注意命令中的 $GOOGLE_CLOUD_PROJECT 环境变量,该变量包含您的实验的项目 ID):

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Cloud Build 服务可助您在 Google Cloud 上执行构建。该服务会执行一系列构建步骤,每个步骤都在 Docker 容器中运行,以此生成您的应用容器(或其他工件)并将其推送到 Artifact Registry,全部操作只需一个命令即可完成。

推送到注册表后,您会看到一则包含映像名称 (gcr.io/[PROJECT-ID]/helloworld) 的消息,指示推送成功。该映像存储在 Artifact Registry 中,并可根据需要重复使用。

  1. 使用下面的命令列出与您的当前项目关联的所有容器映像:
gcloud container images list
  1. gcloud 注册为 Google 支持的所有 Docker 注册表的凭据帮助程序:
gcloud auth configure-docker 注意:系统可能会提示您:Do you want to continue? (y/N)?(是否要继续)。如果您同意继续,请输入 Y
  1. 如需通过 Cloud Shell 在本地运行并测试应用,请使用下面的标准 docker 命令启动该应用:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
  1. 在 Cloud Shell 窗口中,点击网页预览并选择在端口 8080 上预览

这应该会打开一个显示“Hello World!”消息的浏览器窗口。您也可以直接使用 curl localhost:8080

任务 4. 部署到 Cloud Run

  1. 使用下面的命令,添加您的项目 ID,将容器化应用部署到 Cloud Run:
gcloud run deploy --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld --allow-unauthenticated --region=$LOCATION

上面命令中的 allow-unauthenticated 标志让您的服务可公开访问。

  1. 出现提示时,按 Enter 键确认 service name
注意:系统可能会提示您:Do you want enable these APIs to continue (this will take a few minutes)? (y/N)?(是否要启用这些 API 以继续操作 [这可能需要几分钟时间])。如果您同意,请输入 Y 以启用所需的 API。

等待部署完成。

成功部署后,命令行中便会显示该服务的网址:

Service [helloworld] revision [helloworld-00001-xit] has been deployed and is serving 100 percent of traffic. Service URL: https://helloworld-h6cp412q3a-uc.a.run.app

现在,您可以在任何浏览器窗口中打开该服务网址,访问您部署的容器。

恭喜!您刚刚将容器映像中封装的应用部署到了 Cloud Run。Cloud Run 可以对您的容器映像进行自动横向扩容以处理收到的请求,并在需求减少时缩容。在您自己的环境中,您只需为在处理请求期间消耗的 CPU、内存和网络资源付费。

在本实验中,您使用的是 gcloud 命令行;当然,您也可以通过 Cloud 控制台来使用 Cloud Run。

  • 导航菜单的“无服务器”部分中,点击 Cloud Run,系统应该会列出您的 helloworld 服务:

显示 helloworld 服务的 Cloud Run 标签页

任务 5. 清理

虽然 Cloud Run 不会针对未使用的服务收费,但您可能仍然需要为您构建的容器映像支付存储费用。

  1. 为避免产生费用,您可以删除您的 Google Cloud 项目,让系统停止对该项目中使用的所有资源计费;您也可以使用下面的命令直接删除您的 helloworld 映像:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
  1. 在系统提示您继续时,输入 Y 并按 Enter 键。

  2. 如需删除 Cloud Run 服务,请使用下面的命令:

gcloud run services delete helloworld --region={{{project_0.default_region | "REGION"}}}
  1. 在系统提示您继续时,输入 Y 并按 Enter 键。

结束实验

完成实验后,请点击结束实验。Google Cloud Skills Boost 会移除您使用过的资源并为您清理帐号。

系统会提示您为实验体验评分。请选择相应的星级数,输入评论,然后点击提交

星级数的含义如下:

  • 1 颗星 = 非常不满意
  • 2 颗星 = 不满意
  • 3 颗星 = 一般
  • 4 颗星 = 满意
  • 5 颗星 = 非常满意

如果您不想提供反馈,可以关闭该对话框。

如果要留言反馈、提出建议或做出更正,请使用支持标签页。

恭喜!

您已完成本实验!

后续步骤/了解详情

如需详细了解如何使用源代码构建适用于 Cloud Run 的无状态 HTTP 容器,以及如何将其推送到 Artifact Registry,请查看下面的内容:

版权所有 2020 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您