GSP906

概览
在本实验中,您将学习如何向 Apigee X 组织添加新的环境和环境组。
“环境”是 API 代理的运行时执行上下文。API 代理必须先部署到环境中,然后它所公开的 API 才能通过网络进行访问。
“环境组”是对环境进行的逻辑分组。主机名是在环境组层级上定义的,Apigee 会根据主机名将请求路由到该组中的具体环境。然后,该请求将由部署到环境组中的一个环境且具有匹配基本路径的 API 代理来处理。
本实验中的说明同样适用于向付费组织添加环境和环境组。
目标
在本实验中,您将学习如何执行以下任务:
- 向 Apigee X 组织添加第二个环境
- 向 Apigee X 组织添加第二个环境组,并为其分配环境和主机名
- 将环境部署到运行时实例
- 在每个环境中部署并调用 API 代理
设置和要求
点击“开始实验”按钮前的注意事项
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。为此,我们会向您提供新的临时凭据,您可以在该实验的规定时间内通过此凭据登录和访问 Google Cloud。
为完成此实验,您需要:
- 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式(推荐)或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
注意:请仅使用学生账号完成本实验。如果您使用其他 Google Cloud 账号,则可能会向该账号收取费用。
如何开始实验并登录 Google Cloud 控制台
-
点击开始实验按钮。如果该实验需要付费,系统会打开一个对话框供您选择支付方式。左侧是“实验详细信息”窗格,其中包含以下各项:
- “打开 Google Cloud 控制台”按钮
- 剩余时间
- 进行该实验时必须使用的临时凭据
- 帮助您逐步完成本实验所需的其他信息(如果需要)
-
点击打开 Google Cloud 控制台(如果您使用的是 Chrome 浏览器,请右键点击并选择在无痕式窗口中打开链接)。
该实验会启动资源并打开另一个标签页,显示“登录”页面。
提示:将这些标签页安排在不同的窗口中,并排显示。
注意:如果您看见选择账号对话框,请点击使用其他账号。
-
如有必要,请复制下方的用户名,然后将其粘贴到登录对话框中。
{{{user_0.username | "<用户名>"}}}
您也可以在“实验详细信息”窗格中找到“用户名”。
-
点击下一步。
-
复制下面的密码,然后将其粘贴到欢迎对话框中。
{{{user_0.password | "<密码>"}}}
您也可以在“实验详细信息”窗格中找到“密码”。
-
点击下一步。
重要提示:您必须使用实验提供的凭据。请勿使用您的 Google Cloud 账号凭据。
注意:在本实验中使用您自己的 Google Cloud 账号可能会产生额外费用。
-
继续在后续页面中点击以完成相应操作:
- 接受条款及条件。
- 由于这是临时账号,请勿添加账号恢复选项或双重验证。
- 请勿注册免费试用。
片刻之后,系统会在此标签页中打开 Google Cloud 控制台。
注意:如需访问 Google Cloud 产品和服务,请点击导航菜单,或在搜索字段中输入服务或产品的名称。
激活 Cloud Shell
Cloud Shell 是一种装有开发者工具的虚拟机。它提供了一个永久性的 5GB 主目录,并且在 Google Cloud 上运行。Cloud Shell 提供可用于访问您的 Google Cloud 资源的命令行工具。
-
点击 Google Cloud 控制台顶部的激活 Cloud Shell
。
-
在弹出的窗口中执行以下操作:
- 继续完成 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 自动补全功能。
- (可选)您可以通过此命令列出活跃账号名称:
gcloud auth list
- 点击授权。
输出:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (可选)您可以通过此命令列出项目 ID:
gcloud config list project
输出:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需查看在 Google Cloud 中使用 gcloud 的完整文档,请参阅 gcloud CLI 概览指南。
打开 Apigee 控制台
如需打开 Apigee 控制台,请执行以下操作:
- 在 Google Cloud 控制台中,在搜索字段中输入
Apigee,然后点击搜索结果中的 Apigee API Management。
Apigee 控制台会随即打开,着陆页会显示指向常用位置的快捷链接。
- 在导航菜单 (
) 中,点击 Apigee 旁边的收藏 (
)。
Apigee 现在已作为收藏项添加到导航菜单中。
任务 1. 检查“eval”环境和环境组
在此任务中,您将使用 Apigee 控制台探索环境和环境组。
Apigee X 的评估组织最初只包含一个名为 eval 的环境,以及一个名为 eval-group 的环境组。“eval”环境是“eval-group”环境组的成员。
- 在 Cloud 控制台中前往 Apigee 界面。
- 前往管理 > 环境。
- 在环境标签页中,点击 eval 环境。
“eval”环境已配置为“eval-group”环境组的成员。
“eval”环境标记为“Ready for deployment”(可以部署),表示可以将 API 代理部署到该环境中。
- 前往管理 > 环境 > 环境组。
- 在 eval-group 环境上,点击三点状图标,然后点击修改。
“eval-group”环境组目前只列出了一个主机名 (eval.example.com),但可以使用多个主机名。
“eval-group”环境组目前只包含“eval”环境这唯一的成员,但一个环境组中可以包含多个环境。
- 点击取消。
任务 2. 创建“prod”环境
在此任务中,您将创建一个新环境。
- 前往管理 > 环境。
- 在环境标签页中,点击 + 创建环境。
- 将显示名称和名称指定为 prod。其他字段应保持不变。
- 点击创建。
您应该会收到一条消息,提示环境已完成定义。新的“prod”环境被标记为正在等待配置。
稍后,您应该会看到一条消息,提示环境已经可以使用,并且该环境将不再被标记为“正在等待配置”。
点击“检查我的进度”以验证是否完成了以下目标:
创建“prod”环境
任务 3. 创建“prod-group”环境组
在此任务中,您将创建一个新环境组。
- 在左侧导航窗格中,依次选择管理 > 环境。
- 在“环境”窗格中,选择环境组,然后点击 + 创建环境组。
- 将该环境组命名为 prod-group。
- 对于主机名,请使用以下名称:
prod.example.com
- 对于环境(可选),请选择 prod,然后点击确定。
- 点击创建。
点击“检查我的进度”以验证是否完成了以下目标:
创建“prod-group”环境组
任务 4. 等待实例预配完成
在此任务中,您将等待 Apigee 评估组织预配完成。
Apigee 组织需要相当长的时间才能完成预配。可以使用 Apigee API 来监控组织的预配进度。
启动监控脚本
- 在右上角的工具栏中,点击激活 Cloud Shell (
)。
- 在系统提示时点击继续。
预配并连接到 Cloud Shell 需要一些时间。在连接成功后,您便通过了身份验证,并且项目已设置为您的“PROJECT_ID”。
- 在 Cloud Shell 中,验证存储有您的 Apigee 组织名称的变量:
echo ${GOOGLE_CLOUD_PROJECT}
GOOGLE_CLOUD_PROJECT 变量应包含您的项目名称,该名称与您的 Apigee 组织名称相同。
-
如果未设置 GOOGLE_CLOUD_PROJECT 变量,请使用类似以下命令手动设置该变量:
export GOOGLE_CLOUD_PROJECT={{{project_0.project_id |Project ID}}}
- 在 Cloud Shell 中运行以下命令:
export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; if [ -z "${GOOGLE_CLOUD_PROJECT}" ]; then echo "Error: GOOGLE_CLOUD_PROJECT environment variable is not set. Please set it to your project ID."; else export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\" or (.environment | endswith(\"/${ENV_NAME}\"))) | .environment" --raw-output); [[ -n "${ATTACHMENT_DONE}" ]] && break; echo -n "."; sleep 5; done; echo; echo "${ENV_NAME} environment attached"; echo "***ORG IS READY TO USE***"; fi
这一系列命令会使用 Apigee API 来确定运行时实例何时完成创建,然后等待“eval”环境被附加到该实例。
- 在系统提示时点击授权。
当屏幕上输出文本 ***ORG IS READY TO USE*** 后,部署到“eval”环境的代理便可以开始接收流量。
注意:在等待实例和环境完全创建完毕期间,请了解不同的 Apigee X 用户和角色。请注意实验剩余时间,并定期检查 Cloud Shell 输出,了解何时可以测试组织。
用户和角色
使用用户和角色可以授予对 Apigee 的访问权限。“用户”代表经过身份验证的账号,这些账号可访问 Apigee 组织以及组织内的实体,如环境和 API 代理。您可为用户授予的能力取决于为他们分配的*角色*类型。
如需向 Apigee 组织添加新用户,您需要先在 Cloud 项目中向该用户账号授予访问权限,然后自行选择在 Apigee 界面中授予访问权限。在 Google Cloud 资源层次结构中的资源层级上授予权限后,该资源下包含的资源将会继承这一权限。
如果在 Cloud 项目层级上向用户分配 Apigee 角色,则该用户可以通过这一角色访问该组织内的所有 Apigee 资源(包括所有环境)。在 Apigee 界面中,还可以向用户分配作用于特定环境的 Apigee 角色。此权限用于补充在项目层级设置的角色。
为了遵循最小权限原则,应在项目层级上为给定的用户指定最小权限,在环境层级上则授予扩展权限。
此图片展示了这种访问模型的权限继承原理:

