托管的目标教程

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

以下教程介绍了如何使用 Hosted Target(由 Apigee 托管的原生 Node.js 运行时环境)将 Node.js 应用部署到 Edge。

这些教程会演示以下任务:

  • 使用 Edge 界面将 Node.js 应用部署到 Hosted 目标。
  • 将 Node.js 应用从本地开发机器部署到 Hosted 目标。
  • 将具有传统 Edge Node.js 目标实现的现有代理迁移到 Hosted 目标。

使用 Edge 界面将 Node.js 应用部署到托管的目标

在本教程中,您将使用 Edge 界面将简单的 Node.js 应用部署到 Hosted 目标。完成本教程后,您将了解 Hosted Target 代理的基本结构和内容,以及如何访问部署和构建日志文件。

登录

  1. 前往:apigee.com/edge
  2. 输入您的 Apigee 登录凭据登录。

创建新的代理

  1. 在侧边导航菜单中,依次选择 Develop > API Proxies
  2. 点击添加代理
  3. 在“创建代理”页面中,选择 Hosted Target(托管目标)。
  4. 点击下一步
  5. 在“代理名称”字段中,输入 hello-hosted-targets
  6. 确保已选择“Hello World”示例
  7. 点击下一步
  8. 在“安全性”页面中,为“授权”选择直通(无)
  9. 点击下一步
  10. 点击下一步
  11. 在“构建”页面中,务必选择 test 环境。请注意,代理类型为 Hosted Target(托管目标)。
  12. 点击构建和部署。代理部署可能需要一些时间才能完成。
  13. 成功部署代理后,点击页面底部的查看 hello-Hosting-targets 代理
  14. 调用 API 代理。最简单的方法是转到 Trace 标签页,启动跟踪会话,然后点击 Send。您应该会收到 200 状态和以下响应:
    {"date":"2018-09-26T14:23:04.550Z","msg":"Hello, World!"}

检查代理

  1. 在 Edge 界面中,点击 Develop 标签页。
  2. 在导航器中,选择“目标端点”下的默认
  3. 在代码编辑器中,请注意 <TargetEndpoint> 元素下有一个空的 <HostedTarget/> 子元素。此空标记是必需的。它会告知 Edge,代理的目标是部署到 Hosted Target 环境的应用。

  4. 在导航器中,注意 Scripts 部分下的内容。Node.js 应用文件列在 Hosting 标签下。

  5. 在 Edge 界面中,检查 ScriptsHosting 下列出的文件:
    • app.yaml 文件包含配置信息。例如,您可以添加运行时供 Node.js 应用使用的环境变量。在此示例中,您无需修改此文件。
    • index.js 文件是 Node.js 应用的主文件。
    • 如果您的应用有任何模块依赖项,这些依赖项必须列在 package.json 中。

查看日志文件

应用日志文件对于调试在构建阶段以及运行时发生的问题非常有用。

  1. 在 Edge 界面中,点击 Develop 标签页。
  2. 如需查看构建日志,请点击构建日志
  3. 如需查看部署日志,请点击运行时日志

    另请参阅访问日志文件

摘要

  • 您将简单的 Node.js 应用部署到了 Hosted Target 环境,并在 Edge 界面中进行了测试。
  • 您已了解 Hosted Target 代理需要在目标端点中名为 <HostedTarget/> 的特殊空标记。
  • 您已了解 Edge 会自动为您加载模块依赖项,并且这些依赖项必须列在 package.json 文件中。
  • 您还学习了如何检查构建和运行时日志文件。

将 Node.js 从您的系统部署到 Edge

本部分介绍如何使用 apigeetool 将独立的 Node.js 应用从本地系统部署到 Hosted 目标。apigeetool 实用程序将 Node.js 应用捆绑到新的 Hosted Target 代理中,并将其部署到 Edge。

安装 apigeetool

建议开发者使用 apigeetool 将代理代码部署到 Edge。如需安装 apigeetool,请运行以下 NPM 命令:

npm install -g apigeetool

创建 Node.js 应用

为了简化操作,我们为您提供了一个简单的 Node.js 应用的代码。

  1. 为 Node.js 应用创建一个目录。调用该目录 node-managed-express
  2. cd 到新目录。
  3. 创建一个名为 index.js 的文件,并将此代码复制到其中。
  4. var express = require('express')
    var app = express()
    
    app.get('/', function(req, res) {
        res.json({
            hello: "Hello World!"
        })
    })
    
    app.get('/hello/:name', function(req, res) {
        var name = req.params.name
        res.json({
            hello: "hello " + name
        })
    })
    
    var server = app.listen(process.env.PORT || 9000, function() {
        console.log('Listening on port %d', server.address().port)
    })
    
  5. 创建一个名为 package.json 的文件,并将此代码复制到其中。请注意, Express 模块被列为依赖项。
  6. {
        "name": "hello-world",
        "version": "1.0.0",
        "main": "index.js",
        "scripts": {
            "start": "node index.js --use_strict"
        },
        "author": "",
        "license": "",
        "dependencies": {
            "express": "^4.16.0"
        }
    }
    
  7. 创建一个名为 app.yaml 的文件,并将以下代码复制到其中:
  8. runtime: node
    runtimeVersion: 8
    application: my-express-app
    env:
      - name: NODE_ENV
        value: production
      - name: LOG_LEVEL
        value: 3
    
  9. 确保您的目录如下所示:
    ls
    app.yaml index.js package.json
    

审核应用代码所需的目录结构

