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」プランでサービスを作成します。
- 「cf create-service」コマンドにて、「turtle」を使って「cf-spring-db」サービスを作成します。
- 「cf bind-service」コマンドにて、「cf-spring」サービスに紐付けます。
- 設定を反映するため、「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児のパパ。