Apigee 角色
下表汇总了各种预定义的 Apigee 角色。
| Apigee 角色 |
说明 |
| Apigee Org Admin |
对 Apigee 组织中的所有 Apigee 资源拥有完全访问权限。 |
| Apigee Read Only Admin |
对 Apigee 组织中的所有 Apigee 资源拥有只读权限。 |
| Apigee Analytics Editor |
创建和分析 Apigee 组织的 API 代理流量报告。可以修改查询和报告。 |
| Apigee Analytics Viewer |
Apigee Analytics 的使用者。无法修改查询或报告。 |
| Apigee API Admin |
负责创建和测试 API 代理的开发者。 |
| Apigee Environment Admin |
在环境中部署和取消部署 API 代理。 |
| Apigee Developer Admin |
管理开发者对 API 的访问权限。 |
如需详细了解每个 Apigee 角色的 API 权限,请参阅 Apigee 角色指南。
任务 5. 将“prod”环境添加到运行时实例
在此任务中,您会将“prod”环境添加到运行时实例,使部署到“prod”环境的代理能够开始运行。
将“prod”环境附加到实例
- 确认在 Cloud Shell 中运行的命令返回
***ORG IS READY TO USE***。
- 如需开始将“prod”环境附加到运行时这一过程,请运行以下命令:
export INSTANCE_NAME=eval-instance; curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -X POST "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" -d '{ "environment": "prod" }' | jq
如果收到错误消息,请查看该消息的详细信息:
- “NOT_FOUND”错误可能表明未成功创建“prod”环境。
- 如果出现“FAILED_PRECONDITION”错误,并显示消息“the resource is locked by another operation”(资源被另一项操作锁定),表明“eval”环境尚未完全完成预配。
在成功开始将“prod”环境附加到运行时这一过程后,您应该会看到一条状态为“IN_PROGRESS”的返回消息,类似于以下内容:
{
"name": "organizations/qwiklabs-gcp-01-e12f9fd402f4/operations/c4e1a09f-05d2-4c46-95ed-559457507379",
"metadata": {
"@type": "type.googleapis.com/google.cloud.apigee.v1.OperationMetadata",
"operationType": "INSERT",
"targetResourceName": "organizations/qwiklabs-gcp-01-e12f9fd402f4/instances/eval-instance/attachments/c2e04a79-15e6-4656-9d25-f618080b57fb",
"state": "IN_PROGRESS"
}
}
- 使用以下命令检查 prod 环境的附加状态:
export ATTACHING_ENV=prod; export INSTANCE_NAME=eval-instance; echo "waiting for ${ATTACHING_ENV} attachment"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${GOOGLE_CLOUD_PROJECT}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ATTACHING_ENV}\") | .environment" --join-output); [[ "${ATTACHMENT_DONE}" != "${ATTACHING_ENV}" ]] || break; echo -n "."; sleep 5; done; echo; echo "***${ATTACHING_ENV} ENVIRONMENT ATTACHED***";
这一系列命令使用 Apigee API 来确定“prod”环境何时附加到实例,以及部署到“prod”环境的代理何时准备好接收流量。
当屏幕上输出文本 ***prod ENVIRONMENT ATTACHED*** 后,部署到“prod”环境的代理便可以开始接收流量。
让该命令继续运行,您可以接着处理下一个任务。
点击“检查我的进度”以验证是否完成了以下目标:
将“prod”环境附加到实例
任务 6. 创建 API 代理
在此任务中,您将创建一个 API 代理,该代理使用流变量来返回 API 调用的主机名和环境。
- 在 Cloud 控制台中前往 Apigee 界面。
- 在左侧导航菜单中,依次选择代理开发 > API 代理。
- 如需启动代理向导,请点击 + 创建。
- 在代理模板处,选择无目标。
注意:请勿为 OpenAPI 规范模板选择“无目标”。
-
指定以下属性:
| 属性 |
值 |
| 代理名称 |
test-env |
| 基本路径 |
/test-env |
-
点击下一步。
-
其他设置保留默认值,然后点击创建。
系统将生成您的 API 代理。您稍后将部署自己的代理。
- 点击开发标签页。
此标签页用于修改 API 代理。此时已选中代理端点“PreFlow”。
-
在导航菜单中,依次点击代理端点 > PreFlow。
-
在流窗格中,点击响应部分中 PreFlow 旁边的 + 图标。

