arrow_back

API Gateway:Qwik Start

登录 加入
访问 700 多个实验和课程

API Gateway:Qwik Start

实验 1 小时 universal_currency_alt 1 个积分 show_chart 入门级
info 此实验可能会提供 AI 工具来支持您学习。
访问 700 多个实验和课程

GSP872

Google Cloud 自学实验的徽标

概览

借助 API Gateway,您可以通过设计规范且在所有服务中保持统一的 REST API,为外部访问您的服务提供安全保障 - 无论这些服务的具体实现方式如何。统一的 API 具有以下优势:

  • 便于应用开发者调用您的服务。
  • 您可以更改后端服务的实现方式,而不会对公共 API 造成影响。
  • 您能充分利用 Google Cloud 内置的扩缩、监控及安全功能。

在本实验中,您将在 API Gateway 上部署一个 API,以保障后端服务的流量安全。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。

如何开始实验并登录 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 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。 “导航菜单”图标和“搜索”字段

激活 Cloud Shell

Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。

  1. 点击 Google Cloud 控制台顶部的激活 Cloud Shell “激活 Cloud Shell”图标

  2. 在弹出的窗口中执行以下操作:

    • 继续完成 Cloud Shell 信息窗口中的设置。
    • 授权 Cloud Shell 使用您的凭据进行 Google Cloud API 调用。