您的 Node.js 应用必须与标准 Node.js 应用具有相同的结构。但是,在使用 apigeetool 部署到 Edge 之前,请确保您满足以下要求:

  • app.yaml 清单文件是必需的,并且必须位于应用的根目录中。如需详细了解此文件,请参阅清单文件
  • 必须指定 package.json 文件。它必须列出应用所需的所有依赖项。
  • 需要 node_modules 文件夹。部署 Node.js 应用时,Edge 会为您运行 npm install。它从 package.json 获取依赖项。只有在具有无法通过 npm 提供的自定义模块时,才需要明确提供 node_modules

部署代理

  1. 在终端中,使用 cd 命令转到 Node.js 应用的根目录。
  2. 使用 deploymanagedtarget 命令执行 apigeetool
  3. apigeetool deployhostedtarget -o org -e env -n proxy-name -b /node-hosted-express -u username

    其中,-n 是您要为新代理指定的名称。该名称在组织中必须是唯一的。您可以在名称中使用的字符仅限以下字符:a-z0-9._\-$%

    例如:

    apigeetool deployhostedtarget -o myorg -e test -n node-hosted-express -b /node-hosted-express -u jdoe@apigee.com

    如需详细了解如何使用 apigeetool,请参阅 https://github.com/apigee/apigeetool-node

测试代理

您可以使用 c网址 命令、通过 REST 客户端(如 Postman)或在 Edge 工具的 Edge 界面中测试代理。下面是一个 c网址 命令示例。

curl http://myorg-test.apigee.net/node-hosted-express
     {"date":1506992197427,"msg":"hello-world"}

获取构建日志

构建日志显示与部署和构建 Node.js 应用相关的输出。另请参阅日志文件

apigeetool getlogs -u username -o org -e env --hosted-build -n proxy-name

例如:

apigeetool getlogs -u jdoe@apigee.com -o myorg -e test --hosted-build -n node-hosted-express

获取运行时日志

运行时日志显示与正在运行的应用相关的输出。运行时日志的范围限定为环境,并返回当前部署的代理修订版本的日志。另请参阅日志文件

apigeetool getlogs -u username -o org -e env --hosted-runtime -n proxy-name

例如:

apigeetool getlogs -u jdoe@apigee.com -o myorg -e test --hosted-runtime -n node-hosted-express

在 Edge 界面中查看代理

部署成功后,您可以在 Edge 界面的 API 代理部分查看和修改代理。

将现有 Node.js 代理迁移到 Hosted Target 代理

本部分介绍如何手动将采用传统 Node.js 目标实现的现有 Edge API 代理迁移到托管目标。还说明了如何在执行迁移步骤后部署代理。

迁移步骤会保留 API 代理的结构、政策、流程和其他配置元素。 您可以按下文所述的四个步骤执行迁移,然后使用 apigeetool 部署已迁移的代理。

第 1 步:调整代理文件结构

如需调整文件结构,API 代理必须位于您的本地文件系统上。如果代理部署在 Edge 上,您必须先下载代理,然后才能继续操作。在传统配置中,包含 Node.js 代码的 Edge 代理“软件包”遵循此文件结构。Node.js 应用代码位于 resources/node 目录中:

apiproxy/
    policies/
    proxies/
    targets/
    resources/
      node/
        Your application code


对于托管目标,您必须将 Node.js 应用的根目录放在名为 resources/hosted 的目录下。只需创建一个名为 resources/hosted 的新目录,并将 resources/node 的内容移到此目录中即可。然后,您可以删除 resources/node 目录。

apiproxy/
     policies/
     proxies/
     targets/
     resources/
       hosted/
         Your application code

第 2 步:添加清单文件

创建一个名为 app.yaml 的清单文件,并将其放入 apiproxy/resources/hosted 目录中。

以下是一个示例 app.yaml 文件。它指定运行时是 Node.js(必需)。它还会在执行环境中创建一个环境变量(一个可供 Node.js 应用访问的变量)。该环境变量是可选的,仅作为示例显示在此处。如需更多详细信息和示例,请参阅清单文件

runtime: node
  env:
    - name: NODE_ENV
      value: production


以下示例展示了位于 Hosted Target 代理中正确位置的 Node.js 项目结构:

apiproxy/
   resources/
      hosted/
        index.js
        node_modules/
        app.yaml
        package.json

第 3 步:确保您拥有 package.json 文件

在传统的 Edge Node.js 代理中,package.json 是可选的。但是,对于托管目标,必须在 apiproxy/resources/hosted 目录中提供一个。请务必在此文件中指定应用所需的所有依赖项。

第 4 步:修改代理的目标端点

传统的 Node.js 代理要求目标端点文件(通常为 /apiproxy/targets/default.xml)中存在名为 <ScriptTarget> 的标记。对于 Hosted 目标,您需要添加名为 <HostedTarget/> 的空标记。如果文件中有 ScriptTarget 标记,您只需将其移除即可。 例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <TargetEndpoint name="default">
       <Description />
       <FaultRules />
       <PreFlow name="PreFlow">
          <Request />
          <Response />
       </PreFlow>
       <PostFlow name="PostFlow">
          <Request />
          <Response />
       </PostFlow>
       <Flows />
       <HostedTarget />
    </TargetEndpoint>
    

部署代理

您现在可以使用 apigeetool deployproxy 命令部署代理。

  1. 使用 cd 命令转到代理的根目录:/apiproxy
  2. 使用以下命令部署代理:
  3. apigeetool deployproxy -u username -o org -e env -n proxy-name -d .

    例如:

    apigeetool deployproxy -u jdoe -o docs -e test -n hello-world -d .

如需详细了解如何使用 apigeetool,请参阅:https://github.com/apigee/apigeetool-node/blob/master/README.md

测试代理

您可以使用 c网址 命令、通过 REST 客户端(如 Postman)或在 Edge 工具的 Edge 界面中测试代理。以下是 c网址 命令示例:

curl http://myorg-test.apigee.net/hello-world
Hello,World!