IBM Cloud について、遊んで見ました、簡単にメモ。
Java のサンプルを Deploy しました、こちらで確認できる。
https://getstartedjava-shiny-bear-sc.mybluemix.net/GetStartedJava/
まずは、無料登録
IBM Cloud CLI を設定
自分は CentOS なので、こちらを使用
$ curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
Windows の場合は、こちらからダウンロード
https://github.com/IBM-Cloud/ibm-cloud-cli-release/releases
続いてibmcloud を更新
$ ibmcloud update
更新を確認しています...
更新は不要です。 CLI は既に最新です。
$ ibmcloud -v
ibmcloud version 1.4.0+4705d79-2021-02-24T21:18:06+00:00
Cloud Foundry サンプル・アプリの作成
今回は Java を使用するので、こちら
https://cloud.ibm.com/catalog/starters/cloud-foundry?runtime=liberty-for-java
無料プランですと、メモリは最大 256M を選べる!最大にしましょう!
画面はこんな感じ
ただ、ロケーションの選択はアジアの選択肢がないのは残念
できたら、「Cloud Foundry の組織」画面に表示されます:
https://cloud.ibm.com/account/cloud-foundry
war ファイルを作成
サンプル java プロジェクトを clone し、maven でビルド
$ git clone https://github.com/IBM-Cloud/get-started-java
$ cd get-started-java
$ mvn clean install
..........................................................................
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.767 s
[INFO] Finished at: 2021-03-29T13:37:10Z
[INFO] ------------------------------------------------------------------------
$ mvn install liberty:run-server
ローカルで確認したい場合はこちら(ポート:9080)
http://localhost:9080/GetStartedJava
Deploy to IBM Cloud
$ ibmcloud login
API endpoint: https://cloud.ibm.com
Region: jp-tok
Email> アカウントのメールアドレス
Password> アカウントのパスワード
Authenticating...
OK
Targeted account XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
API endpoint: https://cloud.ibm.com
Region: jp-tok
User: XXXXXXXXXXXXXXXXXXXXXX
Account: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Resource group: No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP'
CF API endpoint:
Org:
Space:
Target a Cloud Foundry org and space:
$ ibmcloud target -r us-south # ロケーションを us-south に変える
$ ibmcloud target --cf
push application to IBM Cloud.
$ ibmcloud cf push
Invoking 'cf push'...
...............................................
Waiting for app to start...
name: GetStartedJava
requested state: started
routes: getstartedjava-shiny-bear-sc.mybluemix.net
last uploaded: Mon 29 Mar 13:42:06 UTC 2021
stack: cflinuxfs3
buildpacks: Liberty for Java(TM) (WAR, liberty-21.0.0_3, buildpack-v3.55-20210311-1642, ibmjdk-1.8.0_sr6fp26-20210216, env)
type: web
instances: 1/1
memory usage: 256M
start command: .liberty/initial_startup.rb
state since cpu memory disk details
#0 running 2021-03-29T13:42:55Z 62.3% 100.1M of 256M 322.7M of 1G
app の一覧と URL を確認
$ ibmcloud cf apps
Invoking 'cf apps'...
Getting apps in org xxxxxxxxxxxxx@xxxxxxxxxxxx / space dev as xxxxxxxxxxx@xxxxxxxxxx...
OK
name requested state instances memory disk urls
GetStartedJava started 1/1 256M 1G getstartedjava-shiny-bear-sc.mybluemix.net
上記表示された URL + /GetStartedJava/ をアクセスできる
https://getstartedjava-shiny-bear-sc.mybluemix.net/GetStartedJava/
Java のバージョンを 11 にする
ibmcloud cf set-env GetStartedJava JBP_CONFIG_IBMJDK "version: 11.+"
ibmcloud cf restage GetStartedJava
ibmcloud cf push
以下の jsp で確認した結果:
<%@ page contentType="text/html; charset=utf-8" %>
<html>
<body>
Server Version: <%= application.getServerInfo() %><br>
Servlet Version: <%= application.getMajorVersion() %>.<%= application.getMinorVersion() %><br>
JSP Version: <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %><br>
<br>
java.runtime.name: <%= System.getProperty("java.runtime.name") %><br>
java.runtime.version: <%= System.getProperty("java.runtime.version") %><br>
java.vm.name: <%= System.getProperty("java.vm.name") %><br>
java.vm.vendor: <%= System.getProperty("java.vm.vendor") %><br>
java.vm.version: <%= System.getProperty("java.vm.version") %><br>
</body>
</html>
Server Version: IBM WebSphere Liberty/21.0.0.6
Servlet Version: 3.1
JSP Version: 2.1
java.runtime.name: OpenJDK Runtime Environment
java.runtime.version: 11.0.11+9
java.vm.name: Eclipse OpenJ9 VM
java.vm.vendor: Eclipse OpenJ9
java.vm.version: openj9-0.26.0
やってみた感じ
1.無料プランはいまいち、ローケーションをアメリカにしたせいか、結構遅いです。
東京の自宅サーバーから ping (138 ms)
$ ping getstartedjava-shiny-bear-sc.mybluemix.net
PING getstartedjava-shiny-bear-sc.mybluemix.net (169.47.124.22) 56(84) bytes of data.
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=1 ttl=182 time=139 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=2 ttl=182 time=138 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=3 ttl=182 time=138 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=4 ttl=182 time=139 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=5 ttl=182 time=138 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=6 ttl=182 time=138 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=7 ttl=182 time=139 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=8 ttl=182 time=138 ms
64 bytes from 16.7c.2fa9.ip4.static.sl-reverse.com (169.47.124.22): icmp_seq=9 ttl=182 time=138 ms
さくらレンタルサーバーから ping (138 ms)
$ ping getstartedjava-shiny-bear-sc.mybluemix.net
PING getstartedjava-shiny-bear-sc.mybluemix.net (169.47.124.22): 56 data bytes
64 bytes from 169.47.124.22: icmp_seq=0 ttl=180 time=138.681 ms
64 bytes from 169.47.124.22: icmp_seq=1 ttl=180 time=138.851 ms
64 bytes from 169.47.124.22: icmp_seq=2 ttl=180 time=138.742 ms
64 bytes from 169.47.124.22: icmp_seq=3 ttl=180 time=138.511 ms
64 bytes from 169.47.124.22: icmp_seq=4 ttl=180 time=138.678 ms
64 bytes from 169.47.124.22: icmp_seq=5 ttl=180 time=139.004 ms
64 bytes from 169.47.124.22: icmp_seq=6 ttl=180 time=138.708 ms
64 bytes from 169.47.124.22: icmp_seq=7 ttl=180 time=138.943 ms
64 bytes from 169.47.124.22: icmp_seq=8 ttl=180 time=138.766 ms
64 bytes from 169.47.124.22: icmp_seq=9 ttl=180 time=138.785 ms
2.IBM の shell 環境(ibmcloud)結構独自なので、慣れが必要です。
追記1
Tomcat にも気になるから、やってみました。
無料枠だとメモリは上限 256M しか使えないため、Tomcat サーバー起動できません。
以下のエラーが出る:
2021-03-30T03:41:55.59+0000 [APP/PROC/WEB/0] ERR Cannot calculate JVM memory configuration: There is insufficient memory remaining for heap. Memory available for allocation 256M is less than allocated memory 590168K (-XX:ReservedCodeCacheSize=240M, -XX:MaxDirectMemorySize=10M, -XX:MaxMetaspaceSize=78168K, -Xss1M * 250 threads)
どうやら、デフォルトでメモリーを一杯設定してしまったみたい。
スケールのやり方もあったが、無料枠では使えない。(そもそも最大 256M しか使えない)
ibmcloud cf scale koryo -m 1G
こちらの記事を参考し、
https://stackoverflow.com/questions/56658354/jvm-insufficient-memory-issue
manifest.yml を修正したらうまく行った。(Java の環境変数を指定する)
ちなみに、Tomcat のバージョンは 9.0.44
$ cat manifest.yml
---
applications:
- name: koryo
random-route: true
path: target/GetStartedTomcat.war
memory: 256M
instances: 1
buildpack: java_buildpack
env:
JAVA_OPTS: '-Xmx256M'
追記2
https://cloud.ibm.com/docs/cloud-foundry-public?topic=cloud-foundry-public-deployingapps
以下のコマンドで war だけを更新。(jenkins を入れてみました)
# war だけを更新する
ibmcloud cf push GetStartedJava -p jenkins.war
# log を見る
ibmcloud cf logs GetStartedJava
参考になった記事:
無料で使えるIBM Cloudサービスの調べ方
https://qiita.com/ayatokura/items/fb7606bf7c052ad7e75b
IBM CloudでCloud Foundryアプリケーションをデプロイをする
https://qiita.com/hayatochiri222/items/49d7161683c79b4b3aaa
ibm cloudにdeployしていたappが動かなくなっていたので対応した
https://qiita.com/syui/items/0010d81c6375f5f771e7
Getting started with Liberty for Java
https://cloud.ibm.com/docs/cloud-foundry-public?topic=cloud-foundry-public-getting-started-liberty&locale=ja
ロケーションについて
https://cloud.ibm.com/docs/containers?topic=containers-regions-and-zones&locale=ja
IBM Cloud CLI のインストール
https://cloud.ibm.com/docs/cli?topic=cli-install-ibmcloud-cli&locale=ja
汎用 IBM Cloud CLI (ibmcloud) コマンド
https://cloud.ibm.com/docs/cli?topic=cli-ibmcloud_cli&locale=ja
IBM Cloud Shellを触ってみた
https://qiita.com/testnin2/items/17d10a304fa581889226
その他
https://qiita.com/yamachan360/items/1563cd3ea6271afe46ab
https://qiita.com/ayatokura/items/289600873af05d0034a9
以上。