如何在 IBM Bluemix 部署服务

应用服务 12/10 阅读 841 views次 人气 0
摘要:

如何在 IBM Bluemix 部署服务

引言

IBM Bluemix 是一个开放式标准的云平台,提供构建、运行、管理 App 和 Service 的能力,帮助用户轻松地创建 App,并封装成 Bluemix 的 Service,也支持将其它第三方应用封装成 Bluemix 的 Service. 本文通过一个例子阐述了将 App 封装成 Blumix Service 的具体步骤。

如何在 IBM Bluemix 部署服务

要将服务集成到 IBM Bluemix 云平台,首先需要实现并且部署服务到 IBM Bluemix,然后为我们定制的服务实现 Service Broker,最后将 Service Broker 注册到 IBM Bluemix 云平台。

在 IBM BLuemix 云平台部署服务包括如下基本步骤:

  1. 定制服务,可以按需求开发您自己的服务,并以应用程序的方式部署到 IBM Bluemix;
  2. 实现 Service Broker,要使您的 Service Broker 在 Bluemix Catalog 显示,必须实现 Catalog,Provision 和 Unprovision API 端点,如果想让 Service Broker 与 Bluemix 应用程序绑定,还需要实现 Bind 和 Unbind 端点。为实现这些 API 端点,您需要提供服务的定制服务的相关文档,比如,文档、图标、入门文档和管理员 iframe 对应的 URL。
  3. 将 Service Broker 注册到 Bluemix,可以通过 Bluemix 命令行和 Catalog 管理插件来注册。

IBM Bluemix Service Broker 主要为服务提供以下两个功能:

  • 可以让定制的服务在 IBM Bluemix 服务目录显示和通过命令 cf marketplace 输出;
  • 可以将服务与 IBM Bluemix 应用程序进行绑定,绑定之后,应用程序可以直接和服务实例进行交互。

完成以上步骤之后,您的服务就可以在 Bluemix Catalog 和 CF Marketplace 显示。下面以一个实例来说明如何将服务部署到 IBM Bluemix。

实例:将乱码检测(GarbageCodeDetect)服务注册到 Bluemix

乱码检测服务是基于 Java 语言开发的一个 REST API,他能对网页内容进行扫描,并检测是否包含乱码字符。下面将介绍将该乱码检测功能以服务的形式注册到 IBM Bluemix 平台的详细步骤为例,来说明如何在 IBM Bluemix 上定制服务。

实现乱码检测 API

乱码检测服务代码可以从https://github.ibm.com/zhiyongf/garbage-detect.git 下载,其中 GarbageCodeDetect 目录是乱码检测服务对应的代码,SampleApp 是基于 GarbageCodeDetect 服务的演示应用程序,ServiceBroker 是将乱码检测服务集成到 IBM Bluemix 对应的 Service Broker.

将 GarbageCodeDetect 服务以 java 应用程序部署到 Bluemix 之后,就可以使用 Garbage Code Detect API。

应用程序 Web UI 的 URL 为http://garbagecodedetection.mybluemix.net, 乱码检测 REST API 则是http://garbagecodedetection.mybluemix.net/rest/garbagechar_scan,其中测试目录下面也有一些包含乱码的静态页面,

http://garbagecodedetection.mybluemix.net/test/garbledUTF8-2.html
http://garbagecodedetection.mybluemix.net/test/garbledUTF8.html
http://garbagecodedetection.mybluemix.net/test/garbledBig5.html

不包含乱码的静态页面有:

http://garbagecodedetection.mybluemix.net/test/goodUTF8.html
http://garbagecodedetection.mybluemix.net/test/goodBig5.html

乱码检测 REST API 的 HTTP 方法是 POST,参数是一个 JSON 数组,其中每个数组元素都包括一个必须参数 url,和一个可选参数 encoding,例如:

若没有指定页面的编码,则服务会使用页面的默认编码。该 API 的作用是检测 JSON 数组中提供所有的页面中所有含有乱码的字串,如果用户传入 API 的 JSON 数据如上,API 会返回

实现 Service Broker

在实现 Service Broker 时,必须实现相关的 Service Broker API。即在代码中,需要提供能够处理并响应 HTTP 请求的一系列 API 端,包括 Catalog, Provision 与 Unprovision API,当 Catalog 端点设置为可绑定时,Bind 和 Unbind 端点也必须实现。

