托管的目标任务

您正在查看的是 Apigee Edge 文档。
转到 Apigee X 文档
信息

取消部署 Hosted Goal 代理

当您取消部署包含 Hosted Target 应用的 Edge 代理时,关联的 Hosted Target 应用会被取消部署,但底层应用映像不会被删除。如果您重新部署代理,则系统会重新部署 Hosted Target 应用。

删除 Hosted Target 代理

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

访问日志文件

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

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

从 Edge 界面访问日志

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

通过 API 访问日志

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

使用专用 npm 代码库

本部分介绍如果您在开发环境中使用专用 NPM 代码库,如何将 Node.js 代理部署到 Hosted 目标。

关于使用私有代码库的须知事项

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

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

请注意,如果您在内部镜像公共 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. 在左侧导航栏中,依次选择管理 > 环境 > 键值对映射

    传统 Edge (Private Cloud)

    如需使用传统版 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. 使用包含的 .npmrc 文件和 app.yaml 文件上传或更新 Node.js 代理。
  12. 确保新的或更新的代理部署并与所需的私有代码库模块配合使用。
  13. 如果代理未部署,请检查构建日志,查看安装专用 npm 模块是否失败。如果是:
    1. 在“Development”标签页下,确保 .npmrc 已存在。
    2. 确保您的令牌有效(尝试使用 kvm 中存在的令牌在本地安装模块)。
    3. 如果您使用的是自定义范围,请确保已对其进行设置。

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

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

如果您使用捆绑的依赖项,并且未指定 NPM_VERSION,Hosted Target 会默认使用 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 使用的 NPM 版本使用 /root/.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 的情况下运行应用

默认情况下,Hosted Target 使用 npm start 来运行 Hosted Target 应用。但在上一个任务中,我们讨论了使用 NPM 时存在的问题,因为较新版本会尝试将 /root/.npm 用于 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 只是一个示例。