arrow_back

Hello Cloud Run

登录 加入
欢迎加入我们的社区,一起测试和分享您的知识!

Hello Cloud Run

实验 1 小时 universal_currency_alt 5 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
欢迎加入我们的社区,一起测试和分享您的知识!

概览

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”按钮。

  2. 点击继续

预配并连接到环境需要一些时间。如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 PROJECT_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. 如果系统提示您授权使用凭据,请进行相应授权。之后,您应该会看到如下所示的消息,指出授权成功:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully. 注意:您也可以使用控制台的 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 服务:

任务 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 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

Before you begin

  1. Labs create a Google Cloud project and resources for a fixed time
  2. Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
  3. On the top left of your screen, click Start lab to begin

此内容目前不可用

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

太好了!

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

One lab at a time

Confirm to end all existing labs and start this one

Use private browsing to run the lab

Use an Incognito or private browser window to run this lab. This prevents any conflicts between your personal account and the Student account, which may cause extra charges incurred to your personal account.