下面简单介绍下这几个相关的 API:

  1. Catalog (GET)
    通过实现该端点来获取 service 的信息。Bluemix 通过命令行 bluemix catalog service-broker-create 或者 bluemix catalog service-broker-update 来调用这个 API。
    该 GET 方法的 URL 路径为:/v2/catalog.
    该 API 调用后返回值为一个包含 service 定义具体信息的 JSON 文件。
  2. Provision (PUT)
    通过实现该端点来创建 service 实例。
    该 PUT 方法的 URL 路径为:/v2/service_instances/:instance_id,instance_id 由云控制器生成,请求时可以使用参数,或者请求 JSON 文件。
  3. Unprovision (DELETE)
    通过实现该端点来删除 service 实例。
    该方法的 URL 路径为:/v2/service_instances/:instance_id。通过传入 service ID 来锁定删除对象。
  4. Bind (PUT)
    使用 service 的应用程序通过使用该 API 来绑定到 service 上。
    该方法的 URL 路径为:/v2/service_instances/:instance_id/service_bindings/:binding_id,binding_id 同样也是由云端控制器生成。传入 JSON 文件参数。
  5. Unbind (DELETE)
    断开绑定到 service 的应用程序。
    该方法的 URL 路径为:
    /v2/service_instances/:instance_id/service_bindings/:binding_id

以下是一个已经用 Node.js 实现的 Service Broker 所需所有端点的实力,可以通过以下步骤部署您自己的 Service Broker。

  1. 下载示例代码,git clone https://github.ibm.com/zhiyongf/garbage-detect.git
  2. 进入 ServiceBroker 目录,其中 app.js 里面已经实现了 Service Broker 所需要的所有端点,比如:provision,unprovision,catalog,dashboard,bind,unbind,…… Service Broker 所需要的一些资源文件放在 ServiceBroker/public 目录,您可以按需求修改这些资源文件。
  3. 将 ServiceBroker 以应用程序的方式部署到 IBM Bluemix。部署之前,必须修改 app.js 中的 CLIENT_ID、CLIENT_SCRET、SERVICE_ID 和 SERVICE_PLAN_ID 成唯一值,可以通过https://www.guidgenerator.com/生成唯一的 GUID,如下:

    您也可以修改 app.js 中对应的 catalog 端点,使您的 Service Broker 按需求呈现在 Bluemix Catalog 页面;

准备 Bluemix 应用程序所需要的依赖包文件按 package.json 与部署文件 manifest.yml,manifest,yml 主要指定应用程序的名称,域名,以及部署成功之后启动命令,如下:

Package.json

Manifest.yml

通过如下命令将 Service Broker 应用程序部署到 Bluemix。

部署成功之后,可以看到 Service Broker 应用程序的状态如下:

在浏览器打开http://uxlservicebroker.mybluemix.net/,可以看到"This is a test"字串,表示程序启动成功。通过http://uxlservicebroker.mybluemix.net/v2/catalog,会弹出授权验证对话框,输入 app.js 中指定的用户名 SERVICE_BROKER_USER 和密码 SERVICE_BROKER_PASSWORD,就会显示 Catalog API 返回的项目信息,该信息用于 Service Broker 集成到 Bluemix Catalog。

Catalog API 返回信息如下:

Service Broker 到此,基本已实现,但是此时 Service Broker 并不会显示到 Bluemix Catalog 或 CF Marketplace,要想将定制的 Service Broker 在 Bluemix Catalog 或 CF Marketplace 显示,还需要将 Service Broker 注册到 Bluemix。

将 Service Broker 注册到 Bluemix

要将 Service Broker 注册到 Bluemix Catalog,需要创建一个 Service Broker 定义文件,然后使用 Bluemix Catalog 管理插件的 service-broker-create 命令来完成。

Service Broker 定义文件

Service Broker 定义文件 broker-sample.json 内容如下:

其中,

name 为 Service Broker 的名称;
broker_url 为 Service Broker 应用程序的入口 URI;
auth_username 为 app.js 指定的 SERVICE_BROKER_USER;
auth_password 为 app.js 指定的 SERVICE_BROKER_PASSWORD;
owningOrganization 为 Service Broker 隶属组织;
visibilities 为可以查看该 Service Broker 的组织。

使用 Bluemix Catalog 管理插件注册 Service Broker

  1. 下载并安装Bluemix 命令行
  2. 下载并安装Bluemix Catalog 管理插件,想获得 Bluemix Catalog 插件更多相关信息,可以查看相关文档
  3. 通过以下命令创建 Service Broker

创建过程的日志会写入当前目录 trace.log 文件,通过该日志文件,可以方便调试。如果创建成功的话,就可以在 IBM Bluemix Catalog 页面搜索到您创建的 Service Broker,如下:

当然,该 Service Broker etservicebroker (该名称是在 Service Broker 应用程序 app.js catalog 端点中定义)也是存在于 CF Marketplace:

到此,一个不带有任何功能的 Service Broker 就已经在 Bluemix 创建完毕,您可以通过 Bluemix UI 或 cf 命令创建 etservicebroker 服务实例,也可以将实例与应用程序绑定。当然,也是可以将解除与应用绑定,并且将其从 Bluemix 删除。那如何让您的服务与 Service Broker 进行集成呢?下面以乱码检测服务与 Service Broker 集成实例来说明。

