Pivotal, Cloudn, Bluemixを体験し、Cloud Foundryの基本的な操作を学ぶ


このエントリは、[Open PaaS Advent Calendar 2015](http://www.adventar.org/calendars/803)の24日目のエントリーです。

Open PaaSということなので、シンプルにCloud Foundryを採用しているPaaSを簡単に使ってみた話です。比較目的ではありませんのであしからず。

### 使ってみて感じた事

- サービス、Buildpack  
Bluemixは、登録されているサービスやBuildpackが一番多いですが、やはり米国にある為か若干遅く感じます。Pivotal Web Servicesは、Bluemixの次に、サービス数やBuildpackの数が多く、Cloudn PaaSは、登録されているサービスやBuildpackは一番少ないですが、日本にある為さくさく動く感じがします。
- 管理ポータル  
Blumixと、Pivotal Web Servicesは管理ポータルが直感的にわかりますが、Pivotal Web Servicesは日本語化されていないです。Bluemixはかなり日本語化が進んでいる感じです。Cloudn PaaSは全て日本語ですが、前者に比べてUIは劣る感じです。
- 配置モデル
Pivotalは、Pivotal Cloud Foundryというオンプレミス用の製品を持っているので、プライベートクラウドで、情報システム部門管理のもと利用したい場合は、Pivotal Cloud Foundryの一択になります。Bluemixも、Bluemix Localというサービスもありますが、フルマネージド付きなので、全てまとめてIBMに預けたいお客様には向いているかもしれません。ホスティッド・プライベート・クラウドで利用する場合、BluemixはSoftLayerのみをターゲットにしていますが、Pivotal Cloud Foundaryは、どのホスティング事業者でも展開できます。
- オンプレ版を体験できてないのでこちらも、時間があれば、Pivotal Cloud FoundryとOSS版のCloud Foundaryも使ってみたいと思います。


---

最近Cloud Foundryが発表した[Cloud Foundry Certified Providers](https://www.cloudfoundry.org/use/cloud-foundry-certified/)によれば、Cloud Foundryを採用しているPaaS事業者やソフトウェアベンダーで、CertifiedされているPaaS事業者やソフトウェアベンダーは下記の7社だそうです。

- [CenturyLink AppFog](https://www.ctl.io/appfog/)
- [HPE Helion Cloud Foundry](https://helion.hpwsportal.com/catalog.html#/Category/%7B%22categoryId%22%3A10604%7D/Show)
- [Huawei Fusion Stage](http://e.huawei.com/us/solutions/technical/cloud-computing)
- [IBM Bluemix](http://www.ibm.com/cloud-computing/bluemix/)
- [Pivotal Cloud Foundry](http://pivotal.io/platform)
- [SAP Hana Cloud Platform](http://hcp.sap.com/)
- [Swisscom Application Cloud](https://www.swisscom.ch/en/business/enterprise/offer/cloud-data-center-services/paas/application-cloud.html)

2015/12/24現在、Certified Providersとしてあがってませんが、[NTT Communication Cloudn PaaS](https://www.ntt.com/cloudn/data/paas.html)も、Cloud Foundryを採用しています。

Cloud FoundryベースのPaaSを使用する前に、下記の記事を読んでおくと理解が進みます。[@jacopen氏](https://twitter.com/jacopen)の解説を[@jnino氏](https://twitter.com/jniino)がわかりやすくまとめてくれています。これ必見です。

- [PaaS基盤「Cloud Foundry V2」のアーキテクチャは、どうなっている？（前編）
](http://www.publickey1.jp/blog/14/paascloud_foundry_v2.html)
- [PaaS基盤「Cloud Foundry V2」のアーキテクチャは、どうなっている？（後編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2_1.html)
- [PaaS基盤「Cloud Foundry V2」内部で使われるBuildpack、Wardenコンテナの仕組みとは？（前編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2buildpack_warden.html)
- [PaaS基盤「Cloud Foundry V2」内部で使われるBuildpack、Wardenコンテナの仕組みとは？（中編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2buildpackwarden.html)
- [PaaS基盤「Cloud Foundry V2」内部で使われるBuildpack、Wardenコンテナの仕組みとは？（後編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2buildpackwarden_1.html)


読み終えたところで、Cloud Foundryベースの代表的な3つのサービス、[IBM Bluemix](http://www.ibm.com/cloud-computing/bluemix/)、[NTT Communication Cloudn PaaS](https://www.ntt.com/cloudn/data/paas.html)、[Pivotal Web Services](https://run.pivotal.io/)を使ってみたいと思います。Pivotalは、オンプミレミス用の製品を提供しているソフトウェアベンダーですが、Pivotal Cloud Foundryを簡単に体験できるPaaS「Pivotal Web Services」も提供していますので、そちらを使ってみたいと思います。


### [IBM Bluemix](http://www.ibm.com/cloud-computing/bluemix/)
- https://console.ng.bluemix.net より登録してログインします。
![ 2015-12-25 16.55.38.png](https://qiita-image-store.s3.amazonaws.com/0/42406/94765b40-09d2-9ba7-f72f-9e91eccf0247.png " 2015-12-25 16.55.38.png")
![ 2015-12-25 17.05.01.png](https://qiita-image-store.s3.amazonaws.com/0/42406/6a93e958-0b72-6195-2894-da28af7edff9.png " 2015-12-25 17.05.01.png")

- ダッシュボードより、Cloud Foundryアプリをクリック
- Web - PHPをクリックし、続行
- アプリ名（例: 1224phptest）を入力して、完了
- しばらくすると、サンプルページ（例: http://1224phptest.mybluemix.net）が表示されます。
- [Cloud Foundry CLI](https://github.com/cloudfoundry/cli/releases)をダウンロードし、インストールします。
- スターター・コード（例: 1224phptest）のダウンロードし解凍します。**今回はこのサンプルアプリを少し編集して、他のPaaSでも使います。少しでもCloud FoundryベースのPaaSでは互換性があるんだなと感じてもらう為です。**16〜18行目を下記のコードに変更してください。

```
				<p class='description'></p> 
				<span class="blue">SERVER_ADDR: </span> 
				<?php echo $_ENV['SERVER_ADDR']; ?>
```

それでは、早速``CF``コマンドを使って操作していきます。``CF``コマンドについては[Getting Started with the cf CLI](https://docs.cloudfoundry.org/devguide/installcf/whats-new-v6.html)を参照するといいと思います。

#### API endpointを設定し、ログインし、サンプルアプリをデプロイします。
IBM Bluemixは、APIのバージョンが2.40.0だとわかります。デプロイが終わったらブラウザーで,
1224phptest.mybluemix.netにアクセスします。正しくPHPアプリケーションがデプロイされているのがわかります。

```
$ cd 1224phptest //ダウンロードし解凍したディレクトリ
$ cf api https://api.ng.bluemix.net
$ cf api
API endpoint: https://api.ng.bluemix.net (API version: 2.40.0)
$ cf login -u [user name] -p [password]
$ cf push 1224phptest
Using manifest file .../devtree/1224phptest/manifest.yml
中略...
requested state: started
instances: 1/1
usage: 128M x 1 instances
urls: 1224phptest.mybluemix.net
package uploaded: Fri Dec 25 02:43:13 UTC 2015
stack: cflinuxfs2
buildpack: php_buildpack

     state     since                    cpu    memory          disk           details   
#0   running   2015-12-25 11:43:54 AM   0.0%   55.3M of 128M   124.3M of 1G
```

#### デプロイしたアプリケーションを確認します。
デフォルトのドメイン``mybluemix.net``で、アプリがデプロイされているのがわかります。
メモリが128M、インスタンスが1つ、ディスクが1Gで動いているのがわかります。

```
$ cf apps
Getting apps in org [org name] / space dev as [space name]...
OK

name          requested state   instances   memory   disk   urls   
1224phptest   started           1/1         128M     1G     1224phptest.mybluemix.net   
```

#### メモリサイズやインスタンス数を増やしたりしてみます。
数十秒で簡単にメモリサイズや、インスタンス数を増やせます。ブラウザーからリロードを繰り返すと、サーバーのIPアドレスが変更されているので、負荷分散も行われているのがわかります。

```
$ cf scale 1224phptest -i 4 -m 256M
This will cause the app to restart. Are you sure you want to scale 1224phptest?> y
中略...
$ cf apps
Getting apps in org [org name] / space dev as [org name]...
OK

name          requested state   instances   memory   disk   urls   
1224phptest   started           4/4         256M     1G     1224phptest.mybluemix.net   
isuciot1      stopped           0/1         512M     1G     isuciot1.mybluemix.net  
```

#### アプリケーションの削除
作成したアプリケーションは使わない場合必ず削除しておきましょう。

```
$ cf delete 1224phptest

Really delete the app 1224phptest?> y
Deleting app 1224phptest in org [org name] / space default as [space name]...
OK

```

#### User, Org, Space を確認します。
org, spaceを作成し、roleの設定などできますが、ここではデフォルトのままで使用します。

```
cf target
                   
API endpoint:   https://api.ng.bluemix.net (API version: 2.40.0)   
User:           [user name]   
Org:            [org name]   
Space:          [space name]
```

#### buildpackを確認します。
buildpackとは、Herokuが作った任意の言語やフレームワークを利用できるようにした仕組みです。2015/12/24現在、Bluemixには16のbuildpackが登録されているようです。

```
cf buildpacks
Getting buildpacks...

buildpack                                 position   enabled   locked   filename   
liberty-for-java                          1          true      false    buildpack_liberty-for-java_v2.3-20151208-1311-yp.zip   
sdk-for-nodejs                            2          true      false    buildpack_sdk-for-nodejs_v2.8-20151209-1403-yp.zip   
noop-buildpack                            3          true      false    noop-buildpack-20140311-1519.zip   
java_buildpack                            4          true      false    java-buildpack-v3.3.zip   
ruby_buildpack                            5          true      false    ruby_buildpack-cached-v1.6.7.zip   
nodejs_buildpack                          6          true      false    nodejs_buildpack-cached-v1.5.0.zip   
go_buildpack                              7          true      false    go_buildpack-cached-v1.6.2.zip   
python_buildpack                          8          true      false    python_buildpack-cached-v1.5.1.zip   
php_buildpack                             9          true      false    php_buildpack-cached-v4.1.5.zip   
aspnet5-experimental                      10         true      false    buildpack_aspnet5-experimental_v0.7-20151022-1257.zip   
xpages_buildpack                          11         true      false    xpages_buildpack_v9.0.1-bmix-pb-20151016-8000.zip   
sdk-for-nodejs-v3beta                     12         true      false    buildpack_sdk-for-nodejs_v3.0beta-20151211-2041-yp.zip   
liberty-for-java-v1                       13         true      false    buildpack_liberty-for-java_v1.22-20150824-1104-yp.zip   
aspnet5-experimental_v0_6-20150916-1220   14         true      false    buildpack_aspnet5-experimental_v0.6-20150916-1220.zip   
sdk-for-nodejs_v2_7-20151118-1003         15         true      false    buildpack_sdk-for-nodejs_v2.7-20151118-1003-yp.zip   
liberty-for-java_v2_2-20151119-1720       16         true      false    buildpack_liberty-for-java_v2.2-20151119-1720-yp.zip   
```

#### Bluemixで利用できるサービスを確認します。
2015/12/24現在、Bluemixでは123のサービスが登録されているので,
全てのサービスを表示すると時間がかかります。

```
$ cf marketplace
Getting services from marketplace in org [org name] / space dev as [space name]...
OK

service                           plans                                                                                                                                                                                                    description   
API Management                    Standard v2*                                                                                                                                                                                             Publish, manage, and consume APIs.   
AdvancedMobileAccess              Gold*, Bronze*                                                                                                                                                                                           Finely tune mobile apps with operational analytics, and ensure communications with back end systems are secure.   
Analytics for Apache Hadoop       Free                                                                                                                                                                                                     IBM Analytics for Apache Hadoop is a quick and free option to try Apache Hadoop and BigInsights. For production use or proof of concept at scale, use the IBM BigInsights for Apache Hadoop service.   
AppScan Dynamic Analyzer          standard*                                                                                                                                                                                                A robust, practical security vulnerability assessment for your web applications.   
AppScan Mobile Analyzer           standard*                                                                                                                                                                                                A robust, practical security vulnerability assessment for your Android applications.   
Application Security Manager      asm-service-plan                                                                                                                                                                                         A practical way to assess the business risk of your web applications.   
Auto-Scaling                      free                                                                                                                                                                                                     Automatically increase or decrease the number of application instances based on a policy you define. 
中略...
cleardb                           spark                                                                                                                                                                                                    Highly available MySQL for your Apps.   
以下省略...
$ cf marketplace -s cleardb
Getting service plan information for service cleardb as [org name]...
OK

service plan   description                                          free or paid   
spark          Great for getting started and developing your apps   free   
```

#### アプリケーションからDBに接続してみる。
MySQLインスタンスを作成し、[phpmyadmin](https://github.com/dmikusa-pivotal/cf-ex-phpmyadmin)というPHPアプリケーションをデプロイして後接続してみます。
MySQLデータベースは``cleardb``を利用します。詳細情報を念のため、[Web](https://console.ng.bluemix.net/catalog/services/cleardb-mysql-database/)で確認します。DBサイズ500Mまで、Freeという事です。

```
$ git clone https://github.com/dmikusa-pivotal/cf-ex-phpmyadmin
$ cd cf-ex-phpmyadmin
$ cf create-service cleardb spark phpmyadmin-mysql
$ cf services
Getting services in org [org name]/ space dev as [space name]...
OK

name                       service           plan     bound apps   last operation   
phpmyadmin-mysql           cleardb           spark                 create succeeded
$ vi manifest.yml
	下記を変更
	name: phpmyadmin //アプリ名になります
	host: phpmyadmin-host //ユニークな名前
	domain: mybluemix.net //Bluemixデフォルトのドメイン名
	services: phpmyadmin-mysql //作成したMySQLインスタンス
$ cf push
$ cf services   
```

#### データベース接続確認
http://phpmyadmin-host.mybluemix.net にアクセスし、DB管理ポータルを確認します。
ユーザー名とパスワードは、phpmyadminの環境変数``VCAP_SERVICES``の``username``と``password``を参照してください。

```
$ cf env phpmyadmin
```

#### アプリケーションとサービスの削除
デプロイしたアプリケーションとサービスを削除しておきます。

```
$ cf apps //アプリケーション名の確認
$ cf services //サービス名の確認
$ cf unbind-service phpmyadmin phpmyadmin-mysql
$ cf delete-service phpmyadmin-mysql
$ cf delete phpmyadmin
$ cf apps //削除されたか確認
$ cf services //削除されたか確認
```

---------------------
### [NTT Communication Cloudn PaaS](https://www.ntt.com/cloudn/data/paas.html)
アカウントを作成して、ログインします。
![ 2015-12-25 13.09.58.png](https://qiita-image-store.s3.amazonaws.com/0/42406/63602345-1201-8f3e-8343-93c5c94975a5.png " 2015-12-25 13.09.58.png")

PaaSをクリックします。
![ 2015-12-25 13.11.29.png](https://qiita-image-store.s3.amazonaws.com/0/42406/4f0b214e-e3bb-251c-eb76-ee54c1e70c62.png " 2015-12-25 13.11.29.png")

UIからもアプリケーションを作成できますが、Bluemixと同じように``cf``コマンドで操作したいと思います。基本的にBluemixでやったことと同じ操作をします。違いがある場合にコメントしていきたいと思います。

Cloudn PaaSでは、``gud``と呼ばれるコマンドを使用して操作するようにありますが、``cf``コマンドで問題なさそうですので、ここでは``cf``コマンドで操作します。

Cloudnでは、``cf login``時に、メールアドレスや自分で設定したパスワードではなく、アクセスキーIDと秘密鍵で認証します。Cloudn管理ポータルの右上をクリックして、APIアクセスキー・秘密鍵管理をクリックして、サービス共通瀬キュションにあるアクセスキーIDと秘密鍵をメモっておきます。

では早速、Cloudnにアプリケーションをデプロイしていきましょう。

#### API endpointを設定し、ログインし、サンプルアプリをデプロイします。
Cloudn PaaSは、APIのバージョンが2.4.0だとわかります。デプロイが終わったらブラウザーで,
1224phptest.paas.jp-e1.cloudn-service.comにアクセスします。正しくPHPアプリケーションがデプロイされているのがわかります。

```
$ cd 1224phptest
$ cf api api.paas.jp-e1.cloudn-service.com
Setting api endpoint to api.paas.jp-e1.cloudn-service.com...
OK

                   
API endpoint:   https://api.paas.jp-e1.cloudn-service.com (API version: 2.4.0)  
$ cf login -u [user name] -p [password]
$ vi manifest.yml
applications:
- path: .
  memory: 128M
  instances: 1
#  domain: mybluemix.net //コメントアウト
  name: 1224phptest
  host: 1224phptest
  disk_quota: 1024M
#  buildpack: php_buildpack //コメントアウト
$ cf push
Using manifest file .../devtree/1224phptest/manifest.yml
中略...
requested state: started
instances: 1/1
usage: 128M x 1 instances
urls: 1224phptest.paas.jp-e1.cloudn-service.com
package uploaded: unknown
stack: lucid64
buildpack: PHP

     state     since                    cpu    memory        disk          details   
#0   running   2015-12-25 03:14:32 PM   0.0%   16M of 128M   74.2M of 1G    
```

#### デプロイしたアプリケーションを確認します。
デフォルトのドメイン``paas.jp-e1.cloudn-service.com``で、アプリがデプロイされているのがわかります。
メモリが128M、インスタンスが1つ、ディスクが1Gで動いているのがわかります。

```
$ cf apps
Getting apps in org [org name] / space default as [space name]...
OK

name          requested state   instances   memory   disk   urls   
1224phptest   started           1/1         128M     1G     1224phptest.paas.jp-e1.cloudn-service.com  
```

#### メモリサイズやインスタンス数を増やしたりしてみます。
数十秒で簡単にメモリサイズや、インスタンス数を増やせます。ブラウザーからリロードを繰り返すと、サーバーのIPアドレスが変更されているので、負荷分散も行われているのがわかります。

```
cf scale 1224phptest -i 4 -m 256M
This will cause the app to restart. Are you sure you want to scale 1224phptest?> y
中略...
cf apps
Getting apps in org [org name] / space dev as [org name]...
OK

name          requested state   instances   memory   disk   urls   
1224phptest   started           4/4         256M     1G     1224phptest.paas.jp-e1.cloudn-service.com 
```

#### アプリケーションの削除
作成したアプリケーションは使わない場合必ず削除しておきましょう。

```
$ cf delete 1224phptest

Really delete the app 1224phptest?> y
Deleting app 1224phptest in org [org name] / space default as [space name]...
OK

```

#### User, Org, Space を確認します。
org, spaceを作成し、roleの設定などできますが、ここではデフォルトのままで使用します。

```
$ cf target
                   
API endpoint:   https://api.paas.jp-e1.cloudn-service.com (API version: 2.4.0)
User:           [user name]   
Org:            [org name]   
Space:          [space name]

```

#### buildpackを確認します。
buildpackとは、Herokuが作った任意の言語やフレームワークを利用できるようにした仕組みです。2015/12/24現在、Cloudn PaaSには6つのbuildpackが登録されているようです。

```
$ cf buildpacks
Getting buildpacks...

buildpack           position   enabled   locked   filename   
cloudn-php          6          true      false    php_buildpack_v2015.11.1.zip   
cloudn-java         1          true      false    java_buildpack_v2014.12.1.zip   
cloudn-ruby         2          true      false    ruby_buildpack_v2015.03.1.zip   
cloudn-node         3          true      false    nodejs_buildpack.zip   
cloudn-go           4          true      false    go_buildpack.zip   
cloudn-staticfile   5          true      false    staticfile_buildpack_v2015.08.1.zip 
```

#### Cloudn PaaSで利用できるサービスを確認します。
2015/12/24現在、Cloudn PaaSでは4のサービスが登録されていることがわかります。

```
$ cf marketplace
Getting services from marketplace in org [org name] / space default as [space name]...
OK

service         plans     description   
appmonitoring   default   App monitoring service   
jobscheduler    default   Job scheduling service   
mysql           default   MySQL database   
postgresql      default   PostgreSQL database   

TIP:  Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.
$ cf marketplace -s mysql //何故か、詳細を取得できないです。
Getting service plan information for service mysql as [space name]...
FAILED
Could not find service
```

#### アプリケーションからDBに接続してみる。
MySQLインスタンスを作成し、[phpmyadmin](https://github.com/dmikusa-pivotal/cf-ex-phpmyadmin)というPHPアプリケーションをデプロイして後接続してみます。
MySQLデータベースは``mysql``を利用します。

```
$ cd cf-ex-phpmyadmin
$ cf create-service mysql default phpmyadmin-mysql
$ cf services
Getting services in org [org name]/ space dev as [space name]...
OK

name                       service           plan     bound apps   last operation   
phpmyadmin-mysql           cleardb           spark                 create succeeded
$ vi manifest.yml
	下記を変更
	name: phpmyadmin //アプリ名になります
	host: phpmyadmin-host //ユニークな名前
	domain: コメントアウト //Bluemixデフォルトのドメイン名
	services: phpmyadmin-mysql //作成したMySQLインスタンス
$ cf push
```

#### データベース接続確認
http://phpmyadmin-host.paas.jp-e1.cloudn-service.com にアクセスし、DB管理ポータルを確認します。
ユーザー名とパスワードは、phpmyadminの環境変数``VCAP_SERVICES``の``username``と``password``を参照してください。

```
$ cf env phpmyadmin
```

#### アプリケーションとサービスの削除
デプロイしたアプリケーションとサービスを削除しておきます。

```
$ cf apps //アプリケーション名の確認
$ cf services //サービス名の確認
$ cf unbind-service phpmyadmin phpmyadmin-mysql
$ cf delete-service phpmyadmin-mysql
$ cf delete phpmyadmin
$ cf apps //削除されたか確認
$ cf services //削除されたか確認
```


---------------------------

### [Pivotal Web Services](https://run.pivotal.io/)
![ 2015-12-25 16.16.14.png](https://qiita-image-store.s3.amazonaws.com/0/42406/c46813b7-e9a5-b4cb-dc19-9953757abeb5.png " 2015-12-25 16.16.14.png")

アカウントを作成して、ログインします。
![ 2015-12-25 16.17.15.png](https://qiita-image-store.s3.amazonaws.com/0/42406/88cf8d4a-cee4-1694-7ed1-1ab2749cade5.png " 2015-12-25 16.17.15.png")

UIからもアプリケーションを作成できますが、Bluemixと同じように``cf``コマンドで操作したいと思います。基本的にBluemixでやったことと同じ操作をします。違いがある場合にコメントしていきたいと思います。

では早速、Pivotal Web Servicesにアプリケーションをデプロイしていきましょう。

#### API endpointを設定し、ログインし、サンプルアプリをデプロイします。
Pivotal Web Servicesは、APIのバージョンが2.4.0だとわかります。デプロイが終わったらブラウザーで、
1224phptest.cfapps.ioにアクセスします。正しくPHPアプリケーションがデプロイされているのがわかります。

```
$ cd 1224phptest
$ cf api api.run.pivotal.io
Setting api endpoint to api.run.pivotal.io...
OK

                   
API endpoint:   https://api.run.pivotal.io (API version: 2.44.0)   
Not logged in. Use 'cf login' to log in.
cf login -u <user name> -p <password> 
$ vi manifest.yml
applications:
- path: .
  memory: 128M
  instances: 1
#  domain: mybluemix.net //コメントアウト
  name: 1224phptest
  host: 1224phptest
  disk_quota: 1024M
#  buildpack: php_buildpack //コメントアウト
$ cf push
Using manifest file .../devtree/1224phptest/manifest.yml
中略...
requested state: started
instances: 1/1
usage: 128M x 1 instances
urls: 1224phptest.cfapps.io
package uploaded: Fri Dec 25 07:07:14 UTC 2015
stack: cflinuxfs2
buildpack: php_buildpack

     state     since                    cpu    memory         disk           details   
#0   running   2015-12-25 04:07:57 PM   0.3%   612K of 128M   151.5M of 1G      
```

#### デプロイしたアプリケーションを確認します。
デフォルトのドメイン``cfapps.io`で、アプリがデプロイされているのがわかります。
メモリが128M、インスタンスが1つ、ディスクが1Gで動いているのがわかります。

```
$ cf apps
Getting apps in org [org name] / space default as [space name]...
OK

name          requested state   instances   memory   disk   urls   
1224phptest   started           1/1         128M     1G     1224phptest.cfapps.io
```

#### メモリサイズやインスタンス数を増やしたりしてみます。
数十秒で簡単にメモリサイズや、インスタンス数を増やせます。ブラウザーからリロードを繰り返すと、サーバーのIPアドレスが変更されているので、負荷分散も行われているのがわかります。

```
$ cf scale 1224phptest -i 4 -m 256M
This will cause the app to restart. Are you sure you want to scale 1224phptest?> y
中略...
$ cf apps
Getting apps in org [org name] / space dev as [org name]...
OK

name          requested state   instances   memory   disk   urls   
1224phptest   started           4/4         256M     1G     1224phptest.cfapps.io
```

#### アプリケーションの削除
作成したアプリケーションは使わない場合必ず削除しておきましょう。

```
$ cf delete 1224phptest

Really delete the app 1224phptest?> y
Deleting app 1224phptest in org [org name] / space default as [space name]...
OK

```



#### User, Org, Space を確認します。
org, spaceを作成し、roleの設定などできますが、ここではデフォルトのままで使用します。

```
$ cf target
                   
API endpoint:   https://api.run.pivotal.io (API version: 2.44.0) 
User:           [user name]   
Org:            [org name]   
Space:          [space name]

```

#### buildpackを確認します。
buildpackとは、Herokuが作った任意の言語やフレームワークを利用できるようにした仕組みです。2015/12/24現在、Pivotal Web Servicesには9つのbuildpackが登録されているようです。

```
$ cf buildpacks
Getting buildpacks...

buildpack              position   enabled   locked   filename   
staticfile_buildpack   1          true      false    staticfile_buildpack-cached-v1.2.3.zip   
java_buildpack         2          true      false    java-buildpack-v3.3.1.zip   
ruby_buildpack         3          true      false    ruby_buildpack-cached-v1.6.9.zip   
nodejs_buildpack       4          true      false    nodejs_buildpack-cached-v1.5.3.zip   
go_buildpack           5          true      false    go_buildpack-cached-v1.7.0.zip   
python_buildpack       6          true      false    python_buildpack-cached-v1.5.2.zip   
php_buildpack          7          true      false    php_buildpack-cached-v4.3.0.zip   
liberty_buildpack      8          true      false    liberty_buildpack.zip   
binary_buildpack       9          true      false    binary_buildpack-cached-v1.0.1.zip
```

#### Pivotal Web Servicesで利用できるサービスを確認します。
2015/12/24現在、Pivotal Web Servicesでは24のサービスが登録されていることがわかります。

```
$ cf marketplace
service          plans                                                                                description   
3scale           free_appdirect, basic_appdirect*, pro_appdirect*                                     API Management Platform   
app-autoscaler   bronze, gold                                                                         Scales bound applications in response to load (beta)   
blazemeter       free-tier, basic1kmr*, pro5kmr*                                                      Performance Testing Platform   
cedexisopenmix   opx_global*, openmix-gslb-with-fusion-feeds*                                         Openmix Global Cloud &amp; Data Center Load Balancer   
cedexisradar     free-community-edition                                                               Free Website&amp; Mobile App Performance Reports   
cleardb          spark, boost*, amp*, shock*                                                          Highly available MySQL for your Apps.   
中略...
$ cf marketplace -s cleardb
Getting service plan information for service cleardb as [org name]...
OK

service plan   description                                                                     free or paid   
spark          Great for getting started and developing your apps                              free   
boost          Best for light production or staging your applications                          paid   
amp            For apps with moderate data requirements                                        paid   
shock          Designed for apps where you need real MySQL reliability, power and throughput   paid   

```


#### アプリケーションからDBに接続してみる。
MySQLインスタンスを作成し、[phpmyadmin](https://github.com/dmikusa-pivotal/cf-ex-phpmyadmin)というPHPアプリケーションをデプロイして後接続してみます。
MySQLデータベースは``cleardb``の無料プラン`spark`を利用します。

```
$ cd cf-ex-phpmyadmin
$ cf create-service cleardb spark phpmyadmin-mysql
$ $ cf services
Getting services in org [org name] / space development as [email]...
OK

name               service   plan    bound apps   last operation   
phpmyadmin-mysql   cleardb   spark                create succeeded
$ vi manifest.yml
	下記を変更
	name: phpmyadmin //アプリ名になります
	host: phpmyadmin-host //ユニークな名前
	domain: コメントアウト //デフォルトのドメイン名
	services: phpmyadmin-mysql //作成したMySQLインスタンス
$ cf push
```

注意: ステージング中、git cloneが失敗したので、buildpackの行は削除した。

```
Failed to clone git repository at https://github.com/cloudfoundry/php-buildpack.git
Exit status 1
Staging failed: Exited with status 1

FAILED
StagingError
```


#### データベース接続確認
http://phpmyadmin-host.cfapps.io にアクセスし、DB管理ポータルを確認します。
ユーザー名とパスワードは、phpmyadminの環境変数``VCAP_SERVICES``の``username``と``password``を参照してください。

```
$ cf env phpmyadmin
```

#### アプリケーションとサービスの削除
デプロイしたアプリケーションとサービスを削除しておきます。

```
$ cf apps //アプリケーション名の確認
$ cf services //サービス名の確認
$ cf unbind-service phpmyadmin phpmyadmin-mysql
$ cf delete-service phpmyadmin-mysql
$ cf delete phpmyadmin
$ cf apps //削除されたか確認
$ cf services //削除されたか確認
```


### コミュニティ
Cloud Foundryユーザー会、Bluemixユーザー会などに入っておくと有用な情報を入手することができますので、是非登録しておきましょう。

- PaaS勉強会
 - [Web](http://paas.connpass.com/)
 - [Google Group](https://groups.google.com/forum/?hl=ja#!forum/paasjp)
- Cloud Foundryユーザー会
 - [Web](http://cloudfoundry.gr.jp/)
- Bluemixユーザー会
 - [Facebook](https://www.facebook.com/groups/bmxug/) 


### 参考
- [Cloud Foundry](https://www.cloudfoundry.org/)
- [Cloud Foundry Documentation](https://docs.cloudfoundry.org/)
- [PaaS基盤「Cloud Foundry V2」のアーキテクチャは、どうなっている？（前編）
](http://www.publickey1.jp/blog/14/paascloud_foundry_v2.html)
- [PaaS基盤「Cloud Foundry V2」のアーキテクチャは、どうなっている？（後編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2_1.html)
- [PaaS基盤「Cloud Foundry V2」内部で使われるBuildpack、Wardenコンテナの仕組みとは？（前編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2buildpack_warden.html)
- [PaaS基盤「Cloud Foundry V2」内部で使われるBuildpack、Wardenコンテナの仕組みとは？（中編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2buildpackwarden.html)
- [PaaS基盤「Cloud Foundry V2」内部で使われるBuildpack、Wardenコンテナの仕組みとは？（後編）](http://www.publickey1.jp/blog/14/paascloud_foundry_v2buildpackwarden_1.html)
- http://www.toughdev.com/articles.php?tag=Bluemix
- http://qiita.com/morikat/items/5c777708de4f4b272435
- http://www.toughdev.com/viewpost.php?id=379&t=1&v=1#s0

---

ご意見等あれば、[Facebook](http://facebook.com/kkitase) | [Twitter](http://twitter.com/kkitase) までお願いします。