86
Cloud Foundry x Wagby 12:00 – 13:00 ROOM 1-4 株株株株株株株株株株株株 株 株株

Cloud Foundry x Wagby

Embed Size (px)

Citation preview

Page 1: Cloud Foundry x Wagby

Cloud Foundry x Wagby12:00 – 13:00ROOM 1-4株式会社ジャスミンソフト贄 良則

Page 2: Cloud Foundry x Wagby

結論• Wagby でビルドした Web アプリケーション

(war) は Cloud Foundry で動作する。• 本格的な運用に際しては、次のサービスを別途、契約する必要がある。• データベース• ログ保管• バイナリファイル保存• 全文検索(のインデックス)

• 多くのアプリケーションをスケーラブルに安定運用させたいという大企業にメリットがある。2

Page 3: Cloud Foundry x Wagby

ジャスミンソフトの紹介3

Page 4: Cloud Foundry x Wagby

今のジャスミンソフト• 超高速開発ツール「 Wagby 」の開発に注力するパッケージベンダー。• 社員 6 名、うち開発者は 3 名。 (+ 役員 1 名 )• 創業から 15 年が経過。 Wagby の販売から 10年目。• 直販をせず、全国で 20 社のパートナーと協業体制を敷く。

4

Wagby の開発者を募集しています!“ 日本発の「超高速開発ツール」で、世界で勝負したい ... だと ... ?”

Page 5: Cloud Foundry x Wagby

社史年月 出来事2001.03 沖縄県の第三セクター方式で運営されていた「株式会社トロピカル

テクノセンター」という研究施設の情報開発部員が独立。社員 4 名 (+ 役員 1 名 ) 。

2004.10 沖縄振興開発金融公庫からの出資受け入れ。資本金 5,000 万円。2006.05 Wagby 発表。東京での営業活動を本格化する。2011.11 Wagby ユーザ会の設立。2012.03 日経コンピュータ特集記事「超高速開発が日本を救う」で紹介され

る。2012.06 第一回目の Wagby Developer Day を開催。以降、毎年開催。2013.08 超高速開発コミュニティ設立。発起人として参加。2016.05 ガートナー社「 Cool Vendors in Application Development, 2016 」に選

出。2016.11 Wagby Developer Day 2016 開催。コクヨ、 Pivotal との連携を発表。

5

Page 6: Cloud Foundry x Wagby

Wagby の紹介6

Page 7: Cloud Foundry x Wagby

Wagby ( ワグビィ ) とは

7

視点 説明概要 Web ベースのエンタープライズアプリケーションをノンプログ

ラミングで超高速に開発するツールです。設計情報から業務ルール、画面、データベーススキーマなど、すべてを自動生成します。

メリット 詳細設計から単体テストまでの工数を大幅に削減することに加え、実際に動作するシステムを使ってレビューすることで、要件の修正もすぐに反映できるようになります。

実装技術 Java (Spring / Hibernate) + JSP (HTML, JavaScript, CSS)

出荷開始 2006 年 5 月バージョン

7

導入実績 318 社 (2016.11現在 )

用途 基幹業務全般。(多くのユーザ / 大量データ / トランザクション )

特徴 設計情報からソースコードを自動生成する製品は他にもあるが、生成コードを自由にカスタマイズできるため柔軟性がある。

Page 8: Cloud Foundry x Wagby

開発の流れ

8

設計 自動生成 実行Webブラウザ上で設計情報を入力。データ定義、関連、計算式、入力チェックなど、すべての要件を備えています。

設計情報 DB(リポジトリ )

ビルドによって Javaコードを完全自動生成。このコードはカスタマイズが可能なようにデザインされています。

Webベースの本格的な画面と機能を実現します。ワークフロー、全文検索、地図連携等、多くのニーズを満たします。

Page 9: Cloud Foundry x Wagby

クラウド環境でWagby を動作させる方法

9

Page 10: Cloud Foundry x Wagby

3つのアプローチLinux Shell Script Docker Cloud Foundry

形態 IaaS IaaS PaaS

動作環境 Cent OS 6 Docker を起動できる OS OS を意識しない概要 Shell Script を使

い、 wagbyapp の転送とTomcat の起動、停止を行う。

Java, データベースなど必要なミドルウェアをインストールする Dockerfile を用意する。 Docker コマンドで仮想コンテナを実行する。

