托管的目标任务

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

取消部署托管目标代理

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

删除托管目标代理

删除托管目标代理后,底层运行时实例将在一段时间内停止运行。不过,应用代码会保留。

访问日志文件

日志文件有助于进行调试和问题排查。您可以查看托管目标平台部署的两种类型的日志文件:

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

通过 Edge 界面访问日志

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

使用 API 访问日志

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

使用私有 npm 代码库

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

使用私有代码库时需要注意的事项

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

apigeetool 上使用 --bundled-dependencies 标志时,您的 Node.js 应用将上传到托管目标平台,并且 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. 在左侧导航栏中,依次选择管理 > 环境 > 键值对映射

    经典边缘(私有云)

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

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

    其中:

    • 顶级 name 属性对应于将要创建的环境变量的名称。
    • valueRef 下的名称与您之前创建的 KVM 相对应。
    • 属性对应于映射到您添加到 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. 如果代理未部署,请检查 build 日志,看看是否在安装私有 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“未找到”HTTP 状态,则没有问题。/healthHOSTED_TARGET_HEALTH_CHECK_PATH 仅用于检查您的应用是否正在运行。 实际响应会被忽略。

更改 NPM 缓存位置

较新版本的 Node.js 使用的 NPM 版本会使用 /root/.npm 作为 NPM 缓存。 对于托管目标,此位置存在问题,因为该目录位置是只读的,这是因为托管目标运行时使用 tmpfs 文件系统,其中只有 /tmp 是可写的。如需解决此问题,您可以在应用的 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 Targets 使用 npm start 运行您的托管目标应用。但在上一个任务中,我们讨论了使用 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 只是一个示例。