您正在查看 Apigee Edge 文档。
转到 Apigee X 文档。 信息
环境变量限制
托管目标会限制您可以在托管目标运行时环境中设置的环境变量的大小和数量。
- 1000:单个环境变量的长度上限。
- 100:您可以设置的环境变量的数量上限。
如需了解如何设置环境变量,请参阅清单文件。
在应用运行时设置的环境变量
部署 Hosted Targets 应用时,系统会设置以下环境变量,并在运行时供您的应用使用:
APIGEE_ENVIRONMENT
- 部署了托管目标代理的环境。APIGEE_ORGANIZATION
- 部署了 Hosted Target 代理的组织。PORT
- Hosted Target 应用必须监听的端口。
系统资源分配
每个托管的目标实例都会收到以下资源:
- 256 MB 内存
- 1.2 GHz CPU
扩缩
本部分介绍 Hosted Targets 应用如何扩缩,具体取决于您拥有的 Edge 账号类型。- Apigee Edge 试用版的代理只能有一个托管目标实例。
- 付费 Apigee Edge 账号会根据每个代理的请求速率、响应延迟时间和其他应用指标进行自动扩缩。
- 同时部署到付费版和试用版 Apigee Edge 的 Hosted Targets 应用会在非活动期间缩减为零。 在这种情况下,您可能会注意到响应速度在短时间内会变慢。另请参阅已知问题
清单文件
为了收集用于构建和部署托管应用的运行时信息,Edge 会在 resources/hosted 目录中查找名为 app.yaml 的清单文件。此文件包含构建和部署 Hosted Targets 应用所需的信息。
Manfiest 文件语法
runtime: node runtimeVersion: version_number command: command_name args: argument_array env: - name: variable_name value: literal_value - name: variable_name valueRef: name: kvm_name key: kvm_value
清单文件元素
app.yaml 清单文件包含以下元素:
- runtime -(必需)指定您要部署的应用类型。
您必须指定
node
。 - runtimeVersion -(可选)应用使用的运行时版本。默认:Node.js LTS (v10.x)。如需了解其他选项,请参阅 适用于 Node 的 Docker 官方代码库。
- command(可选)- 用于指定要运行的命令(除了用于启动应用的默认命令)。默认:
Node.js=npm
- args -(可选)要传递给应用的命令行参数数组(以标准 YAML 数组语法指定)。通常,这些依赖项会添加到默认命令中。
默认值为 start。例如,默认情况下,系统会将
npm start
命令传递给 Node.js 应用。 - env -(可选)要在托管的目标运行时环境中设置的一组环境变量(名称/值对)。这些变量可用于您部署的 Hosted Targets 应用。
- name - 变量名称。
- value | valueRef - 您有两种选择。您可以设置字面量值,也可以引用存储在键值对映射中的值。键值对映射必须已存在于您的 Edge 环境中。请参阅使用键值映射
- 如果您使用 value,则必须指定变量
name
和字面量value
。例如:runtime: node env: - name: NODE_ENV value: production
- 如果您使用 valueRef,则必须提供您之前在 Edge 中创建的键值对映射 (KVM) 的名称和键。
例如:
runtime: node env: - name: DB_ENV value: production - name: DB_PASSWORD valueRef: name: hosted-kvm key: db-password
- 如果您使用 value,则必须指定变量
清单文件示例
本部分包含 Node.js 应用的清单文件示例。部署 Hosted Targets 应用需要使用清单文件,且该文件必须位于 apiproxy/resources/hosted
目录中,且文件名必须为 app.yaml
。
以下是 Node.js 应用的 app.yaml
(清单)文件示例。
指定字面量环境变量的示例:
runtime: node env: - name: NODE_ENV value: production
包含启动命令、命令行参数和环境变量的示例。
runtime: node command: ./node_modules/pm2/bin/pm2 env: - name: NODE_ENV value: production args: - app.js
指定键值对映射 (KVM) 引用的示例:
如需详细了解 KVM 访问权限,请参阅清单文件。
runtime: node env: - name: DB_ENV value: production - name: DB_PASSWORD valueRef: name: hosted-kvm key: db-password
GitHub 上的示例托管目标应用
Apigee 在 GitHub 上提供示例代理,其中包含以 Node.js 编写的 Hosted Targets 应用。您可以克隆此代码库并按照 README 说明部署任何代理。
前提条件
如需部署示例,您的系统必须安装以下两个工具:
- apigeetool - 用于部署 Edge 代理的命令行工具。
- get_token - 用于获取 apigeetool 所需授权令牌的命令行工具。
如果您想在本地测试示例,还必须安装 Node.js。
获取示例代码库
- 在浏览器中,前往 https://github.com/apigee/api-platform-samples。
- 点击克隆或下载,并使用您的首选方法将代码库拉取到本地系统。
- 使用 cd 命令复制到 <your install dir>/api-platform-samples/doc-samples/hosted-targets
- 下载代码库后,您可以 cd 到任何示例目录,然后按照 README 中的说明将示例代理部署到 Edge。部署命令如下所示。只需将指定的参数替换为您的 Apigee 账号对应的参数即可:
get_token && apigeetool deployproxy \ -o YOUR_ORGANIZATION \ -e YOUR_ENVIRONMENT \ --json \ --token "$(< ~/.sso-cli/valid_token.dat)"\ --api NAME_OF_THE_PROXY \ --directory .
示例:执行示例应用
克隆示例代码库
cd ~/myhome
git clone https://github.com/apigee/api-platform-samples.git
cd ~/myhome/api-platform-samples/doc-samples/hosted-targets
cd node-hosted-hello
在本地测试应用
必须安装 Node.js 才能执行此本地测试。
PORT=8081 node apiproxy/resources/hosted/index.js
curl http://localhost:8081
输出示例:
{"date":"2018-03-12T21:45:22.161Z","msg":"Hello, World!"}
部署代理
get_token && apigeetool deployproxy \ -o myorg \ -e test \ --json \ --token "$(< ~/.sso-cli/valid_token.dat)"\ --api node-hosted-hello \ --directory .
测试部署
部署可能需要几分钟才能完成。如果收到部署错误,请再次执行部署命令。
curl http://myorg-test.apigee.net/node-hosted-hello
输出示例:
{"date":"2018-03-23T18:59:18.668Z","msg":"Hello, World!"
已知问题
- 网络延迟时间:现在,Node.js 应用不再在 MP 的 JVM 中运行,因此 MP 和部署之间会出现网络跳转。当然,这需要付出代价,但初始基准测试表明,其代价在合理范围内
- API 响应缓慢 - 运行应用的基础架构会根据需求自动扩缩。这意味着,您的应用实际上可以缩减到零个实例,如果是这种情况,下一个 API 请求的处理时间会比典型的 API 请求稍长一些,因为基础架构正在启动实例来处理请求。
- 部署错误 - 如果您在部署托管目标代理时收到部署错误,请尝试重新部署代理。在某些情况下,部署可能会超时,如果您重新部署,问题就会自行解决。