cf コマンドを使ってwagbyapp の転送と Tomcatの起動、停止を行う。

メリット WagbyDesigner から操作できる。

標準技術である。デメリット

Shell Script の保守性に難がある。カスタマイズが難しく、 OS のバージョンに縛られる。

その技術を学ぶ必要がある。

将来 Shell Script 本体を Wagby代理店に移譲済み。運用はWagby代理店が行っている。

技術資料は WDD2014 で公開済み。協業の話は現在、なし。

各社と協業して運用体制を構築できないか、検討中。

10

Page 11: Cloud Foundry x Wagby

Cloud Foundry とは11

Page 12: Cloud Foundry x Wagby

Platform as a Service(PaaS)• ソフトウェアを構築および稼動させるための土台となるプラットフォームを、インターネット経由のサービスとして提供する。•従来は、サーバを運用する場合、通信回線やサーバマシンが必要となった。また、サーバマシン内の OSやデータベース等のソフトウェアも準備する必要があった。• これらをインターネット上のサービスとして、ソフトウェアを実行する環境を提供する。

12

Page 13: Cloud Foundry x Wagby

Cloud Foundry とは• オープンソースの Platform as a Service(PaaS) ソフトウェア

• Pivotal 、 EMC 、 VMWare 、 IBM 、 HP 、 SAP 、 NTT 、 Fujitsu等が参加する Cloud Foundry Foundation にて開発されている。

• ソースコードのライセンスは Apache License 2.0

• Wagby が使用している Java だけでなく、 Ruby, Node.js,  Scala,  Go,  Python,  PHP といった多くの言語をサポートしている。• MySQLや PostgreSQL といった複数のサービスに対応。• 特定のベンダにロックインされることなく、使うことができる。

13

Page 14: Cloud Foundry x Wagby

IaaS(Infrastructure as a Service)利用との比較• IaaS とは、通信回線、マシンをインターネットで提供するサービス。• 提供事業者としては、さくらの VPSや AmazonEC2 などがあげられる。• IaaS環境に Wagby をインストールする場合

• OS のインストールと設定 ( ファイアウォールやサービスへの登録など )• 各種ミドルウェアのインストールと設定 ( データベースソフトのインストールなど )• Wagby で生成したウェブアプリケーションを運用マシンに転送し、実行する。

• PaaS ではこれらの設定を自動的もしくは簡単に行える。14

Page 15: Cloud Foundry x Wagby

Wagby が生成したウェブアプリケーションの実行15

Page 16: Cloud Foundry x Wagby

Pivotal Web Services

• 今回は Cloud Foundry のサービスを提供している Pivotal Web Services の free trialを紹介。• クレジットカードの登録なしで、 $87 まで無料で試用できる。 [2016.11 月現在 ]

• 2GB メモリのアプリを 2 か月間利用する使用料に相当

16

Page 17: Cloud Foundry x Wagby

Pivotal Cloud Foundry•提供している Pivotal は 2013 年に EMC 、ヴィエムウェア、 GE の出資により設立された会社。•商用版の Cloud Foundry( 以下 PCF) を提供している。•オープンソース版の Cloud Foundry と比べると、エンタープライズ向けにサービスやツール、加えてサポートなどが充実している。• Pivotal Cloud Foundry を Public Cloud にて提供しているサービスが Pivotal Web Services である。

17

Page 18: Cloud Foundry x Wagby

PCF Dev

• PCF を開発用としてローカルマシンでも実行できる。• 仮想マシンイメージを配布している。

18

Page 19: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• 作成手順の詳細は下記ページを参照

• https://github.com/Pivotal-Japan/cf-workshop/blob/master/pivotal-web-services.md

• おおまかな手順:• 氏名、メールアドレス、パスワードの入力• アクティベーションメールの確認• Free Trial の開始、携帯番号を入力し、 SMS に送られる Verification

Code を確認• Cloud Foundry CLI のインストール

• コマンドラインで操作するツール。このツールを用いて、ウェブアプリケーションのデプロイや起動、停止等を行う。

19

Page 20: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• https://run.pivotal.io/ にアクセスし、 SIGN UP FOR FREE をクリックする。

20

Page 21: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• Create account をクリックする。

21

Page 22: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• First name, Last name(氏名 ) 、 Email address 、 Password を入力する。• Sign Up をクリック

22

Page 23: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する•確認のためのメールが送られる。

23

