:wq!

Predix Cloudのチュートリアルを試してみた(1)

ども、takiponeです。

GE社が提供するPredixプラットフォームの中核となるPredix Cloudを触っていきます。

Predixとは

Predixの模式図

Predixは、IoT(Internet of Things)のうち産業向けに特化したIndustrial Internetを実現するためのプラットフォームです。Connectivity(デバイス)、Cloud Services(バックエンド)、Applications(フロントエンド)という全てのレイヤーをカバーする壮大なアーキテクトを描きつつ、既にGE社内で開発・利用された実績のある強力なコンポーネント群が揃っている印象です。

非ITベンダーであるGE社が自社でドッグフーディングしながらPredixをバリバリ開発していく様は、ECの巨人であるAmazon.comがクラウドサービスとしてのAWSを開発・展開していく姿に重なって見えるのは自分だけでしょうか。

まだまだGE公式の情報が多くユーザーサイドの情報が少ないのが現状で、日本語の情報はGEのプレスを伝える二次媒体がほとんどです。いろいろな方が試して情報交換するようになっていったら嬉しいなぁと考えています。

まずはチュートリアルから

さて、Predixを触る最初の一歩としては、Predixのドキュメントにあるチュートリアルが良さそうです。

評価アカウントの作成

2016年5月現在、PredixはLimited Availabilityとなっており、60日間無償の評価アカウントを作成することができます。登録ページに情報を登録し、確認メールが送られてきたら指示に従って登録を続けます。確認メールは翌営業日くらいに届くので、気長に待ちましょう。また、登録条件は以下のどちらかで意外とシビアな点に気をつけましょう。

  • Business email address, AND business/office street address, AND business phone number AND business name, where applicable
  • Personal email address, AND private residence street address, AND private phone number AND business name, where applicable

以下のようなメールが送られてくればOKです。

Cloud Foundry CLIのセットアップ

Predix CloudはAWS上にOSS PaaSのCloud Foundryをベースに構成されており、操作はCloud FoundryのCLIツールを用います。GitHubのダウンロードページから利用するマシンのOSに対応するインストーラをダウンロード、インストールします。CLIはターミナルでcfコマンドを実行します。以下のような表示になればOKです。

$ cf
名前:
   cf - Cloud Foundry と対話するためのコマンド・ライン・ツール

使用法:
   cf [グローバル・オプション] コマンド [引数...] [コマンド・オプション]

バージョン:
   6.18.0+b22884b-2016-05-10
 :(以下略)
$

作成したアカウントでPredix Cloudにログインするために、エンドポイントhttps://api.system.aws-usw02-pr.ice.predix.ioに対してcf loginを実行します。認証情報を聞かれるので、作成したアカウントのメールアドレスとパスワードを入力しましょう。

$ cf login -a https://api.system.aws-usw02-pr.ice.predix.io
API エンドポイント: https://api.system.aws-usw02-pr.ice.predix.io

Email> test@example.com

Password>
認証中です...
OK

組織 test@example.com をターゲットにしました

スペース dev をターゲットにしました



API エンドポイント:   https://api.system.aws-usw02-pr.ice.predix.io (API バージョン: 2.51.0)
ユーザー:             test@example.com
組織:                 test@example.com
スペース:             dev
$

表示の通り、Predix Cloudではホストするアプリケーションをグループ化する単位としてスペースを用いるようです。既定でdevスペースが作成され、これを利用します。

サンプルアプリケーションのデプロイ