如果您连接成功,即表示您已通过身份验证,且项目 ID 会被设为您的 Project_ID 。输出内容中有一行说明了此会话的 Project_ID

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

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

  1. (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
  1. 点击授权

输出:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (可选)您可以通过此命令列出项目 ID:
gcloud config list project

输出:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南

设置区域

设置本实验的项目区域:

gcloud config set compute/region {{{project_0.default_region | "REGION"}}}

启用所需的 API

  1. 在 Cloud 控制台的导航菜单 (“导航菜单”图标) 中,依次点击 API 和服务 > 库

  2. 搜索栏中开始输入“api gateway”,然后选择 API Gateway API 功能块。

  3. 在随即显示的屏幕上,点击启用按钮。

任务 1. 部署 API 后端

API Gateway 位于已部署后端服务的前面,负责处理所有传入请求。在本实验中,API Gateway 会将传入的调用路由到名为 helloGET 的 Cloud Functions 后端,该后端包含如下所示的函数:

/** * HTTP Cloud Function. * This function is exported by index.js, and is executed when * you make an HTTP request to the deployed function's endpoint. * * @param {Object} req Cloud Function request context. * More info: https://expressjs.com/en/api.html#req * @param {Object} res Cloud Function response context. * More info: https://expressjs.com/en/api.html#res */ exports.helloGET = (req, res) => { res.send('Hello World!'); };
  1. 在 Cloud 控制台中,克隆 Cloud Functions 示例代码库:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
  1. 切换到包含 Cloud Functions 函数示例代码的目录:
cd nodejs-docs-samples/functions/helloworld/helloworldGet
  1. 如需部署带有 HTTP 触发器的函数,请在包含函数文件的目录中运行以下命令:
gcloud functions deploy helloGET --runtime nodejs20 --trigger-http --allow-unauthenticated --region {{{project_0.default_region | "REGION"}}}
  • 如果系统询问您是否启用 API,请输入 Y
注意:如果系统提示您授权 gcloud 命令使用您的凭证,请点击授权。Cloud Functions 函数的部署过程需要几分钟时间。请等待操作完成后再继续下一步 警告:如果您收到 IamPermissionDeniedException 错误,请重新运行上述命令。

点击检查我的进度以验证是否完成了以下目标: 部署 API 后端

任务 2. 测试 API 后端

  1. 当函数部署完毕后,请记下 httpsTrigger 的网址属性值,或使用以下命令查找该属性的值:
gcloud functions describe helloGET --region {{{project_0.default_region | "REGION"}}}

输出应类似于以下网址,其中 PROJECT_ID 是您的项目对应的值。

  1. 将 PROJECT_ID 设置为变量:
export PROJECT_ID={{{project_0.project_id}}}
  1. 访问该网址以调用 Cloud Functions 函数。您应该会看到函数返回了 Hello World! 消息:
curl -v https://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET

点击检查我的进度以验证是否完成了以下目标: 测试 API 后端

创建 API 定义

API Gateway 通过 API 定义将调用路由到后端服务。您可以使用包含专用注解的 OpenAPI 规范来定义期望的 API Gateway 行为。本快速入门的 OpenAPI 规范包含针对 Cloud Functions 函数后端的路由指令:

  1. 在 Cloud Shell 中,返回到您的主目录:
cd ~
  1. 创建名为 openapi2-functions.yaml 的新文件:
touch openapi2-functions.yaml
  1. 复制下面显示的 OpenAPI 规范内容并粘贴到新创建的文件中:
# openapi2-functions.yaml swagger: '2.0' info: title: API_ID description description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: https://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET responses: '200': description: A successful response schema: type: string
  1. 设置以下环境变量:
export API_ID="hello-world-$(cat /dev/urandom | tr -dc 'a-z' | fold -w ${1:-8} | head -n 1)"
  1. 运行以下命令,在 OpenAPI 规范文件中替换上一步设置的变量:
sed -i "s/API_ID/${API_ID}/g" openapi2-functions.yaml sed -i "s/PROJECT_ID/$PROJECT_ID/g" openapi2-functions.yaml

任务 3. 创建网关

现在,您可以在 API Gateway 上创建和部署网关了。

  1. 在顶部的搜索栏中,输入 API Gateway,然后从显示的选项中选择该服务。

  2. 点击创建网关。接下来,在 API 部分:

  • 确保将选择 API 下拉菜单设置为创建新的 API
  • 显示名称字段中,输入 Hello World API
  • 运行以下命令再次获取 API ID,并在 API ID 字段中输入该 ID:
export API_ID="hello-world-$(cat /dev/urandom | tr -dc 'a-z' | fold -w ${1:-8} | head -n 1)" echo $API_ID
  1. API 配置部分:
  • 确保将选择配置下拉菜单设置为创建新的 API 配置
  • 执行以下操作,以上传之前创建的 openapi2-functions.yaml 文件。
  1. 在 Cloud Shell 中,运行以下命令:
cloudshell download $HOME/openapi2-functions.yaml
  1. 点击下载
注意:文件 openapi2-functions.yaml 现已下载到您的本地机器。
  1. 选择浏览,然后从浏览器的下载位置选择该文件:
  • 显示名称字段中输入 Hello World Config
  • 确保将选择服务账号下拉菜单设置为 Compute Engine 默认服务账号
  1. 网关详情部分:
  • 显示名称字段中,输入 Hello Gateway
  • 位置下拉菜单设置为
  1. 点击创建网关
注意:创建网关操作需要几分钟(约 10 分钟)才能完成。如需查看创建和部署过程的状态,您可以点击主导航栏中的“通知”图标以显示状态通知,如下图所示。请确保图标状态旁边有绿色对勾标记,然后再继续操作。

点击检查我的进度以验证是否完成了以下目标: 创建网关

测试您的 API 部署

现在,您可以使用部署网关时生成的网址向您的 API 发送请求。

  1. 在 Cloud Shell 中,输入以下命令以获取 API Gateway 托管的新建 API 的 GATEWAY_URL
export GATEWAY_URL=$(gcloud api-gateway gateways describe hello-gateway --location {{{project_0.default_region | "REGION"}}} --format json | jq -r .defaultHostname)
  1. 运行以下命令,确保设置了 GATEWAY_URL 环境变量:
echo $GATEWAY_URL

如果未设置,则表示您需要等待更长时间才能完成 API 网关的部署。

  1. 运行以下 curl 命令,并验证返回的响应是否为 Hello World!
curl -s -w "\n" https://$GATEWAY_URL/hello

任务 4. 使用 API 密钥保障访问安全

如需保障您 API 后端的访问安全,可以生成一个与您项目关联的 API 密钥,并授权该密钥拥有调用您 API 的权限。如需创建 API 密钥,您必须执行以下操作:

  1. 在 Cloud 控制台中,依次点击 API 和服务 > 凭证
  2. 选择创建凭证,然后从下拉菜单中选择 API 密钥API 密钥已创建对话框中会显示您新建的密钥。

“创建凭证”下拉菜单

点击检查我的进度以验证是否完成了以下目标: 使用 API 密钥保障访问安全

  1. 从对话框中复制 API 密钥,然后点击关闭

  2. 运行以下命令,将 API 密钥值存储在 Cloud Shell 中:

export API_KEY=REPLACE_WITH_COPIED_API_KEY

接下来,为您的服务启用 API 密钥支持。

  1. 在 Cloud Shell 中,使用以下命令获取您刚才创建的托管式服务的名称:
MANAGED_SERVICE=$(gcloud api-gateway apis list --format json | jq -r .[0].managedService | cut -d'/' -f6) echo $MANAGED_SERVICE
  1. 然后,使用您刚才创建的 API 的托管式服务名称,运行以下命令来为该服务启用 API 密钥支持:
gcloud services enable $MANAGED_SERVICE

修改 OpenAPI 规范以利用 API 密钥安全机制

在此部分,您需要修改已部署 API 的 API 配置,以对所有流量强制实施 API 密钥验证安全政策。

  1. 在以如下方式创建的新文件 openapi2-functions2.yaml中,添加 security 类型和 securityDefinitions 部分:
touch openapi2-functions2.yaml
  1. 复制下面显示的 OpenAPI 规范内容并粘贴到新创建的文件中:
# openapi2-functions.yaml swagger: '2.0' info: title: API_ID description description: Sample API on API Gateway with a Google Cloud Functions backend version: 1.0.0 schemes: - https produces: - application/json paths: /hello: get: summary: Greet a user operationId: hello x-google-backend: address: https://{{{project_0.default_region | "REGION"}}}-{{{project_0.project_id | "PROJECT_ID"}}}.cloudfunctions.net/helloGET security: - api_key: [] responses: '200': description: A successful response schema: type: string securityDefinitions: api_key: type: "apiKey" name: "key" in: "query"
  1. 运行以下命令,在 OpenAPI 规范文件中替换上一步设置的变量:
sed -i "s/API_ID/${API_ID}/g" openapi2-functions2.yaml sed -i "s/PROJECT_ID/$PROJECT_ID/g" openapi2-functions2.yaml
  1. 下载更新后的 API 规范文件,您将在下一步中使用该文件来更新网关配置:
cloudshell download $HOME/openapi2-functions2.yaml
  1. 点击下载

任务 5. 创建新 API 配置并将其部署到现有网关

  1. 在 Cloud 控制台中打开 API Gateway 页面。(点击导航菜单 > API Gateway。)
  2. 从列表中选择您的 API 以查看详细信息。
  3. 选择网关标签页。
  4. 从可用网关列表中选择 Hello Gateway
  5. 点击“网关”页面顶部的修改
  6. API 配置下,将下拉菜单的值更改为创建新的 API 配置
  7. 点击上传 API 规范输入框中的浏览,然后选择 openapi2-functions2.yaml 文件。
  8. 显示名称字段中输入 Hello Config
  9. 选择服务账号下拉菜单中,选择 Qwiklabs User Service Account
  10. 点击更新
注意:更新网关操作可能需要几分钟才能完成。如需查看创建和部署过程的状态,您可以点击主导航栏中的“通知”图标以显示状态通知,如下图所示。请确保图标状态旁边有绿色对勾标记,然后再继续操作。

点击检查我的进度以验证是否完成了以下目标: 创建新 API 配置并将其部署到现有网关

任务 6. 使用 API 密钥测试调用

  1. 运行以下命令,使用 API 密钥进行测试:
export GATEWAY_URL=$(gcloud api-gateway gateways describe hello-gateway --location {{{project_0.default_region | "REGION"}}} --format json | jq -r .defaultHostname) curl -sL $GATEWAY_URL/hello

由于 curl 调用中未提供 API 密钥,因此您应该会看到类似以下错误的响应: UNAUTHENTICATED:Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.

  1. 结合 key 查询参数运行以下 curl 命令,并使用之前创建的 API 密钥来调用 API:
curl -sL -w "\n" $GATEWAY_URL/hello?key=$API_KEY

如果您未设置 API_KEY 环境变量,可以从左侧菜单中依次点击 API 和服务 > 凭证,获取 API 密钥。该密钥将显示在 API 密钥部分。

现在,API 返回的响应应该是 Hello World!

注意:您可能需要运行此命令多次才能获得所需的结果。

点击检查我的进度以验证是否完成了以下目标: 使用 API 密钥测试调用

恭喜!

您已成功通过 API Gateway 保护 API 后端。现在,您可以着手生成其他 API 密钥,来对新的 API 客户端进行初始配置。

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

本手册的最后更新时间:2024 年 10 月 9 日

本实验的最后测试时间:2024 年 10 月 9 日

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

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

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

太好了!

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

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

请使用无痕模式或无痕式浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。