Page 24: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• メールを受信し、 Verify your email address のリンクをクリックする。

24

Page 25: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• 「 I Have read and agree

to the Terms of Service for Pivotal Web Services 」にチェックを入れる。• 「 Next: Claim Your

Trial 」をクリック

25

Page 26: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• Country に Japan を指定• Mobile Number に携帯電話の番号を入力• Send me my code をクリック• SMS で verification codeが送付されます。

26

Page 27: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• SMS で verification code が送付されます。

27

Page 28: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• verification code を入力して、 Submitボタンを押します。

28

Page 29: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• Organization 名を入力して、 Start Free Trial をクリック• Organization 名はプロジェクト名に相当する。• イニシャルなどを使って、グローバルで一意な名前にする。

29

Page 30: Cloud Foundry x Wagby

Pivotal Web Service のアカウントを作成する• コンソール画面が表示される。

30

Page 31: Cloud Foundry x Wagby

Cloud Foundry CLI のインストール•左側の Tools リンクをクリック

31

Page 32: Cloud Foundry x Wagby

Cloud Foundry CLI のインストール• Download and Install

the CLI の株のリストボックスから、使用する OS を選択し、ダウンロードボタンをクリック• インストーラがダウンロードされる。

32

Page 33: Cloud Foundry x Wagby

Cloud Foundry CLI のインストール• インストーラを実行する。 Next をクリック

33

Page 34: Cloud Foundry x Wagby

Cloud Foundry CLI のインストール• インストールフォルダの指定。 Next をクリック

34

Page 35: Cloud Foundry x Wagby

Cloud Foundry CLI のインストール• インストール前の確認。 Install をクリック

35

Page 36: Cloud Foundry x Wagby

Cloud Foundry CLI のインストール• インストール完了。 Finish をクリック

36

Page 37: Cloud Foundry x Wagby

Cloud Foundry CLI のインストール• cf login コマンドでログオンする。

37

Page 38: Cloud Foundry x Wagby

Pivotal Web Servicesへ cfコマンドでログオン• インストールした Cloud

Foundry CLI にてログオンを行う。• Cloud Foundry の操作は、

cf コマンドを使います。• 一度ログオンすると、ログオンは開発機のシャットダウンなど行っても、保持されます。• アプリケーションのデプロイ (push) 以外は管理画面からできます。

38

$ cf login -a api.run.pivotal.ioAPI endpoint: api.run.pivotal.io

Email> [ メールアドレス ]

Password> [ パスワード ]Authenticating...OK

Targeted org [Organization 名 ]Targeted space development

API endpoint: https://api.run.pivotal.io (API version: 2.63.0) User: [ メールアドレス ] Org: [Organization 名 ]Space: development

Page 39: Cloud Foundry x Wagby

アプリケーションのデプロイ•下記の手順で行う。• manifest.yml の作成• アプリケーション本体の WAR ファイルの作成• アプリケーションのデプロイ

39

Page 40: Cloud Foundry x Wagby

manifest.yml の作成• ウェブアプリケーションの実行に関する情報を記述する。• 今回は下記の内容を指定する。• env 以下は環境変数

• CATALINA_OPTS はウェブアプリケーション起動時のオプション。 wagbyapp\bin\setenv.bat の記述と同様。

• java.security.auth.login.config のパスは、運用サーバ上の絶対パスを指定している。• JBP_CONFIG_TOMCAT は使用する Tomcat のバージョン。 WagbyR7.10 では Tomcat8 を用いているので、 8.0 の最新を使うように指定している。

40

env: CATALINA_OPTS: -Djava.security.auth.login.config=/home/vcap/app/.java-buildpack/tomcat/webapps/ROOT/WEB-INF/app_jaas.config -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP -Duser.timezone=Asia/Tokyo JBP_CONFIG_TOMCAT: '[tomcat: { version: 8.0.+ }]'

Page 41: Cloud Foundry x Wagby

アプリケーションのデプロイ• WAR ファイル wagby-demo.war を作成する。 [省略 ]• cf コマンドを実行する。• 弊社環境で 5分ほどかかった。

41

cf push wagby -p wagby-demo.war -f manifest.yml –b java_buildpack

Page 42: Cloud Foundry x Wagby

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

42

$ cf push wagby -p wagby-demo.war -f manifest.yml -b java_buildpackUsing manifest file manifest.yml

Creating app wagby in org murajasmine / space development as [email protected]