将乱码检测服务与 Service Broker 集成

通过以下方法将乱码检测 API 与 Service Broker 集成:

在 Service Broker 应用程序的 app.js 中添加以下乱码检测相关路由代码,并且用 cf push 命令重新部署到 Bluemix 以更新 Service Broker 应用。

可以使用 REST API Client 测试工具来测试该服务,比如用 Chrome 插件 Postman,或 RESTClient 测试:

首先设置 Basic Authorization,用户名和密码分别是 app.js 指定的 SERVICE_BROKER_USER 和 SERVICE_BROKER_PASSWORD,然后再指定 POST 请求数据类型为 application/json

更新 Service Broker Bluemix Catalog,通过以下命令更新 Service Broker uxlservicebroker

到此,您就将定制的服务集成到 Bluemix,并且可以在 Catalog 和 cf marketplace 查看您的服务,接下来为您演示如何创建服务实例,并将服务实例绑定到 Bluemix 应用程序。之前提到过,可以通过 Bluemix Cataog 和 cf 命令来创建服务实例,这里演示用 cf 命令创建服务实例。

成功创建之后,在 Bluemix Dashboard 上可以看到 garbagedetect 服务实例

进入 Service 可以看到三个 Manage,Plan 和 Connections 三个 tab,其中 Manage 页面主要管理该服务的使用文档,Plan 是该服务的收费计划,Connections 显示该服务实例所连接到的应用程序,可以在 Connections tab 创建与应用程序的连接,也可以通过 cf 命令行创建服务实例与应用程序的连接。

然后,创建一个测试应用程序 uxlSampleApp,再将该 Service Broker uxlServiceBroker 实例 garbagedetect 绑定到测试应用程序,成功绑定之后,可以在 garbagedetect 实例管理页面的 Connections 页面到看到 uxlSampleApp。

当然,可以在 frankintestapp 下面看到 garbagedetect 服务实例,如下:

创建 Service 过程中可能会遇到以下问题

问题 1

当所有的步骤完成,并创建服务实例后,Manage 页可能会提示"502 Bad Gateway: Registered endpoint failed to handle the request" 或 "Unable to retrieve from http://api.ng.bluemix.net"错误.

解决方案:请首先检查 app.js 文件 authorizationEndpoint 函数的 urlString 变量,确保其含有"/v2/info",如 var urlString = getAPI(request) + "/v2/info";

同时确认 catalog 函数中 service 的 metadata 的 embeddableDashboard 的值等于 false。

问题 2:

当所有的步骤完成,创建服务实例后,点击 Manage 页面的重定向 url,可能会出现如下错误提示:

解决方案:检查 app.js 文件 catalog 函数,确认定义了 dashboard_client,接着访问 https://www.guidgenerator.com/,为常量 CLIENT_ID 和 CLIENT_SECRET 重新生成唯一值,接着运行 Update Service broker 命令(bluemix catalog Service-broker-update uxlservicebroker broker-same.json)使改动生效。

最终发布注意事项

正如创建 Service Broker 描述文件ServiceBroker/broker-sample.js所述,该定制的 Bluemix 服务只能在 visibilities 属性指定的组织内的成员使用。如果想在 Bluemix 公开目录发布您的服务,让所有用户都可以使用您的服务,需要在 Bluemix 支持下开 Ticket 找到 Bluemix 团队,他们会帮您审核服务的基本质量,安全或法律等相关问题,如果审查通过,他们会帮您在 IBM Bluemix 平台发布服务。

结束语:

本文详细阐述了将 App 封装成 Bluemix Service 的完整过程,包括 Service Broker 的实现, Service Broker 在 Bluemix 上的注册,以及将 App 集成到 Service broker 等步骤,并介绍了在这一过程中可能会遇到的问题。通过将 App 封装成 Bluemix service,能够使同一个 organization 中的其他 Bluemix 用户更方便地使用这个 App。

相关主题

  • 访问 developerWorks 中国 IBM Bluemix 资源中心:本专题提供了丰富的文章、教程和演示等学习资源,带您由浅入深地了解 Bluemix。
  • 访问 developerWorks 云计算专区,developerWorks 为开发人员和专业人员推出的云计算社区和技术资源。您可以了解关于云计算的更多信息,获取技术文档、how-to 文章、培训、下载、产品信息以及其他最新技术资源,并参与社区讨论。
  • IBM developerWorks Premium 是一项针对开发人员的会员计划,它提供了功能强大的工具、资源和支持,旨在帮助您快速设计原型、开发和部署成功的云项目。

评论

该文章不支持评论!

分享到: