转载

使用 REST API 管理 Auto-Scaling 服务

通过扩展应用程序运行时指标(比如内存和响应时间),使用 IBM Bluemix® Auto-Scaling 让您的应用程序变得富有弹性。在本教程中,我将详细介绍 Auto-Scaling 服务中的一个新特性,该特性允许用户通过 REST API 管理其 Auto-Scaling 服务。对于不愿通过 Bluemix UI 管理 Auto-Scaling 服务的用户,或者希望进一步分析 Auto-Scaling 数据的用户,该特性极为有用。

使用 Auto-Scaling REST API 管理 Auto-Scaling 服务,该服务有助于提高您的应用程序的弹性,并在 Bluemix 上工作时降低成本。

构建您的应用程序需要做的准备工作

  • 一个Bluemix 帐户
  • 熟悉 Cloud Foundry Command Line Tool ,必须安装此工具

第 1 步. 将您的应用程序与 Auto-Scaling 服务绑定在一起

您可以通过将应用程序与一个 Auto-Scaling 服务实例绑定在一起,向您的应用程序提供 Auto-Scaling 功能。参阅 " 让您的应用程序在 Bluemix 上富有弹性 ",了解如何在 Bluemix 中部署您的应用程序,并将 Auto-Scaling 服务与 Bluemix UI 绑定在一起。

借助 Cloud Foundry CLI,您可以发出一个 cf 命令来完成许多任务,就像您在 Bluemix UI 中所做的那样。例如,要绑定 Auto-Scaling 服务,请执行以下操作:

  1. 使用 cf marketplace 命令检查当前 Auto-Scaling 服务:
    > cf marketplace  Getting services from marketplace in org <ORG> / space <SPACE> as <USERNAME>... OK service                 plans   description Auto-Scaling            free    Automatically increase or decrease the number of application instances based on a policy you define. mysql                   100     MySQL database

    提示:使用 cf marketplace -s <SERVICE> 查看给定服务的各项计划的描述。

  2. 使用 cf create-service 创建一个 Auto-Scaling 服务实例:
    >cf create-service Auto-scaling free ScalingService Creating service instance ScalingService in <ORG> / space <SPACE> as <USERNAME>... OK >
  3. 将您的应用程序与一个服务实例绑定在一起并重新载入它:
    >cf bind-service <APP NAME> ScalingService Binding service ScalingService to app Hello in org <ORG> / space <SPACE> as <USERNAME>... OK

    提示:使用 cf restage <APP NAME> 确保您的环境变量更改起效。

    > cf restage <APP NAME> Restaging app Hello in org <ORG> / space <ORG> as <USERNAME>... -----> Downloaded app package (4.0K) -----> Downloaded app buildpack cache (4.0K)           … >

第 2 步. 做好 REST API 中所需的所有准备工作

用于 Auto-Scaling 服务的 REST API 具有以下先决条件:AccessToken、Endpoint 和 app_id。

  • AccessToken 用在每个 REST API 的授权标头中,用于指示所需的请求验证。AccessToken 是一个字符串凭证,用于访问受保护的资源,并表示通过 Cloud Foundry 过程向客户机发出的授权。请参阅 “ 用户帐户和身份验证 - 对令牌的诠释 ”,以了解 AccessToken 和 Cloud Foundry UAA 过程。当前 AccessToken 可通过 cf oauth-token 命令获得:
    >cf oauth-token Getting OAuth token... OK bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhNjIzMGE1YS1mNzE3LTQ0YjItOWM3Yi1kNGJkYThhZGU0NjkiLCJzdWIiOiI4OGViNjM2My1hMjkzLTRlZTItYWQ1MS0yOGVkMTZmZjMwNzQiLCJzY29wZSI6WyJjbG91ZF9jb250cm9sbGVyLnJlYWQiLCJwYXNzd29yZC53cml0ZSIsImNsb3VkX2NvbnRyb2xsZXIud3JpdGUiLCJvcGVuaWQiXSwiY2xpZW50X2lkIjoiY2YiLCJjaWQiOiJjZiIsImF6cCI6ImNmIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6Ijg4ZWI2MzYzLWEyOTMtNGVlMi1hZDUxLTI4ZWQxNmZmMzA3NCIsIm9yaWdpbiI6InVhYSIsInVzZXJfbmFtZSI6InRlc3RAY24uaWJtLmNvbSIsImVtYWlsIjoidGVzdEBjbi5pYm0uY29tIiwicmV2X3NpZyI6ImQ4ZTRmNDAyIiwiaWF0IjoxNDU1NjA3NTQ1LCJleHAiOjE0NTU2NTA3NDUsImlzcyI6Imh0dHBzOi8vdWFhLnRlc3QubmcuYmx1ZW1peC5uZXQvb2F1dGgvdG9rZW4iLCJ6aWQiOiJ1YWEiLCJhdWQiOlsiY2xvdWRfY29udHJvbGxlciIsInBhc3N3b3JkIiwiY2YiLCJvcGVuaWQiXX0.rOLWkEqS6fuoCkDw-6U4sySbcYSWqrn_fNQL7fNCTvQ