Using route wagby.cfapps.ioBinding wagby.cfapps.io to wagby...OK

Uploading wagby...Uploading app files from: C:\cygwin64\tmp\unzipped-app159773815Uploading 16.6M, 13427 filesDone uploadingOK

Starting app wagby in org murajasmine / space development as [email protected] java_buildpack...Downloaded java_buildpackCreating containerSuccessfully created containerDownloading app package...Downloaded app package (87.2M)Staging...-----> Java Buildpack Version: v3.10 (offline) | https://github.com/cloudfoundry/java-buildpack.git#193d6b7

-----> Downloading Open Jdk JRE 1.8.0_111 from https://java-buildpack.cloudfoundry.org/openjdk/trusty/x86_64/openjdk-1.8.0_111.tar.gz (found in cache) Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (1.1s)-----> Downloading Open JDK Like Memory Calculator 2.0.2_RELEASE from https://java-buildpack.cloudfoundry.org/memory-calculator/trusty/x86_64/memory-calculator-2.0.2_RELEASE.tar.gz (found in cache) Memory Settings: -Xss349K -Xms681574K -XX:MetaspaceSize=104857K -Xmx681574K -XX:MaxMetaspaceSize=104857K-----> Downloading Spring Auto Reconfiguration 1.10.0_RELEASE from https://java-buildpack.cloudfoundry.org/auto-reconfiguration/auto-reconfiguration-1.10.0_RELEASE.jar (found in cache) Modifying /WEB-INF/web.xml for Auto Reconfiguration-----> Downloading Tomcat Instance 8.0.38 from https://java-buildpack.cloudfoundry.org/tomcat/tomcat-8.0.38.tar.gz (found in cache) Expanding Tomcat Instance to .java-buildpack/tomcat (0.1s)-----> Downloading Tomcat Lifecycle Support 2.5.0_RELEASE from https://java-buildpack.cloudfoundry.org/tomcat-lifecycle-support/tomcat-lifecycle-support-2.5.0_RELEASE.jar (found in cache)-----> Downloading Tomcat Logging Support 2.5.0_RELEASE from https://java-buildpack.cloudfoundry.org/tomcat-logging-support/tomcat-logging-support-2.5.0_RELEASE.jar (found in cache)-----> Downloading Tomcat Access Logging Support 2.5.0_RELEASE from https://java-buildpack.cloudfoundry.org/tomcat-access-logging-support/tomcat-access-logging-support-2.5.0_RELEASE.jar (found in cache)Exit status 0Staging complete

Page 43: Cloud Foundry x Wagby

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

43

Uploading droplet, build artifacts cache...Uploading build artifacts cache...Uploading droplet...Uploaded build artifacts cache (108B)Uploaded droplet (133.5M)Uploading completeDestroying containerSuccessfully destroyed container

0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting0 of 1 instances running, 1 starting1 of 1 instances running

App started

OK

App wagby was started using this command `CALCULATED_MEMORY=$($PWD/.java-build-pack/open_jdk_jre/bin/java-buildpack-memory-calculator-2.0.2_RELEASE -memorySizes=metaspace:64m..,stack:228k.. -memoryWeights=heap:65,metaspace:10,native:15,stack:10 -memoryInitials=heap:100%,metaspace:100% -stackThreads=300 -totMemory=$MEMORY_LIMIT) && JAVA_HOME=$PWD/.java-buildpack/open_jdk_jre JAVA_OPTS="-Djava.io.tmpdir=$TMPDIR -XX:OnOutOfMemoryError=$PWD/.java-build-pack/open_jdk_jre/bin/killjava.sh $CALCULATED_MEMORY -Djava.endorsed.dirs=$PWD/.java-buildpack/tomcat/endorsed -Daccess.logging.enabled=false -Dhttp.port=$PORT" exec $PWD/.java-buildpack/tomcat/bin/catalina.sh run`

Showing health and status for app wagby in org murajasmine / space development as [email protected]

requested state: startedinstances: 1/1usage: 1G x 1 instancesurls: wagby.cfapps.iolast uploaded: Wed Nov 2 10:35:21 UTC 2016stack: cflinuxfs2buildpack: java_buildpack

state since cpu memory disk details#0 running 2016-11-02 07:38:32 PM 150.8% 637M of 1G 307.7M of 1G

Page 44: Cloud Foundry x Wagby

Webページにアクセスする

