本教程介绍如何配置和部署在 App Engine 柔性环境中的实例上运行的示例 .NET core API 和 Extensible Service Proxy (ESP)。示例代码的 REST API 使用 OpenAPI 规范进行描述。本教程还介绍了如何创建 API 密钥,以及如何在向 API 发送请求时使用此密钥。
如需大致了解 Cloud Endpoints,请参阅关于 Endpoints 和 Endpoints 架构。
获取示例代码
要下载示例 API,请执行以下操作:
以 zip 文件的形式下载示例代码。
将 zip 文件解压缩并切换到
dotnet-docs-samples-master\endpoints\getting-started
目录。使用 Visual Studio 打开
GettingStarted.sln
,或使用您惯用的编辑器修改endpoints\getting-started\src\IO.Swagger
目录中的文件。
配置 Endpoints
示例代码包括 OpenAPI 配置文件 openapi-appengine.yaml
,该文件基于 OpenAPI 规范 v2.0。
- 在示例代码目录中,打开
openapi-appengine.yaml
配置文件。请注意以下事项:
- 配置示例显示了
host
字段附近的几行,您需要修改该字段。要将openapi-appengine.yaml
部署到 Endpoints,您需要完整的 OpenAPI 文档。 - 示例
openapi-appengine.yaml
包含用于配置身份验证的部分(本教程不需要)。您无需使用 YOUR-SERVICE-ACCOUNT-EMAIL 和 YOUR-CLIENT-ID 配置这些行。 - OpenAPI 是一种与语言无关的规范。为方便起见,每种语言的 GitHub 代码库中的
getting-started
示例均包含相同的openapi-appengine.yaml
文件。
- 配置示例显示了
- 在包含
host
字段的行中,将 YOUR-PROJECT-ID 替换为您的 Google Cloud 项目 ID。例如:host: "example-project-12345.appspot.com"
Endpoints 使用 host
字段中配置的文本作为服务名称。将 API 部署到 App Engine 后端时,系统会自动创建名称格式为 YOUR-PROJECT-ID.appspot.com
的 DNS 条目。
如需了解 OpenAPI 文档中 Endpoints 所需的字段,请参阅配置 Endpoints。
部署 Endpoints 配置
如需部署 Endpoints 配置,请使用 gcloud endpoints
services deploy
命令。此命令使用 Service Management 创建一项托管式服务。
如需部署 Endpoints 配置,请执行以下操作:
- 确保您位于
endpoints/getting-started
目录中。 - 上传配置并创建托管式服务:
gcloud endpoints services deploy openapi-appengine.yaml
然后,gcloud
命令会调用 Service Management API,以便使用您在 openapi-appengine.yaml
文件的 host
字段中指定的名称创建托管式服务。Service Management 会根据 openapi-appengine.yaml
文件中的设置来配置服务。如果您对 openapi-appengine.yaml
做出更改,则必须重新部署该文件才能更新 Endpoints 服务。
在创建和配置服务时,Service Management 会向终端输出信息。您尽可忽略有关 openapi-appengine.yaml
文件中的路径未要求使用 API 密钥的警告。完成服务配置后,Service Management 将显示如下所示的消息,其中包含服务配置 ID 和服务名称:
Service Configuration [2017-02-13r0] uploaded for service [example-project-12345.appspot.com]
在上面的示例中,2017-02-13r0
是服务配置 ID,example-project-12345.appspot.com
是 Endpoints 服务。服务配置 ID 由日期戳后跟一个修订版本号组成。如果您在同一天再次部署 openapi-appengine.yaml
文件,服务配置 ID 中的修订版本号将递增。您可以在 Google Cloud 控制台中的 Endpoints > 服务页面上查看 Endpoints 服务配置。
如果您收到错误消息,请参阅排查 Endpoints 配置部署问题。
检查所需服务
Endpoints 和 ESP 至少需要启用以下 Google 服务:姓名 | 标题 |
---|---|
servicemanagement.googleapis.com |
Service Management API |
servicecontrol.googleapis.com |
Service Control API |
在大多数情况下,gcloud endpoints services deploy
命令会启用这些必需的服务。但在以下情况下,gcloud
命令会成功完成,但不启用必需的服务:
您使用了 Terraform 之类的第三方应用,但未添加这些服务。
您将 Endpoints 配置部署到已明确停用这些服务的现有Google Cloud 项目。
使用以下命令确认必需服务是否已启用:
gcloud services list
如果您没有看到列出的必需服务,请启用它们:
gcloud services enable servicemanagement.googleapis.com
gcloud services enable servicecontrol.googleapis.com
同时启用 Endpoints 服务:
gcloud services enable ENDPOINTS_SERVICE_NAME
要确定 ENDPOINTS_SERVICE_NAME,您可以执行以下任一操作:
部署 Endpoints 配置后,转到 Cloud 控制台中的 Endpoints 页面。服务名称列下显示了可能的 ENDPOINTS_SERVICE_NAME 列表。
对于 OpenAPI,ENDPOINTS_SERVICE_NAME 是您在 OpenAPI 规范的
host
字段中指定的值。对于 gRPC,ENDPOINTS_SERVICE_NAME 是您在 gRPC Endpoints 配置的name
字段中指定的值。
如需详细了解 gcloud
命令,请参阅 gcloud
服务。
部署 API 后端
到目前为止,您已将 OpenAPI 文档部署到 Service Management,但尚未部署为 API 后端提供服务的代码。本部分将逐步介绍如何将示例 API 和 ESP 部署到 App Engine。
如需部署 API 后端,请执行以下操作:
- 打开
endpoints/getting-started/src/IO.Swagger/app.yaml
文件,并添加您的服务名称: - 保存
app.yaml
文件。 - 确保您位于
endpoints/getting-started
目录中,即您的openapi-appengine.yaml
配置文件所在的目录中。 - 将示例 API 和 ESP 部署到 App Engine:
将 ENDPOINTS-SERVICE-NAME 替换为 Endpoints 服务的名称。该名称与您在 OpenAPI 文档的 host
字段中配置的名称相同。例如:
endpoints_api_service: name: example-project-12345.appspot.com rollout_strategy: managed
rollout_strategy: managed
选项可将 ESP 配置为使用最新部署的服务配置。指定此选项后,在部署新的服务配置后,ESP 最多会在 5 分钟内检测到更改并自动开始使用该服务配置。建议您指定此选项,而非让 ESP 使用特定的配置 ID。
由于 endpoints_api_service
部分包含在 app.yaml
文件内,因此 gcloud app deploy
命令会将单独容器中的 ESP 部署到您的 App Engine 柔性环境中,并在该环境中对 ESP 进行配置。所有请求流量均通过 ESP 路由。ESP 会作为代理将请求和响应传输到运行后端服务器代码的容器,并从中提取请求和响应。
dotnet restore dotnet publish gcloud app deploy src\IO.Swagger\bin\Debug\netcoreapp2.0\publish\app.yaml
gcloud app deploy
命令会创建 YOUR_PROJECT_ID.appspot.com
格式的 DNS 记录,您在向 API 发送请求时会用到它。建议您等待几分钟,在 App Engine 完全初始化后向 API 发送请求。
如果您收到错误消息,请参阅排查 App Engine 柔性部署问题。
如需了解详情,请参阅部署 API 后端。
向 API 发送请求
部署示例 API 后,您可以向其发送请求:
创建 API 密钥并设置环境变量
示例代码需要 API 密钥。为简化请求,请为 API 密钥设置环境变量。
在您用于 API 的同一 Google Cloud 项目中,在 API 凭据页面上创建 API 密钥。如果要在其他 Google Cloud 项目中创建 API 密钥,请参阅在 Google Cloud 项目中启用 API。
- 点击创建凭据,然后选择 API 密钥。
- 将密钥复制到剪贴板。
- 点击关闭。
- 在本地计算机上,粘贴 API 密钥以将其分配给环境变量:
$Env:ENDPOINTS_KEY="AIza..."
发送请求
在 PowerShell 中,为您的 App Engine 项目网址设置环境变量。将 YOUR_PROJECT_ID 替换为您的Google Cloud 项目 ID。
$Env:ENDPOINTS_HOST="https://YOUR_PROJECT_ID.appspot.com"
使用之前设置的
ENDPOINTS_HOST
和ENDPOINTS_KEY
环境变量测试 HTTP 请求:Invoke-WebRequest "$ENDPOINTS_HOST/echo?key=$ENDPOINTS_KEY" ` -Body '{"message": "hello world"}' -Method POST ` -ContentType "application/json"
在上面的示例中,前两行以反引号结束。将示例粘贴到 PowerShell 中时,请确保反引号后面没有空格。 要了解示例请求中使用的选项,请参阅 Microsoft 文档中的 Invoke-WebRequest。
API 会回显您向其发送的消息,并以如下内容作为响应:
{
"message": "hello world"
}
如果未成功收到响应,请参阅排查响应错误。
您刚刚在 Endpoints 中部署并测试了一个 API!
跟踪 API 活动
在 Endpoints 页面中查看 API 的活动图表。
请求可能需要一些时间才能体现在图表中。
在“日志浏览器”页面中查看 API 的请求日志。