APIエコノミーにおける基盤構築

Cloud Foundry」と呼ばれるオープンソースのPaaS(Platform as a Service)ソフトウェアの登場により、クラウドが身近なものになってきています。Pivotal、NTTコミュニケーションズ、IBMといった企業からCloud Foundryをベースにしたクラウドサービスが提供されています。

今回は、その中でも、Cloud Foundryの生みの親であるPrivotalが提供する「Privotal Web Services」を使った基盤構築手順を紹介します。

クレジットカードの登録なしで、$87ドル分まで利用できるため、スマホの海外利用で言うところ「パケ死」のような心配もありません。「cf push」コマンド一つでクラウドにAPI公開できるCloud Foundryの威力を、ぜひ体験してみてください。

Pivotal Web Servicesのアカウント作成

Pivotal Web Servicesにアクセスし、「SIGN UP FOR FREE」をクリックします。

Pivotal Web Servicesのホーム画面

名前、苗字、メールアドレス、パスワードを入力し、Sign Upをクリックします。

Sign Up画面

入力したメールアドレスにアクティベーションリンクが送られました。

アクティベーションリンク送付画面

送られたメールを確認します。「Verify your email address」をクリックします。

受信したEメールの内容

SMS認証画面が表示されます。認証方法を「SMS」、国を「Japan」とし、携帯電話番号を入力し、「Send me my code」をクリックします。

SMS認証画面

お手元の携帯電話にSMSが届きますので確認します。記載されている6桁数字の「Verification Code」を入力します。

Verification Code入力画面

任意の組織名やプロジェクト名を入力します。

プロジェクト名入力画面

登録が完了し、ホーム画面が表示されます。

Pivotal Web Servicesのホーム画面

CF CLIのインストールとサンプルアプリのデプロイ

上図の「Tools」をクリックすると、以下の画面が表示されます。

CF CLIのダウンロード画面

CF CLIをインストールします。Mac(最近のものであれば64bit)の場合は「DOWNLOAD FOR MAC OS X 64BIT」をクリックします。ダウンロードされた「cf-cli-installer_6.23.0_osx.pkg」インストーラをダブルクリックし、インストールします。インストールが完了したら、ターミナルにてcf helpを投入しエラーがないことを確認します。

git cloneコマンドを入力し、cloudfoundry-samplesのgitからサンプルアプリをクローンします。

$ git clone https://github.com/cloudfoundry-samples/cf-sample-app-spring.git
Cloning into 'cf-sample-app-spring'...
remote: Counting objects: 69, done.
remote: Total 69 (delta 0), reused 0 (delta 0), pack-reused 69
Unpacking objects: 100% (69/69), done.
Checking connectivity... done.

cf loginコマンドを入力し、前節で作成したPivotal Web Servicesのアカウントにログインします。

$ cf login -a https://api.run.pivotal.io
API エンドポイント> api.run.pivotal.io
Email> aaaaaaaa@bbbb.com
Password>
認証中です...
OK
組織 yujishono-org をターゲットにしました
スペース development をターゲットにしました
API エンドポイント:   https://api.run.pivotal.io (API バージョン: 2.65.0)
ユーザー:             aaaaaaaa@bbbb.com
組織:                 yujishono-org
スペース:             development

cf pushコマンドにてサンプルアプリをデプロイします。

$ cf push
マニフェスト・ファイル /Users/yujishono/pivotal/cf-sample-app-spring/manifest.ymlを使用しています

URL: cf-spring-xxxxxxxx.cfapps.io
最終アップロード日時: Thu Dec 22 23:05:48 UTC 2016
スタック: cflinuxfs2
ビルドパック: java-buildpack=v3.10-offline-https://github.com/cloudfoundry/java-buildpack.git#193d6b7 open-jdk-like-jre=1.8.0_111 open-jdk-like-memory-calculator=2.0.2_RELEASE spring-boot-cli=1.4.1_RELEASE

     状態   開始日時                 CPU      メモリー             ディスク         詳細
#0   実行   2016-12-23 08:07:08 AM   158.2%   512M の中の 307.9M   1G の中の 155M