44

Page 45: Cloud Foundry x Wagby

cf コマンド45

Page 46: Cloud Foundry x Wagby

cf コマンドの使い方• 下記ページに使い方の詳細の日本語版が用意されている。• http://cli.cloudfoundry.org/ja-JP/cf/• 以下、代表的なコマンドを紹介する。

46

Page 47: Cloud Foundry x Wagby

アプリケーションのデプロイ (cf push)• cf push APP_NAME [-p PATH] [-f MANIFEST_PATH]• APP_NAME:アプリケーション名、 cf コマンドでこのアプリケーションを指定する際に使われる。また、ホスト名のデフォルト値となる。• -p PATH:アプリ・ディレクトリーまたはアプリ・ディレクトリーの内容の zip ファイルへのパス。

WAR ファイルを指定する。• -f MANIFEST_PATH:マニフェストファイルへのパス• マニフェストファイルの詳細は後程説明する。

47

Page 48: Cloud Foundry x Wagby

アプリケーションのデプロイ (cf push)• cf push APP_NAME ... [-b BUILDPACK_NAME]• -b BUILDPACK_NAME:ビルドパックを指定する。• Wagby のような Java を用いる場合は java_buildpackを指定する。この場合デフォルトのバージョンの

java_buildpack を用いる。•任意の java_buildpack を用いる場合、下記のように指定する。

• https://github.com/cloudfoundry/java-buildpack.git#v3.1.0•指定がない場合はアップロードしたアプリケーションから自動的に判断されるが、若干時間がかかる。

48

Page 49: Cloud Foundry x Wagby

アプリケーションのデプロイ (cf push)• cf push APP_NAME ... [-t TIMEOUT] [--no-start]• -t TIMEOUT: CLI がアプリケーションの開始を待つ最大時間 (秒 ) 。起動に時間がかかる場合、起動に失敗してしまう。この場合は数字を増やす。• --no-start:プッシュ後に自動的にアプリを開始しない。• cf start APP_NAME で起動できる。

49

Page 50: Cloud Foundry x Wagby

アプリケーションのデプロイ (cf push)• cf push APP_NAME ... [--hostname HOST] [--

random-route]• --hostname HOST:ホスト名を任意に指定する。• ホスト名は Pivotal Web Services 全体で一意になる必要がある。

• --random-route:ホスト名をランダムに決定する。このオプションを指定することで重複しないホスト名が割り当てられる。

50

Page 51: Cloud Foundry x Wagby

アプリケーションのデプロイ (cf push)• cf push APP_NAME ... [-i NUM_INSTANCES] [-k DISK] [-m

MEMORY] • -i NUM_INSTANCES :インスタンスの数

• Wagby では、複数インスタンス起動する場合クラスタ設定が必要• -k DISK:ディスク制限 (例 : 256M 、 1024M 、 1G)• -m MEMORY:メモリー制限 (例 : 256M 、 1024M 、 1G)

• 運用中にメモリ制限を超えると、自動的にアプリケーションを再起動する。• -m 2G を指定したときに、アプリケーションのデプロイ時に下記のようなエラーが発生することがあった。 Trial のため?

• Error restarting application: Server error, status code: 500, error code: 10001, message: An unknown error occurred.

• -m 1G で push したのち、 cf scale コマンドで後程増やすとうまくいった。51

Page 52: Cloud Foundry x Wagby

アプリケーションのインスタンス数、ディスク制限、メモリ制限の変更 (cf scale)• cf scale APP_NAME [-i NUM_INSTANCES] [-k DISK]

[-m MEMORY] • -i NUM_INSTANCES :インスタンスの数• -k DISK:ディスク制限 (例 : 256M 、 1024M 、

1G)• -m MEMORY:メモリー制限 (例 :

256M 、 1024M 、 1G)• cf scale コマンドを実行すると、上記の制限を変更し、再起動します。

52

Page 53: Cloud Foundry x Wagby

マニフェストファイル•環境変数や cf push で指定するオプションなどを記述できる。• cf push のみで実行するとデフォルトのマニフェストファイル ( カレントディレクトリの

manifest.yml) を読み込む

53

Page 54: Cloud Foundry x Wagby

マニフェストファイルの例

54

name: wagbypath: wagby-demo.warbuildpack: java_buildpackmemory: 1Genv: CATALINA_OPTS: -Djava.security.auth.login.config=/home/vcap/app/.java-build-pack/tomcat/webapps/ROOT/WEB-INF/app_jaas.config -Dorg.apache.jasper.com-piler.Parser.STRICT_QUOTE_ESCAPING=false -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP -Duser.timezone=Asia/Tokyo JBP_CONFIG_TOMCAT: '[tomcat: { version: 8.0.+ }]' JBP_CONFIG_OPEN_JDK_JRE: '{jre: { version: 1.8.0_111 }}'

Page 55: Cloud Foundry x Wagby

アプリケーションを確認 (cf apps)

55

$ cf appsGetting apps in org murajasmine / space development as [email protected]

name requested state instances memory disk urlswagby started 1/1 1G 1G wagby.cfapps.io

Page 56: Cloud Foundry x Wagby

アプリケーションの詳細を確認 (cf app APP_NAME)

56

Showing health and status for app wagby in org murajasmine / space development as [email protected]

requested state: startedinstances: 1/1usage: 1G x 1 instancesurls: wagby.cfapps.iolast uploaded: Fri Nov 4 02:48:32 UTC 2016stack: cflinuxfs2buildpack: java_buildpack

state since cpu memory disk details#0 running 2016-11-04 11:51:28 AM 5.9% 702.7M of 1G 307.7M of 1G

Page 57: Cloud Foundry x Wagby

アプリケーションの削除、開始、停止、再起動• cf delete APP_NAME:アプリケーションの削除• cf start APP_NAME:アプリケーションの開始• cf stop APP_NAME:アプリケーションの停止• cf restart APP_NAME:アプリケーションの再起動

57

Page 58: Cloud Foundry x Wagby

サーバのログ取得 (cf logs APP_NAME)

• cf logs コマンドで、コンソールに出力されるメッセージを確認できます。

58

$ cf logs wagby --recent | headConnected, dumping recent logs for app wagby in org murajasmine / space development as [email protected]...

2016-11-02T19:33:29.36+0900 [API/1] OUT Created app with guid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx2016-11-02T19:33:33.99+0900 [API/5] OUT Updated app with guid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ({"route"=>"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", :verb=>"add", :relation=>"routes", :related_guid=>"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"})2016-11-02T19:35:57.17+0900 [API/3] OUT Updated app with guid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ({"state"=>"STARTED"})2016-11-02T19:35:57.56+0900 [STG/0] OUT Downloading java_buildpack...2016-11-02T19:35:57.63+0900 [STG/0] OUT Downloaded java_buildpack

Page 59: Cloud Foundry x Wagby

サーバに ssh接続 (cf ssh APP_NAME)• cf ssh コマンドで、サーバに ssh ログオンすることができます。

59

C:\Users\mura>cf ssh wagbyvcap@77bd9cc9-0ee3-4c58-7ba3-61885172c84a:~$ lsapp logs staging_info.yml tmpvcap@77bd9cc9-0ee3-4c58-7ba3-61885172c84a:~$ ls -ltotal 16drwxr-xr-x 48 vcap root 4096 Nov 2 10:36 appdrwxr-xr-x 2 vcap vcap 4096 Nov 2 10:36 logs-rw-r--r-- 1 vcap vcap 680 Nov 2 10:36 staging_info.ymldrwxr-xr-x 2 vcap vcap 4096 Nov 2 10:36 tmpvcap@77bd9cc9-0ee3-4c58-7ba3-61885172c84a:~$

Page 60: Cloud Foundry x Wagby

サーバに scp,sftp接続• cf ssh-code コマンドで一時的な ssh パスワードを取得することで、 scpや sftp も行うことができる。• 詳しくは下記 URL を参考• https://docs.cloudfoundry.org/devguide/deploy-apps/

ssh-apps.html

60

Page 61: Cloud Foundry x Wagby

サーバ内のフォルダ構成• /home/vcap/app フォルダ内にデプロイしたウェブアプリケーションが格納されている。また、実行時に作成されるファイルも出力される。• app/WEB-INF/data フォルダに HSQLDB のデータベースファイルがある。• app/.java-buildpack内に JDKや Tomcat等のファイルがある。

• cf push時に自動的に設定されたファイル• .java-buildpack内に Wagby関連のファイルがある。

• export フォルダ:インポート・エクスポート画面使うエクスポートファイル• upload_dir フォルダ:ファイル項目にてアップロードしたファイル• tomcat/logs フォルダ: system.log等のログファイル