您将向 PreFlow 响应添加一个政策步骤。政策用于实现一种特定、受限的管理功能。
- 选择创建新政策,然后点击
中介部分中的分配消息,将名称和显示名称指定为 AM-SetResponse,再点击添加。

- 从政策部分中选择 AM-SetResponse。这会将新的 AssignMessage 政策附加到 API 代理。您应该会在“流”窗格下方看到 AssignMessage 代码:

- 将 AssignMessage 代码替换为以下代码:
<AssignMessage continueOnError="false" enabled="true" name="AM-SetResponse">
<Set>
<Payload contentType="application/json">{
"environment": "{environment.name}",
"hostname": "{request.header.Host}"
}
</Payload>
</Set>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>
此政策会创建一个返回环境名称和主机名的响应。在代理流变量 environment.name 中,包含接收到流量的已部署代理的环境,而变量 request.header.Host 中则包含主机标头,该标头指示用于 API 调用的主机名。
-
点击保存。
-
点击部署,然后在环境处选择 eval,再点击部署和确认。
这会将代理部署到“eval”环境中。
- 再次点击部署,然后在环境处选择 prod,再点击部署和确认。

这会将代理部署到“prod”环境。
- 点击概览标签页。
- 等待两个部署完成。
在将代理部署到两个环境后,“概览”标签页的部署部分应如下所示:

注意:如果几分钟后代理仍未部署到“prod”环境,可能表示“prod”环境尚未完成附加到运行时实例这一过程。您可以检查完成状态,为此请返回 Cloud Shell 并等待命令输出“***prod ENVIRONMENT ATTACHED***”。
点击“检查我的进度”以验证是否完成了以下目标:
创建 API 代理
任务 7. 测试“prod”环境和“eval”环境
在此任务中,您将对“text”环境和“prod”环境进行调用。
系统已自动创建一台名为 apigeex-test-vm 的虚拟机。请使用该虚拟机,通过专用 IP 地址调用 Apigee 运行时。
调用 Apigee 运行时
- 在 Cloud Shell 中运行以下命令,打开与虚拟机的 SSH 连接:
TEST_VM_ZONE=$(gcloud compute instances list --filter="name=('apigeex-test-vm')" --format "value(zone)")
gcloud compute ssh apigeex-test-vm --zone=${TEST_VM_ZONE} --force-key-file-overwrite
- 对于出现的每个问题,按 Enter 键或 Return 键来指定默认输入。
您的登录身份是项目的所有者,因此可以通过 SSH 连接到此虚拟机。
您的 Cloud Shell 会话现在正在虚拟机内运行。
- 在虚拟机的 shell 中,设置所需的 shell 变量:
export PROJECT_NAME=$(gcloud config get-value project)
export ORG=${PROJECT_NAME}
export INSTANCE_NAME=eval-instance
export INTERNAL_LB_IP=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/instances/${INSTANCE_NAME}" | jq ".host" --raw-output)
export EVAL_ENVGROUP_HOSTNAME=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/envgroups/eval-group" | jq ".hostnames[0]" --raw-output)
export PROD_ENVGROUP_HOSTNAME=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${ORG}/envgroups/prod-group" | jq ".hostnames[0]" --raw-output)
echo "INTERNAL_LB_IP=${INTERNAL_LB_IP}"
echo "EVAL_ENVGROUP_HOSTNAME=${EVAL_ENVGROUP_HOSTNAME}"
echo "PROD_ENVGROUP_HOSTNAME=${PROD_ENVGROUP_HOSTNAME}"
PROD_ENVGROUP_HOSTNAME 是从您在上一个任务中创建的 prod-group 环境组中获取的。
- 调用 eval 环境中已部署的 test-env API 代理:
curl -i -k --resolve "${EVAL_ENVGROUP_HOSTNAME}:443:${INTERNAL_LB_IP}" \
"https://${EVAL_ENVGROUP_HOSTNAME}/test-env"
--resolve 设置会强制发送到环境组主机名的命令解析为内部负载均衡器的 IP 地址,而不是使用 DNS 来解析 IP 地址。-k 选项会跳过对内部负载均衡器 TLS 证书的验证,因为内部负载均衡器未托管与您使用的主机名相符的 TLS 证书。
您的 curl 命令应该会返回由 test-env 代理生成的响应,内容应如下所示:
HTTP/2 200
content-type: application/json
content-length: 66
date: Tue, 10 Aug 2021 17:02:53 GMT
server: apigee
{
"environment": "eval",
"hostname": "eval.example.com"
}
- 调用 prod 环境中已部署的 test-env API 代理:
curl -i -k --resolve "${PROD_ENVGROUP_HOSTNAME}:443:${INTERNAL_LB_IP}" \
"https://${PROD_ENVGROUP_HOSTNAME}/test-env"
这一次,环境和主机名应该都返回 prod,而不是 eval。
恭喜!
在本实验中,您为组织创建了一个新环境和环境组,并将该环境附加到了运行时实例。然后,您创建并部署了一个 API 代理。最后,您使用 eval 和 prod 主机名调用了该代理,且该 API 代理能够检测出被调用的环境。
后续步骤/了解详情
Google Cloud 培训和认证
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
上次更新手册的时间:2025 年 9 月 23 日
上次测试实验的时间:2025 年 9 月 23 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。