托管的目标任务

您正在查看 Apigee Edge 文档。
前往 Apigee X 文档
信息

取消部署 Hosted Targets 代理

取消部署包含 Hosted Targets 应用的 Edge 代理时,关联的 Hosted Targets 应用会被取消部署,但底层应用映像不会被删除。如果您重新部署代理,系统会重新部署托管的目标平台应用。

删除 Hosted Targets 代理

删除 Hosted Targets 代理后,底层运行时实例将在一段时间内停止运行。不过,应用代码会保留下来。

访问日志文件

日志文件对于调试和问题排查非常有用。您可以查看 Hosted Targets 部署的两种类型的日志文件:

  • 构建日志 - 显示与部署和构建 Hosted Targets 应用相关的输出。
  • 运行时日志 - 显示与正在运行的托管目标应用相关的输出。运行时日志的范围限定为环境,并显示当前部署的代理修订版的日志信息。

从 Edge 界面访问日志

  1. 前往:apigee.com/edge
  2. 输入您的登录凭据,然后点击 Sign In(登录)。
  3. 在侧边导航菜单中,依次选择开发 > API 代理
  4. 选择要查看日志的代理。
  5. 点击开发标签页。
  6. 如需查看构建日志,请点击构建日志
  7. 如需查看运行时日志,请点击运行时日志

使用 API 访问日志

您还可以使用 Edge API 检索 Hosted Targets 日志。如需了解详情,请参阅获取缓存的 Node.js 日志

使用私有 npm 代码库

本部分介绍了在开发环境中使用私有 NPM 代码库的情况下,如何将 Node.js 代理部署到托管的目标。

关于使用私有代码库的注意事项

将 Node.js 应用部署到 Edge 时,项目的所有依赖项都会在部署过程中自动导入。从本质上讲,Hosted Targets 会在部署您的代码时对其运行 npm install。不过,如果您在开发环境中使用专用 NPM 代码库,则无法在 Cloud 中解析专用依赖项。在这种情况下,解决方案是使用部署实用程序 apigeetool 时使用 --bundled-dependencies 选项。另请参阅将 Node.js 从系统部署到 Edge。

apigeetool 上使用 --bundled-dependencies 标志时,您的 Node.js 应用将上传到 Hosted Targets,并且 package.jsonbundledDependencies 数组中列出的任何本地/私有文件都会与 bundle 一起压缩和上传。

请注意,如果您在内部镜像公共 NPM 代码库,则当部署包包含指向您的私有镜像的 .npmrcpackage-lock.json 文件时,您的部署将失败,不过这种情况并不常见。在这种情况下,请务必从要部署的代理软件包中省略 .npmrcpackage-lock.json

使用私有 NPM 代码库进行部署

如需使用私有 NPM 代码库提供的模块,请按以下步骤操作:

  1. 登录 npm:
    npm login
  2. 获取 npm 身份验证令牌:
    1. 找到 .npmrc(应位于 ~/.npmrc 中)。
    2. 在您的 .npmrc 中,记下如下所示的行末尾的令牌:

      //registry.npmjs.org/:_authToken=****
    3. 或者,使用 npm token <list | create | revoke> 命令列出、创建或撤消身份验证令牌。如需了解详情,请参阅 npm-token 文档
  3. 访问键值对映射配置页面,如下所述。

    Edge

    如需使用 Edge 界面访问“键值映射”配置页面,请执行以下操作:

    1. 登录 apigee.com/edge
    2. 在左侧导航栏中,依次选择管理 > 环境 > 键值对映射

    传统边缘(私有云)

    如需使用 Classic Edge 界面访问“键值映射”配置页面,请执行以下操作:

    1. 登录 http://ms-ip:9000,其中 ms-ip 是管理服务器节点的 IP 地址或 DNS 名称。
    2. 在顶部导航栏中,依次选择 API > 环境配置 > 键值对映射
  4. 点击 + 键值对映射
  5. 在“新建键值对映射”对话框中,输入名称,然后选择已加密
  6. 点击添加
  7. 将您之前找到或创建的身份验证令牌添加为您刚刚创建的每个 KVM 中的新条目。
  8. app.yaml 文件中,添加一个条目来引用与 npm 身份验证令牌关联的 KVM 和密钥。代码应如下所示:
  9. env:
    - name: NPM_TOKEN
     valueRef:
       name: npm_store
       key: private_token

    其中:

    • 顶级 name 属性对应于将创建的环境变量的名称。
    • valueRef 下的 name 对应于您之前创建的 KVM。
    • key 属性对应于您添加到 KVM 的 npm 令牌所对应的键。
  10. 在 package.json 所在的同一目录中创建一个 .npmrc 文件。该文件应如下所示:
    //registry.npmjs.org/:_authToken=${NPM_TOKEN}
    或者,如果您不使用 registry.npmjs.org,则可以通过添加类似以下内容的行在 .npmrc 文件中设置作用域 @myscope:registry=https://mycustomregistry.example.org 另请参阅 npmrc 文档
  11. 上传或更新 Node.js 代理(包含 .npmrc 文件和 app.yaml 文件)。
  12. 确保新的或更新后的代理部署并与所需的私有代码库模块配合使用。
  13. 如果代理未部署,请检查构建日志,确认代理在安装专用 npm 模块时是否失败。如果是:
    1. 在“开发”标签页下,确保存在 .npmrc
    2. 确保您的令牌有效(尝试在本地安装模块,并在 kvm 中提供令牌)。
    3. 如果您使用的是自定义镜重,请确保已设置该镜重。