61

Page 62: Cloud Foundry x Wagby

注意する点• アプリケーションを停止や再起動すると、ディスクの内容はすべて消える。• アプリケーションを起動したときは、最初に

push したときの状態となる。よって、停止する前に scp コマンド等でデータベースファイル等をバックアップする必要がある。• 外部データベースを用いることで、アプリケーションを停止しても情報が保持される。

62

Page 63: Cloud Foundry x Wagby

外部データベースを使用したウェブアプリケーション63

Page 64: Cloud Foundry x Wagby

概要• データベースのサービスを作成する。• サービスをアプリケーションに bind する。• アプリケーションのデプロイ (cf push) を行う。

64

Page 65: Cloud Foundry x Wagby

サービス• Cloud Foundry では、データベースやメッセージキューなどをサービスとして提供している。• サービスの契約によってデータベースが作成され、すぐに利用できる状態となる。• アプリケーションのデプロイ時に、データベースのサーバ名やアカウント、パスワード等の設定が自動的に反映される。• サービスは Pivotal とは別の会社 ( サービス提供者 ) が提供している。

65

Page 66: Cloud Foundry x Wagby

サービス• Pivotal Web Services で提供されているサービスは下記ページに説明がある。

• https://console.run.pivotal.io/marketplace

66

Page 67: Cloud Foundry x Wagby

マーケットプレイス• cf marketplace コマンドで作成できるサービスの一覧が表示される。• cleardb が MySQL 、 elephantsql が PostgreSQL を提供しているサービス• plans はそれぞれデータベースサイズ等の制限。 * がついているプランは有料

67

$ cf marketplaceservice plans description...cleardb spark, boost*, amp*, shock* Highly available MySQL for your Apps....elephantsql turtle, panda*, hippo*, elephant* PostgreSQL as a Service...

Page 68: Cloud Foundry x Wagby

マーケットプレイス

68

$ cf marketplace -s cleardb

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

Page 69: Cloud Foundry x Wagby

サービスの作成 (cf create-service )• cf create-service cleardb spark mysql•最初の引数がサービス名 (cleardb)• 次の引数がプラン名 (spark)•最後の引数が任意のサービス名。

69

Page 70: Cloud Foundry x Wagby

サービスの確認 (cf services)

• cf services コマンドで作成したサービスを確認できる。

70

$ cf servicesGetting services in org murajasmine / space development as [email protected]

name service plan bound apps last operationmysql cleardb spark create succeeded

Page 71: Cloud Foundry x Wagby

アプリケーションにサービスを割り当て• cf bind-service APP_NAME SERVICE_NAME• アプリケーションにサービスを割り当てる。• manifest.yml内に下記のように指定することで、デプロイ時に割り当てることができる。

71

service: - mysql

Page 72: Cloud Foundry x Wagby

アプリケーションのデプロイ (cf push)• cf push時にデータベースの設定が自動的に反映される。但し、データベースの接続設定を下記にて指定していること。

• Spring の CloudConfig• Spring の Cloud Profile• Spring の application context内に bean として設定

• 詳しくは下記を参照• https://

docs.cloudfoundry.org/buildpacks/java/spring-service-bindings.html

• Wagby はデータベースの接続設定は、 context.xml に書いており、上記方法に合致しないため、このままでは使えない。• 今回は動作確認として、手動で設定した。

72

Page 73: Cloud Foundry x Wagby

Wagby アプリケーションでの現状の手順• データベースのサービスの作成• サービスをアプリケーションに bind する。•仮のアプリケーションをデプロイし、データベースの接続情報を取得する。• 取得方法は下記ドキュメントを参考• https://docs.cloudfoundry.org/devguide/services/

migrate-db.html

• データベースの接続情報を反映したアプリケーションをデプロイ73

Page 74: Cloud Foundry x Wagby

データベースのサービスを作成する• cf create-service cleardb spark mysql

74

Page 75: Cloud Foundry x Wagby

仮のアプリケーションをデプロイする• cf push• manifest.yml は下記の通り

75

name: wagbypath: wagby-demo.warbuildpack: java_buildpackmemory: 1Genv: CATALINA_OPTS: -Djava.security.auth.login.config=/home/vcap/app/.java-buildpack/tomcat/we-bapps/ROOT/WEB-INF/app_jaas.config -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP -Duser.timezone=Asia/Tokyo JBP_CONFIG_TOMCAT: '[tomcat: { version: 8.0.+ }]' JBP_CONFIG_OPEN_JDK_JRE: '{jre: { version: 1.8.0_111 }}'service: - mysql

