IBM CloudのPaaSを使ってみる

Taiji
12 min readNov 30, 2020

はじめに

今回は、IBM Cloudの代表的なサービスの一つであるCloud Foundryを使って、PaaSとしてのIBM Cloudの使い方を説明します。
昨今、コンテナでのアプリケーション実装が台頭してきており、Cloud Foundryでのアプリケーション実装が影に隠れがちではありますが、非常に便利なサービスですので、知っておいて損は無いと思います。コンテナ(Docker + Kubernetes/OpenShift)とCloud Foundry(広義ではコンテナと分類されます)は、シチュエーションに応じて使い分けると良いでしょう。

Cloud Foundry

Cloud Foundryとは、PaaSを実装するプラットフォームの代表的なものの一つで、Cloud Foundry Foundation配下のオープンソースプロジェクトです。実は、IBM CloudのPaaSとしての基盤を支えているのもこのCloud Foundryです。元々はVMWareが開発し、Pivotal社のPivotal Web Servicesが有名だと思います。

内部ではコンテナ技術が使われており、Buildpackと呼ばれる仕組みで、様々な開発言語でコーディングされたソースコードを基に実行イメージを生成して柔軟にアプリケーションを実行させることができます。
アプリケーション開発者は、インフラ含めた実行環境に気を取られることなく、アプリケーションの実装に集中できるのでとても効率的に開発可能です。

Cloud Foundry サービスの作成

IBM CloudではこのCloud Foundryのサービスを簡単に作成することができます。実際に作成してみるのが一番わかり易いと思うので、以下の手順でサービスを作成してください。

IBMCloudにログイン
以下のURLにアクセスして、IBMCloudにログインします。
https://cloud.ibm.com

ダッシュボードが表示されます。

Cloud Foundryを検索
ウィンドウの右上にある[Catalog/カタログ]ボタンをクリックし、「Cloud Foundry」という単語で検索します。Cloud Foundryが、検索結果として表示されますので、タイルを選択します。

Cloud Foundryの作成
表示されたPublic Applicationsタイルにある作成ボタン(Createボタン)をクリックします。

任意の地域(region)を選択します。 (安定しているのでダラスをお勧めします)
アカウントの種類がライトアカウント(無料アカウント)の場合、ライトプランのみ選択できますので、選択してください。この料金プランは無料でご利用いただけます。この時、割り当てるメモリ量を選択できます。ライトアカウントでは、Cloud Foundryアプリに割り当てるメモリ量の合計が最大256MBになります。つまり、一つの実行環境に256MBを割り当てた場合はそれ一つのみ、128MBの環境なら二つ作成が可能、といった感じです。

言語は、自分で開発したい言語を選択します。2020年11月現在では、Java、Node.js、.net、Go、PHP、Python、Ruby、Swiftに対応しています。本記事では、Node.jsを選択します。
アプリ名(App name)は任意の名称を指定してください。この文字列は自動でホスト名(Host name)へ指定されます。ホスト名の文字列は、パブリッククラウド上に公開されるこのアプリケーションのURLの一部(サブドメイン)になりますので、インターネット上で(ドメイン含め)一意になる必要がありますのでユニークな文字列を指定してください。自動入力されたホスト名は自分でEditすることも可能です。

ここまで入力が完了したら右下にある作成ボタン(Createボタン)をクリックします。

自動でアプリケーションの管理画面に遷移します。ステータスが実行中(Running)になったら作成完了です。その右側にあるアプリURL(Visit App URL)が作成したアプリケーションへのリンクになってますので、クリックします。

別ウィンドウでアプリケーションが表示されます。これで作成は完了です。

アプリケーションの編集 — 1

現在IBM CloudのCloud Foundry上にデプロイされて表示されているのはデフォルトで用意されたHello Worldのサンプルアプリです。これでは実際に使えないので、自分で作成したアプリケーションをここに置き換えていく必要があります。

方法はいくつかありますが、一番簡単なのは、現在デプロイされているこのHello Worldアプリを書き換えていく(編集していく)方法です。これを行うには、継続的デリバリー機能 (Continuous Delivery)を有効にする必要があります。アプリ管理画面のの左側のメニューから概要(Overview)を選択し、下へスクロールして継続的デリバリーを有効にする(Enable continuous delivery)、というリンクをクリックします。

新しいウィンドウで継続的デリバリーツールチェーンの画面が開きます。基本的にはすべてデフォルト値のままで良いのですが、デリバリーパイプライン(Delivery Pipeline)のAPIキーを生成する必要があります。デリバリーパイプラインタブを選択し、新規ボタン(Newボタン)をクリックします。APIキー作成画面がポップアップしますのでそのままOKボタンをクリックしてください。ポップアップが閉じてAPIキーが生成されます。

その他の項目でエラーが出ていないことを確認して、作成ボタン(Createボタン)をクリックしてください。アプリ名にスペースが入っていると、ここでのリポジトリ名にもデフォルトでスペースが入りエラーになる可能性があります。その場合はスペースを削除するなり、ダッシュで埋めるなりしてリネームしてください。