返回的长字符串(以 "bearer" 开头)是您将使用的 AccessToken。这个 AccessToken 还可以在 Cloud Foundry CLI 配置文件中找到。在您安装它并进行登录后,一个 config.json 文件会出现在当前用户的主目录中。在该文件中搜索 "AccessToken"。

备注 :AccessToken 仅对有限的一段时间有效。 如果 AccessToken 过时,可能向 REST API 请求返回 401 Unauthorized 响应。在这种情况下,您需要重新登录并获得最新的 AccessToken。

  • 端点 :Auto-Scaling API 服务器可充当 Auto-Scaling REST API 的端点。在将 Auto-Scaling 服务与应用程序绑定在一起后,VCAP_SERVICE 环境变量中的 Auto-Scaling 服务的 "credentials" 部分中会出现一个 "api_url" 条目。该条目是与应用程序绑定在一起的 Auto-Scaling API 服务器的 URL。请参阅 绑定凭证 ,获得有关在 Cloud Foundry 的服务凭证中使用的结构和关键字段的更多信息。
    {   …   "Auto-Scaling": [   {      "name": "Auto-Scaling-iw",      "label": "Auto-Scaling",      "plan": "free",      "credentials": {         "agentUsername": <AGENTUSERNAME>,         "api_url": "https://ScalingAPI.test.bluemix.net",         "service_id": "3f42b7ff-d939-4ff2-9a55-cb09cef9ab9e",         "app_id": "2287f442-a7f3-4799-8919-d3908c386fa3",         "url": "https://Scaling3.test.bluemix.net",         "agentPassword": <AGENTPASSWORD>      }   }  ] … }

    Auto-Scaling 服务的 “凭证” 还可以在

    cf env <APPNAME> 命令的返回结果中找到:

    cf env <APPNAME> Getting env variables for app Hello in org <ORG> / space <SPACE> as <USERNAME>... OK  System-Provided: {  "VCAP_SERVICES": {  "Auto-Scaling": [  {   "credentials": {    "agentPassword": <AGENTPASSWORD>,    "agentUsername": <AGENTUSERNAME>,    "api_url": "https://ScalingAPI.test.bluemix.net",    "app_id": "aa8d19b6-eceb-4b6e-b034-926a87e98a51",    "service_id": "8f482f78-58d8-493c-829b-635e4cbfd817",    "url": "https://Scaling.test.bluemix.net"   },   "label": "Auto-Scaling",   "name": "ScalingService",   "plan": "free",   "tags": [    "bluemix_extensions",    "ibm_created",    "dev_ops"   ]  } ...
  • 每个 REST API 中都会使用 app_id ;可以在 VCAP_SERVICE 环境变量中找到它,也可以运行 cf app <APPNAME> --guid 命令找到它:
    > cf app <APPNAME> --guid aa8d19b6-eceb-4b6e-b034-926a87e98a51 >

第 3 步. 请求 REST API 来管理您的应用程序的 Auto-Scaling 服务

现在,您已经满足了上述前提条件,您可以使用 REST API 来管理您的应用程序的 Auto-Scaling 服务。目前,您可以采用以下两种方法之一发出这个 API 请求:浏览器中的 RESTClient 插件,或者通过一个工具,比如 curl。下面,我将向您展示这两种情况。

在使用 REST Client 插件时,比如图 1 中所示的 Firefox,可以向 Auto-Scaling API 触发一个 REST 请求,以便执行您的命令。您需要提供以下插件:

  • 此 REST API 的 URL
  • 此 REST API 所需的方法和标头
  • 主体部分中的参数

图 1. 使用 REST Client 插件

使用 REST API 管理 Auto-Scaling 服务

图 1. 使用 REST Client 插件

使用 REST API 管理 Auto-Scaling 服务

Auto-Scaling Public REST API 文档中可以找到的每个 API 的详细说明。

对于 Create Policy API 这种特殊情况,您需要指定三个标头,如图 1 所示:

  • 指定 "Content-Type" 为 "application/json"
  • 指定 "Accept" 为 "application/json"
  • 指定 "Authorization" 为 AccessToken 的值

这个 API 需要 PUT 的一个方法。

在 URL 中,开头部分是 Auto-Scaling API 的端点,如您在第 2 步中所见。该 URL 的其余部分取决于您使用的 API;对于 Create Policy API,URL 的该部分的格式为 v1/autoscaler/apps/ appid /policy,其中的 "appid" 可用您想要使用 Auto-Scaling 政策设置的应用程序的 GUID 来替换。您可以通过检查 VCAP_SERVICE 获得应用程序 GUID,如第 2 步中所示。

在 Create Policy API 的主体中,您需要提供一个 JSON 格式的政策文件来定义为您的应用程序设置的缩放策略。此外,该策略设置的细节可在 Auto-Scaling Public REST API 文档中找到。

如果成功执行命令,则会返回状态码和主体,并将它们显示在 RESTClient UI 中(参见图 1)。对于这个特定的 Create Policy API,将会返回一个 "policyId"。如果出现错误,或者 Auto-Scaling API 服务器检测到错误,则会返回一个包含状态码的错误消息,该状态码表明了错误信息的原因,如图 2 所示:

图 2. 错误消息示例

使用 REST API 管理 Auto-Scaling 服务

图 2. 错误消息示例

使用 REST API 管理 Auto-Scaling 服务

您还可以通过工具(比如 curl)调用 Auto-Scaling REST API,如下面代码清单中所示。为脚本和 JSON 文件中的 CF_ORGSERVICE_NAME 这类变量提供值,然后执行以下操作:

准备应用程序:

#!/bin/bash -e     $cfcmd login -o $CF_ORG -s $CF_SPACE -u $CF_USER -p $CF_PASSWORD             if [ $? -ne 0 ]; then         echo "login failed"         exit 255     fi     $cfcmd push  $APP_NAME -p $APP_FILE         if [ $? -ne 0 ]; then         echo "push App failed"         exit 254     fi     $cfcmd create-service $service free $SERVICE_NAME     if [ $? -ne 0 ]; then         echo "create service failed"         exit 253     fi     $cfcmd bind-service $APP_NAME $SERVICE_NAME     if [ $? -ne 0 ]; then         echo "bind service failed"         exit 252     fi     $cfcmd restage  ${APP_NAME}

运行 Create Policy REST API:

if $cfcmd oauth-token | grep "Unknown command"  &> /dev/null ;      then         oauth_token=$($cfcmd oauth-token | grep bearer | sed -e s/bearer/Bearer/g)     else         oauth_token=` cat ~/.cf/config.json | grep AccessToken | awk -F ":" '{print $2}' | sed -e 's/[",]//g' | grep bearer | sed -e s/bearer/Bearer/g `     fi      app_guid=$($cfcmd app $APP_NAME --guid)     API_url=$($cfcmd env $APP_NAME | grep "api_url" | awk '{print $2}' | cut -d "," -f1 | cut -d "/"" -f2 )      # create policy     cf_url="$API_url/v1/autoscaler/apps/$app_guid/policy"     curl_cmd="curl $cf_url -X 'PUT' -H 'Content-Type:application/json'  -H 'Accept:application/json' -H 'Authorization:$oauth_token' --data-binary @policy.json -s -o response.txt -w '%{http_code}/n'"     eval status_code=/$/($curl_cmd/)     if [[ $status_code -eq 201 ]]; then         echo "create policy successfully"     else         echo "========== ERROR: create policy failed for application ${APP_NAME} with status_code: ${status_code}"         exit 251     fi

借助 curl 或类似工具,您可以获得与使用 REST 客户端浏览器插件相同的效果。然而,REST 插件可能更灵活,因为您可以用它来处理响应数据,比如,将缩放历史数据提取到一个 .csv 文件中,以便进一步分析这些数据(参见图 3)。

图 3. 显示缩放历史数据的示例

使用 REST API 管理 Auto-Scaling 服务
原文  http://www.ibm.com/developerworks/cn/cloud/library/cl-manage-auto-scaling-service-using-rest-api-trs/index.html?ca=drs-
正文到此结束
Loading...