本页面适用于 Apigee 和 Apigee Hybrid。
查看
Apigee Edge 文档。
本页面介绍了如何使用 YAML 将 API 代理定义为 Apigee 功能模板,并使用 Google Cloud CLI 部署该模板。您首先构建一个简单的代理,然后构建一个更完整的示例,该示例位于 Gemini 模型的前端。
如需了解背景信息,请参阅 使用 YAML 配置代理。如需查看完整架构,请参阅 API 代理 YAML 配置参考。
准备工作
- 在 Google Cloud 项目中启用 Vertex AI API ,以便代理可以与 Gemini 模型通信。
gcloud services enable aiplatform.googleapis.com
- 安装并初始化 Google Cloud CLI。
- 如需使用本教程中使用的命令,请安装 gcloud beta 组件:
gcloud components install beta
- 拥有 Apigee 组织和至少一个环境。记下 组织和环境名称;示例使用 ORG 和 ENV 作为占位符。第 2 部分中的 AI 网关还需要 Intermediate 或 Comprehensive 环境(而不是 Base 环境);请参阅 Apigee 环境类型。
- 确保您拥有所需的权限:
- 如需导入(创建)API 代理:API 管理员 角色
(
roles/apigee.apiAdmin),或授予apigee.proxies.create的等效角色。 - 如需部署 API 代理:Environment Admin (
roles/apigee.environmentAdmin) 目标环境中的,以及项目级层的 API Reader (roles/apigee.apiReaderV2)。 - 如需创建在第 2 部分第 6 步中生成 API 密钥的 API 产品、开发者和应用:API 管理员 (
roles/apigee.apiAdmin) 和Developer Admin (roles/apigee.developerAdmin)。如需查看完整角色列表,请参阅Apigee 角色。
- 如需导入(创建)API 代理:API 管理员 角色
(
第 1 部分:创建简单的 API 代理
在本部分中,您将创建一个代理,该代理会将请求转发到 Apigee 模拟目标服务并强制执行速率限制。
第 1 步:创建模板
模板是您部署的文件。它定义了代理的基本路径、路由和后端目标,并列出了要包含的功能。
为代理创建一个目录,然后创建一个名为 hello-proxy.yaml 的文件:
gateway: apigee schemaVersion: 1.0.0 name: hello-proxy type: template description: A simple proxy to the Apigee mock target, protected by a rate limit. features: - spike-arrest.yaml endpoints: - name: default basePath: /hello routes: - name: default target: default targets: - name: default url: https://mocktarget.apigee.net
此模板定义了以下内容:
- 基本路径为
/hello的端点 。客户端在此路径调用代理。 - 将请求发送到名为
default的路由 。 - 指向后端网址的目标 。
- 一个 功能,
spike-arrest.yaml,您将在下一步中创建该功能 。
第 2 步:创建功能
功能是包含政策的可重复使用的配置单元。模板无法直接包含政策,因此速率限制政策位于功能中。
在与模板相同的目录中,创建一个名为 spike-arrest.yaml 的文件:
gateway: apigee schemaVersion: 1.0.0 name: spike-arrest displayName: Spike Arrest type: feature description: Protects the backend by smoothing traffic spikes. categories: - traffic parameters: - name: RATE displayName: RATE description: Maximum request rate, for example 30ps (per second) or 100pm (per minute). default: 30ps examples: - 30ps - 100pm defaultEndpoint: name: default flows: - name: PreFlow mode: Request steps: - name: SA-SpikeArrest policies: - name: SA-SpikeArrest type: SpikeArrest content: SpikeArrest: metadata: name: SA-SpikeArrest enabled: "true" continueOnError: "false" DisplayName: SA-SpikeArrest Rate: "{RATE}"
此功能:
- 定义了限制请求速率的 SpikeArrest 政策。
- 使用
defaultEndpoint.flows将政策添加到请求 PreFlow,以便该政策在每个请求上运行。 - 声明了一个 形参
RATE,在编译代理时,其默认值 (30ps) 将替换为{RATE}。
第 3 步:导入代理
导入模板以创建 API 代理修订版本。从包含文件的目录运行以下命令:
gcloud beta apigee apis import hello-proxy \
--from-template=hello-proxy.yaml \
--organization=ORGCLI 会将模板及其功能编译到 API 代理软件包中,上传该软件包,并输出新的代理修订版本。导入会创建修订版本,但不会部署该修订版本。
第 4 步:部署代理
将修订版本部署到环境:
gcloud apigee apis deploy \
--api=hello-proxy \
--environment=ENV \
--organization=ORG默认情况下,此命令会部署最新修订版本。如需部署特定
修订版本,请将其编号作为第一个实参传递,例如
gcloud apigee apis deploy 1 --api=hello-proxy --environment=ENV。
如果已在同一基本路径下部署了其他代理,请添加 --override 以零停机时间替换该代理。
第 5 步:调用代理
如需通过网络调用已部署的代理,您的环境必须附加到具有可路由主机名的环境组。 如果您刚刚 创建了组织,请在调用代理之前确认已完成此设置;请参阅 环境和环境组简介。
查找包含您的环境的环境组的主机名:
- 在 Google Cloud 控制台中,前往 Apigee > 管理 > 环境。
- 选择环境组 标签页。
- 找到包含您的环境的环境组,并从其主机名 列中复制一个 值。
使用模板中的基本路径在该主机名处调用代理:
curl https://HOSTNAME/hello
将 HOSTNAME 替换为您复制的主机名。成功的响应来自模拟目标服务。
第 2 部分:为 Gemini 构建 AI 网关
本部分构建了一个更完整的代理:AI 网关,该网关会将请求转发到 Vertex AI 上的 Gemini 模型,强制执行速率限制,并需要 API 密钥。它使用一个模板、三个功能和一个服务帐号。
与第 1 部分中的简单代理不同,此代理
会调用 Google Cloud 服务 (Vertex AI)。gemini-target 功能使用 auth: GoogleAccessToken,因此 Apigee 会将 Google OAuth 令牌附加到对 Vertex AI 的每个请求。该令牌是为您创建的
服务账号颁发的,然后在部署
代理时提供,因此本部分添加了一个步骤来创建该服务帐号
(第 3 步)。
第 1 步:创建模板
创建一个名为 ai-gateway.yaml 的文件:
gateway: apigee schemaVersion: 1.0.0 name: ai-gateway type: template description: AI gateway that fronts a Gemini model with throttling and API key enforcement. features: - spike-arrest.yaml - verify-api-key.yaml - gemini-target.yaml endpoints: - name: gemini basePath: /v1/gemini routes: - name: default target: gemini
第 2 步:创建功能
在同一目录中,创建三个功能文件。
重复使用第
1 部分中的 spike-arrest.yaml 功能。
创建 verify-api-key.yaml 以在 x-api-key 标头中要求提供 API 密钥:
gateway: apigee schemaVersion: 1.0.0 name: verify-api-key displayName: Verify API Key type: feature description: Requires a valid API key in the x-api-key request header. categories: - security defaultEndpoint: name: default flows: - name: PreFlow mode: Request steps: - name: VA-VerifyAPIKey policies: - name: VA-VerifyAPIKey type: VerifyAPIKey content: VerifyAPIKey: metadata: name: VA-VerifyAPIKey enabled: "true" continueOnError: "false" DisplayName: VA-VerifyAPIKey APIKey: metadata: ref: request.header.x-api-key
创建 gemini-target.yaml 以路由到 Gemini 模型,并使用 Google 访问令牌进行身份验证:
gateway: apigee schemaVersion: 1.0.0 name: gemini-target displayName: Gemini Target type: feature description: Routes requests to a Gemini model on Vertex AI, authenticated with a Google access token. categories: - llm targets: - name: gemini url: https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/publishers/google/models/gemini-2.5-flash:generateContent auth: GoogleAccessToken scopes: - https://www.googleapis.com/auth/cloud-platform
将 PROJECT_ID 替换为您的 Google Cloud 项目 ID,并将 REGION 替换为您使用的 Vertex AI 区域(例如 us-central1)。此功能
使用 auth: GoogleAccessToken,以便 Apigee 将
Google 访问令牌附加到对 Vertex AI 的每个请求。
并非每个位置都有模型,并且网址取决于您使用的位置。前面的网址是区域形式,适用于从特定区域(例如 us-central1 中的 gemini-2.5-flash)提供的模型。 其他模型仅从全局端点提供,该端点使用不同的主机和 locations/global:
url: https://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/MODEL:generateContent
如需查找模型支持的位置,请参阅 Vertex AI 上的生成式 AI 位置。
第 3 步:为代理创建服务帐号
由于 gemini-target 功能使用 auth: GoogleAccessToken,因此部署的代理会以服务账号的形式调用 Vertex AI。 创建该服务帐号,授予其对 Vertex AI 的访问权限,并允许 Apigee 服务代理使用该服务账号。您将在第 5 步中部署代理时提供此服务
账号。如需了解
详情,请参阅
使用 Google
身份验证。
- 在与 Apigee 组织相同的 Google Cloud 项目中创建用户代管式服务账号。(系统不接受 Compute Engine 默认服务帐号
。)如需了解创建服务账号的其他方法,请参阅
创建
和管理服务账号。
gcloud iam service-accounts create SA_NAME \ --project=PROJECT_ID \ --display-name="Apigee AI gateway"这会创建服务帐号
SA_NAME@PROJECT_ID.。 - 授予服务帐号对其调用的后端的访问权限。对于 Vertex AI
目标,请授予 Vertex AI User 角色
(
roles/aiplatform.user):gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SA_NAME@PROJECT_ID." \ --role="roles/aiplatform.user"如果项目的 IAM 政策已包含条件角色绑定,请向此命令添加
--condition=None。 - 通过向服务账号授予 Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator),让 Apigee 服务代理为服务帐号生成令牌:gcloud iam service-accounts add-iam-policy-binding \ SA_NAME@PROJECT_ID. \ --project=PROJECT_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee." \ --role="roles/iam.serviceAccountTokenCreator"如需查找 PROJECT_NUMBER,请运行
gcloud projects describe PROJECT_ID --format='value(projectNumber)'。
第 4 步:导入代理
导入模板以创建 API 代理修订版本:
gcloud beta apigee apis import ai-gateway \
--from-template=ai-gateway.yaml \
--organization=ORG记下命令输出中的修订版本号;您将在
第 5 步中需要用到它。如需仅输出修订版本号,请向导入命令添加 --format="value(revision)"。
第 5 步:使用服务帐号部署代理
部署 AI 网关与 第 1 部分中的简单代理在以下两个方面有所不同:
- 您必须提供 在
第 3 步中创建的服务账号。如果您在没有服务账号的情况下进行部署,则
部署会失败并显示
MISSING_SERVICE_ACCOUNT错误。 - 您必须部署到 Intermediate 或 Comprehensive 环境。
此代理使用可扩展政策,Base 环境不支持该政策;部署到该环境会失败并显示错误
Extensible proxy can not be deployed to a base environment
。请参阅 Apigee 环境类型。
Apigee 界面 :部署代理,并在系统提示您输入服务帐号时
输入
SA_NAME@PROJECT_ID.
。如需了解相关步骤,请参阅
部署 API
代理。
Deployment API:调用
Deployments
API,并将服务帐号作为 serviceAccount 查询
参数传递。将 REVISION 替换为第
4 步中的修订版本号:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -X POST \ "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/apis/ai-gateway/revisions/REVISION/deployments?serviceAccount=SA_NAME@PROJECT_ID."
部署请求会立即返回;部署是异步的。轮询修订版本的部署状态,该状态会报告 PROGRESSING,直到变为 READY:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/apis/ai-gateway/revisions/REVISION/deployments"
编译代理时,spike-arrest 和 verify-api-key 功能会将其政策添加到请求 PreFlow(先进行速率限制,然后进行 API 密钥检查),并且 gemini-target 功能会添加 Vertex AI 后端。部署完成后,代理会以您的服务帐号身份向 Vertex AI 进行身份验证。
第 6 步:获取 API 密钥
verify-api-key 功能会拒绝任何未携带有效 API 密钥的请求,因此您需要先获取密钥,然后才能调用代理。API
密钥是与包含此代理的
API 产品关联的开发者应用的凭据。完成以下任务,这些任务
在
发布
概览中进行了说明:
- 创建
一个 API 产品,其中包含
ai-gateway代理以及您将该代理部署到的环境。 - 注册 应用开发者。
- 注册 与该 API 产品关联的开发者应用。
注册应用会生成密钥。如需检索该密钥,请参阅 查看 API 密钥和 Secret。
第 7 步:调用代理
按照
第 1 部分第 5 步中的说明查找环境组的主机名,然后在基本路径
/v1/gemini处调用代理。在 x-api-key 标头中传递 API 密钥,
并发送 Gemini
generateContent
请求正文:
curl -X POST https://HOSTNAME/v1/gemini \
-H "x-api-key: API_KEY" \
-H "Content-Type: application/json" \
-d '{"contents":[{"role":"user","parts":[{"text":"Say hello in one sentence."}]}]}'将 HOSTNAME 替换为您的环境组主机名,并将
API_KEY 替换为 第 6 步 中的密钥。成功的响应是模型的 JSON 输出。省略密钥会从 VerifyAPIKey 政策返回授权失败,这证实了 verify-api-key 功能已生效。如需了解传递密钥的其他方法,请参阅
使用有效的 API 密钥提交请求。