ツールチェーンが作成されました。ツールチェーンには、ソースコードを編集するためのIDE(統合開発環境)としてEclipse Onlineが用意されています。ブラウザ上でEclipseを使うことが可能です。
また、コードのバージョン管理にはGitリポジトリが自動で割り当てられます。Eclipse Onlineで編集したソースコードはこのリポジトリにコミット、Pushしていく形になります。
まずはEclipse Onlineのタイルをクリックしてください。

Eclipseが開いたら、左にあるプロジェクトツリーを展開し、publicの下にあるindex.htmlを選択してください。自動で右側のワークスペースにソースコードが表示されます。
ここでは試しに、16行目の「Hello World!」の文字列を「こんにちは!」へ変更してみます。

編集は自動で保存されます。編集が終わったら、左側のメニューからGitをクリックします。右側のワークスペースにリポジトリ管理のGUIが表示されますので、コミットコメントを入力し、右上にあるコミットボタンをクリックします。

コミットが完了すると、Pushの準備ができますので、Pushボタンをクリックします。

Pushが完了すると、履歴(History)へ更新内容が反映されます。左上にある矢印ボタンでツールチェーン画面へ戻ります。

ツールチェーンから、今度はDelivery Pipelineを選択します。これは、段階的リリースをサポートするツールになります。

パイプライン画面が表示されたら、ビルドステージとデプロイステージそれぞれのステータスをチェックします。おそらく、自動でビルド及びデプロイが実施され、緑色表示になっているのではないでしょうか。
デプロイステージパネルにある、コンソールを表示(View console)リンクをクリックするとアプリ管理画面が開きますので、先程同様アプリURLからアプリケーションを表示します。

Hello World!の文字列が先程編集した内容で更新された状態になったことが確認できました。

これが、クラウド上で直接ソースコードを編集していく方法になります。

アプリケーションの編集 — 2

次に、ローカルで動作確認をしたアプリをクラウド上へ反映させていく方法について説明します。これは、チュートリアルとしてアプリ管理画面の初期画面へ解説が掲載されています。

IBM Cloud Cloud Foundryのアプリ管理画面にて、左側のメニューからはじめに(Getting Started)を選択します。基本的には、ここに書かれている通りに進めていけばOKです。

こちらの方法は、ローカルでNode.jsアプリを実装して、それをコマンドラインでIBM CloudへPushしていく方法になります。そのため、以下のツールの準備が必要になります。

IBM Cloud CLI
Git
Node.js

サンプリアプリのクローン

最初にGitHubリポジトリからサンプルアプリのソースコードをクローンします。

$ git clone https://github.com/IBM-Cloud/get-started-node

ローカルでアプリを実行

npmパッケージマネージャーを使用して依存関係をインストールし、アプリを実行します。

コマンドラインで、ディレクトリをサンプルアプリが配置されている場所に変更します。

$ cd get-started-node

package.jsonファイルにリストされている依存関係をインストールして、アプリをローカルで実行します。

$ npm install

アプリを実行します。

$ npm start

http://localhost:3000 にアクセスして、ゲストブックアプリが表示されることを確認します。

アプリデプロイの準備

IBM Cloudにデプロイするには、manifest.ymlファイルをセットアップすると便利です。マニフェスト.ymlには、名前、各インスタンスに割り当てるメモリの量、ルートなど、アプリに関する基本情報が含まれています。 get-started-nodeディレクトリにサンプルのmanifest.ymlファイルが準備されています。

manifest.ymlファイルを開き、名前をGetStartedNodeから自分のアプリ名に変更します。ここでは、「taiji test app01」になります。

applications:
- name: GetStartedNode
random-route: true
memory: 128M

アプリのデプロイ

IBM Cloud CLIを使用して、アプリをIBMCloudにデプロイします。

IBM Cloudへログインします。

$ ibmcloud login 

Cloud Foundryの組織とスペースのターゲットを指定します。

$ ibmcloud target --cf

get-started-nodeディレクトリー内から、アプリをIBMCloudにプッシュします。

$ ibmcloud cf push

アプリケーションのデプロイには数分かかる場合があります。 デプロイが完了すると、アプリが実行中であることを示すメッセージが表示されます。

pushコマンドの出力にリストされているURLでアプリを表示するか、次のコマンドを実行してアプリのデプロイステータスとURLの両方を表示します。

$ ibmcloud cf apps

IBM Cloud resource list から自分のアプリの状態を確認できます。

これが、CLIを使ってローカルで開発したアプリをIBM CloudへPushする方法になります。

まとめ

いかがでしたでしょうか?もしかしたら少し癖のあるツール、サービスかもしれませんが、使い方さえなれてしまえばとても便利なツールだと思います。今回はNode.jsで試しましたが、是非いろいろな言語で試してみてください。

このブログがお役に立てましたら何よりです。
ではでは!

--

--

Taiji

Datadog Senior Developer Advocate | Ex-OutSystems Dev Community Advocate | Ex-IBM Dev Advocate | Microsoft MVP | 筑波大学、名城大学非常勤講師 | 記事は個人の見解であり、所属する組織とは関係ありません。