最初の一歩ということで、HTMLファイルをホストするサンプルアプリ( https://github.com/PredixDev/Predix-HelloWorld-WebApp )をデプロイしてみます。まずはgitでマシンにアプリのデータをダウンロードします。

$ cd Repos/
$ git clone https://github.com/PredixDev/Predix-HelloWorld-WebApp
Cloning into 'Predix-HelloWorld-WebApp'...
remote: Counting objects: 11, done.
remote: Total 11 (delta 0), reused 0 (delta 0), pack-reused 11
Unpacking objects: 100% (11/11), done.
Checking connectivity... done.
$

続いて、マニフェストファイルを編集し、9行目を一意なアプリケーション名に変更します。

$ cd Predix-HelloWorld-WebApp/
$ vim manifest.yml
---
#
#  A basic hello world application
#  This application, and steps to deploy are described in full in the getting started guide on predix.io
#  Step 1 is to change your application name, save, exit, and cf push
#  Step 2 - After you have your application running you can bind to the services below as described on predix.io

applications:
  - name: hello-world-app-takipone # Step 1: Change your application name
    buildpack: staticfile_buildpack
    #path: dist
    memory: 64M
    stack: cflinuxfs2
  :(以下略)

では、アプリケーションでデプロイするcf pushを実行します。

$ cf push
マニフェスト・ファイル /Users/ryuta/Repos/Predix-HelloWorld-WebApp/manifest.yml を使用しています

スタック cflinuxfs2 を使用しています...
OK
test@example.com としてアプリ hello-world-app-takipone を組織 test@example.com / スペース dev 内に作成しています...
OK

経路 hello-world-app-takipone.run.aws-usw02-pr.ice.predix.io を作成しています...
OK

hello-world-app-takipone.run.aws-usw02-pr.ice.predix.io を hello-world-app-takipone にバインドしています...
OK

hello-world-app-takipone をアップロードしています...
次のパスからアプリ・ファイルをアップロードしています: /Users/ryuta/Repos/Predix-HelloWorld-WebApp
467B、3 個のファイルをアップロードしています
Done uploading
OK


test@example.com として組織 test@example.com / スペース dev 内のアプリ hello-world-app-takipone を開始しています...
-----> Downloaded app package (4.0K)
-------> Buildpack version 1.3.1
Downloaded [file:///var/vcap/data/dea_next/admin_buildpacks/ea86ca91-cc63-48c9-b5df-14074bcec3c2_d84ffdf7306e272d1a09877bb00df9cce1583401/dependencies/https___pivotal-buildpacks.s3.amazonaws.com_concourse-binaries_nginx_nginx-1.9.10-linux-x64.tgz]
-----> Using root folder
-----> Copying project files into public/
-----> Setting up nginx

-----> Uploading droplet (2.5M)

1 個の中の 1 個のインスタンスが実行中です

アプリが開始されました


OK

アプリ hello-world-app-takipone はこのコマンド `sh boot.sh` を使用して開始されました

test@example.com として組織 test@example.com / スペース dev 内のアプリ hello-world-app-takipone の正常性と状況を表示しています...
OK

要求された状態: started
インスタンス: 1/1
使用法: 64M x 1 インスタンス
URL: hello-world-app-takipone.run.aws-usw02-pr.ice.predix.io
最後アップロード日時: Sat May 14 16:37:34 UTC 2016
スタック: unknown
ビルドパック: staticfile_buildpack

     状態   次の日時から             CPU    メモリー          ディスク         詳細
#0   実行   2016-05-15 01:37:48 AM   0.0%   64M の中の 2.6M   1G の中の 5.3M
suzaku:Predix-HelloWorld-WebApp ryuta$ cf apps
test@example.com として組織 test@example.com / スペース dev 内のアプリを取得しています...
OK

名前                       要求された状態   インスタンス   メモリー   ディスク   URL
hello-world-app-takipone   started          1/1            64M        1G         hello-world-app-takipone.run.aws-usw02-pr.ice.predix.io
$

たんまりと出てくる出力からデプロイする様子が見えますね。cf appsでPredix Cloudでホストしているアプリケーション一覧を確認します。

$ cf apps
test@example.com として組織 test@example.com / スペース dev 内のアプリを取得しています...
OK

名前                       要求された状態   インスタンス   メモリー   ディスク   URL
hello-world-app-takipone   started          1/1            64M        1G         hello-world-app-takipone.run.aws-usw02-pr.ice.predix.io
$

末尾に出てくる*.run.aws-usw02-pr.ice.predix.ioがアプリのエンドポイントです。一見するとHTTP:80でアクセスするようにも見えますが、HTTPS:443でアクセスするものでした。

$ curl https://hello-world-app-takipone.run.aws-usw02-pr.ice.predix.io/
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World
</body>
</html>
$

HTTPレスポンスが返ってきました!
デプロイの流れ自体は、一般的なCloud Foundryのアプリと特に変わらないようです。

Predix Cloudの特徴は、様々な構成済みサービスにあるようなので、次回以降それらのサービスと自前のアプリケーションをどう組み合わせるのかについて試していこうと思います。

おまけ

cf loginで指定するAPIのエンドポイントやアプリのエンドポイントのDNS問い合わせ結果を見てみると、AWSのOregonリージョンで実行されている様子がわかりますよ。

$ host api.system.aws-usw02-pr.ice.predix.io
api.system.aws-usw02-pr.ice.predix.io is an alias for CF1-System-elb-651552862.us-west-2.elb.amazonaws.com.
CF1-System-elb-651552862.us-west-2.elb.amazonaws.com has address 54.68.193.199
CF1-System-elb-651552862.us-west-2.elb.amazonaws.com has address 52.35.69.140
$ host world-app-takipone.run.aws-usw02-pr.ice.predix.io
world-app-takipone.run.aws-usw02-pr.ice.predix.io is an alias for CF1-Run-elb-1720144338.us-west-2.elb.amazonaws.com.
CF1-Run-elb-1720144338.us-west-2.elb.amazonaws.com has address 54.191.220.138
CF1-Run-elb-1720144338.us-west-2.elb.amazonaws.com has address 52.25.222.152
$

まとめ

Predix Cloudのチュートリアル1回目ということで、アカウント作成とサンプルアプリのデプロイまでを試してみました。
60日無償のお試しができるので、興味のある方はぜひ触ってみてください!