为捆绑的依赖项指定 NPM 版本

默认情况下,NPM v4 用于在托管的目标环境中安装捆绑的依赖项。 但是,如果要使用其他 NPM 版本,可以在 NPM_VERSION 环境变量中进行指定。您可以在应用的清单文件中设置此变量。如需了解详情,请参阅清单文件元素

如果您使用捆绑式依赖项,并且未指定 NPM_VERSION,则托管目标将默认使用 NPM v4。如果您不使用捆绑的依赖项,则系统会使用您指定的 Node.js 运行时中包含的 NPM 版本。

捆绑的依赖项示例

如需查看演示包含托管目标的捆绑依赖项功能的示例,请参阅如何使用自定义模块创建包含托管函数的 Node.js 应用

添加健康检查端点

您可以选择为 Node.js 应用实现健康检查端点。当您的 Node.js 应用开始检查该应用是否已在容器中启动并运行时,Apigee 会使用此端点。

默认情况下,Apigee 预期的端点为 /health。您可以通过在名为 HOSTED_TARGET_HEALTH_CHECK_PATH 的环境变量中指定端点来更改默认端点。您可以在应用的清单文件中设置此变量。如需了解详情,请参阅清单文件元素

无需实现健康检查端点。但是,如果您实现了健康检查端点,请注意以下事项:

  • 如果您的应用在 Apigee 到达端点时退出,该应用将无法按预期启动。
  • 即使端点返回 404 Not Found HTTP 状态也没关系。/healthHOSTED_TARGET_HEALTH_CHECK_PATH 仅用于检查应用是否正在运行。系统会忽略实际响应。

更改 NPM 缓存位置

较新版本的 Node.js 使用的是将 /root/.npm 用作 NPM 缓存的 NPM 版本。 此位置给托管目标带来了问题,因为该目录位置是只读的,因为托管目标运行时使用只有 /tmp 可写入的 tmpfs 文件系统。如需解决此问题,您可以将应用的 app.yaml 文件(清单文件)中的 npm_config_cache 环境变量设置为 /tmp 中的一个目录。例如:

  runtime: node
  application: my-express-app
  env:
    - name: npm_config_cache
      value: /tmp/.npm
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  

在不使用 NPM 的情况下运行应用

默认情况下,托管目标使用 npm start 运行托管目标应用。但在上一项任务中,我们讨论了使用 NPM 时遇到的问题,因为较新版本将尝试为 NPM 缓存使用 /root/.npm,该操作不可写入,并且会导致托管目标无法启动。虽然上一个任务可以解决此问题,但另一种方法是在不使用 NPM 的情况下运行应用。为此,您可以在应用的 app.yaml 文件(清单文件)中使用 commandargs 值,直接通过 node index.js 运行托管目标。例如:

  runtime: node
  application: my-express-app
  command: node
  args:
    - index.js
  env:
    - name: NODE_ENV
      value: production
    - name: LOG_LEVEL
      value: 3
  
当然,您可以使用任何您认为合适的命令,node index.js 只是一个示例。