上記の赤字下線部のURLにアクセスすると画面が表示されます。以下の例ですとURLは、[https://cf-spring-xxxxxxxxxxxxxxxxxxxx.cfapps.io/]となります。

サンプルアプリケーションの画面

サンプルアプリへのデータベース接続の追加

データベースに接続するため、まずは、マーケットプレースにてElephantSQLのサービスプランを確認します。「Turtle」プランが無料であることがわかります。

$ cf marketplace -s elephantsql
aaaaaaaa@bbbb.com としてサービス elephantsql のサービス・プラン情報を取得しています...
OK
サービス・プラン   説明                                                   無料または有料
turtle             4 concurrent connections, 20MB Storage                 free
panda            20 concurrent connections, 2GB Storage                 paid
hippo             300 concurrent connections, 100 GB Storage             paid
elephant         300 concurrent connections, 1000 GB Storage, 500Mbps   paid

「turtle」プランでサービスを作成します。

  1. 「cf create-service」コマンドにて、「turtle」を使って「cf-spring-db」サービスを作成します。
  2. 「cf bind-service」コマンドにて、「cf-spring」サービスに紐付けます。
  3. 設定を反映するため、「cf restart」コマンドにて再起動し、設定を反映させます。
$ cf create-service elephantsql turtle cf-spring-db
aaaaaaaa@bbbb.comとしてサービス・インスタンス cf-spring-db を組織 yujishono-org / スペース development 内に作成しています...
OK

$ cf bind-service cf-spring cf-spring-db
aaaaaaaa@bbbb.com としてサービス cf-spring-db を組織 yujishono-org / スペース development 内のアプリ cf-spring にバインドしています...
OK
ヒント: 確実に環境変数の変更が有効になるようにするには、'cf restage cf-spring' を使用します

$ cf restart cf-spring
aaaaaaaa@bbbb.com として組織 yujishono-org / スペース development 内のアプリ cf-spring を停止しています...
<略>
     状態   開始日時                 CPU    メモリー             ディスク         詳細
#0   実行   2016-12-23 08:28:33 AM   0.6%   512M の中の 312.9M   1G の中の 155M

サンプルアプリにアクセスすると、赤枠部が追加されていることがわかります。

サンプルアプリケーションの画面(elephantsqlサービス追加後)

CF CLIによる基盤拡張

インスタンスの追加やメモリ・ディスクの増設を行うことができます。

  • インスタンスの追加 : 「cf scale cf-spring -i 2」コマンドにより、アプリケーションのインスタンスを1から2に増やします。「cf app cf-spring」により、アプリケーションのステータスを確認します。

同様に、以下のコマンドにて、メモリやディスクの増設が可能です。

  • メモリの増設 : 「cf scale cf-spring -m 1G」
  • ディスクの増設 : 「cf scale cf-spring -k 512M」
$ cf scale cf-spring -i 2
aaaaaaaa@bbbb.com として組織 yujishono-org / スペース development 内のアプリ cf-spring をスケーリングしています...
OK
$ cf app cf-spring
aaaaaaaa@bbbb.com として組織 yujishono-org / スペース development 内のアプリ cf-spring の正常性と状況を表示しています...
OK

要求された状態: started
インスタンス: 2/2
使用: 512M x 2 インスタンス
URL: cf-spring.xxxxxxxx.cfapps.io
最終アップロード日時: Thu Dec 22 23:05:48 UTC 2016
スタック: cflinuxfs2
ビルドパック: java-buildpack=v3.10-offline-https://github.com/cloudfoundry/java-buildpack.git#193d6b7 open-jdk-like-jre=1.8.0_111 open-jdk-like-memory-calculator=2.0.2_RELEASE spring-boot-cli=1.4.1_RELEASE

     状態     開始日時                 CPU    メモリー             ディスク         詳細
#0   実行     2016-12-23 08:28:33 AM   0.3%   512M の中の 321.1M   1G の中の 155M
#1   開始中   2016-12-23 08:31:53 AM   0.0%   512M の中の 198.7M   1G の中の 155M
$ cf scale cf-spring -m 1G
<略>
$ cf scale cf-spring -k 512M
<略>

*  *  *

今回、CPU・メモリ・ディスクはハードウェアを意識せずコマンド一つで設定し、マーケットプレース上のサービスを組み合わせElephantSQLなどのミドルウェアを構築する手順を体験頂きました。APIを動作させる基盤のイメージがある程度つかめたのではないでしょうか。

前回説明したAutoScalingやサーバレスアーキテクチャなどの新技術の登場も相まって、クラウド時代の基盤構築はこれまでのオープン系とは異なるため、クラウドネイティブ(クラウドを前提としたシステム構築)と呼ばれることもあります。

次回は、APIエコノミーを作っていく上で、APIはどう組み合わせたら良いか、セキュリティはどう担保すれば良いかなど、システムの実運用に欠かせない要素をおさえていきます。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ シニア・エキスパート

2011年頃まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。2児のパパ。