Page 76: Cloud Foundry x Wagby

データベースの接続情報を確認• cf env コマンドで VCAP_SERVICES環境変数を確認する。

76

$ cf env Wagby

System-Provided:{ "VCAP_SERVICES": { "cleardb": [ { "credentials": { "hostname": "us-cdbr-iron-east-04.cleardb.net", "jdbcUrl": "jdbc:mysql://us-cdbr-iron-east-04.cleardb.net/ad_7bd06a4032699f7?user=b67e03b16dd79a\u0026password=73173b9e", "name": "ad_7bd06a4032699f7", "password": “xxxxxxxx", "port": "3306", "uri": "mysql://b67e03b16dd79a:[email protected]:3306/ad_7bd06a4032699f7?reconnect=true", "username": "b67e03b16dd79a" },...

Page 77: Cloud Foundry x Wagby

データベースの接続情報を確認• "hostname": "us-cdbr-iron-east-04.cleardb.net“

• ホスト名• "name": "ad_7bd06a4032699f7“

• データベース名• "password": " xxxxxxxx “

• パスワード• "port": "3306“

• ポート番号• "username": "b67e03b16dd79a“

• ユーザ名

77

Page 78: Cloud Foundry x Wagby

データベース情報を設定する• WagbyDesigner にて、データベース情報を設定し、ビルドする。• 環境 - データベース - メインにて、下記を設定

• データベース:MySQL• 接続 URL: jdbc:mysql://us-cdbr-iron-east-04.cleardb.net/

ad_7bd06a4032699f7?useUnicode=true&characterEncoding=utf8&relaxautoCommit=true&zeroDateTimeBehavior=convertToNull

• ユーザ名: b67e03b16dd79a• パスワード: xxxxxxxx• MySQL の JDBC ドライバを配置する。

• ROOT デプロイとする。• 環境 - プロジェクト情報 - プロジェクト識別子を未指定

78

Page 79: Cloud Foundry x Wagby

データベースの初期化• ビルド後、開発機にて init_db.bat を実行する。• 開発機から cleardb に直接アクセスし、初期テーブルを作成する。

79

Page 80: Cloud Foundry x Wagby

WAR ファイルの作成•同様の手順で wagby-demo.war ファイルを作成する。•内蔵データベースを使用した場合と、下記が異なる。• hsqldb.jar の代わりに、 MySQL の JDBC ドライバを WEB-INF\lib にコピーする。• context.xml に記述する接続情報が、 MySQL となっている。

80

Page 81: Cloud Foundry x Wagby

アプリケーションをデプロイする。• cf push• マニフェストファイルは「仮のアプリケーションをデプロイする」と同様

81

Page 82: Cloud Foundry x Wagby

今後の課題82

Page 83: Cloud Foundry x Wagby

WAR ファイル作成の自動化• 今回は WAR ファイルを手動で作成したが、これを Wagby側で自動的に作成する仕組みを検討したい。• また、 cf push等のコマンド実行を

WagbyDesigner上で行うといったことも検討する。

83

Page 84: Cloud Foundry x Wagby

外部データベース設定の自動化• Wagby のデータベース設定を Spring Frameworkの流儀に合う方法 (CloudConfig等 ) に改善する。•ウェブアプリケーションの起動時に

VCAP_SERVICES 環境変数を解析して context.xml に反映するスクリプトを作成する方法も考えられる。• 標準的な方法ではないため、好ましくないか?

84

Page 85: Cloud Foundry x Wagby

ローカルファイルの扱い• export, upload_dir, tomcat/logs といったローカルファイルは、アプリケーションを停止すると消えてしまう。• これらの扱いを検討中• ログを扱う専用サービスを利用する。• ファイルはネットワークストレージサービスにアップロードする。

85

Page 86: Cloud Foundry x Wagby

再び、結論• Wagby でビルドした Web アプリケーション

(war) は Cloud Foundry で動作する。• 本格的な運用に際しては、次のサービスを別途、契約する必要がある。• データベース• ログ保管• バイナリファイル保存• 全文検索(のインデックス)

• 多くのアプリケーションをスケーラブルに安定運用させたいという大企業にメリットがある。86