IBM Cloudで元々CloudFoundryを利用してNode.jsアプリケーションをデプロイしてました。
少し前からアラートはありましたが、2023年5月31日で完全に使えなくなった模様で6/1になった途端に動かしていたアプリケーションが止まってしまいました。
https://cloud.ibm.com/docs/cloud-foundry-public?topic=cloud-foundry-public-ha-dr&locale=ja#:~:text=IBM%C2%AE%20Cloud%20Foundry%20%E3%81%8C,%E6%97%A5%E3%81%AB%E8%A1%8C%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82
変わりを調べるとIBM CloudのCode Engineというサービスにデプロイするのが良さそうな雰囲気だったので、調べて試してみました。
ということで試していきます。
IBM Cloudコマンドのインストール
まずはCLIツールのインストールが必要です。
IBM Cloudを色々なプロジェクトで使うというよりも特定のプロジェクトで利用することがあるので、ローカルPCに環境を作るよりも特定のプロジェクトに紐づいたGitHub Codespaces環境にインストールしていきます。
GitHub Codespacesの環境はLinuxになるので以下で完了です。
curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
バージョンの確認
$ ibmcloud -v
ibmcloud version 2.16.0+492aff3-2023-04-06T16:13:44+00:00
最初だけですが比較的簡単にインストールできました。
--ssoオプションでログイン
CLIにログインします。
--sso
オプションでワンタイムパスコードを使いました。
他のやり方でも良いと思いますが、これが最初に成功したのでこちらでメモしておきます。
$ ibmcloud login --sso
API endpoint: https://cloud.ibm.com
Get a one-time code from https://identity-1.ap-north.iam.cloud.ibm.com/identity/passcode to proceed.
Open the URL in the default browser? [Y/n] > y
The browser cannot be launched. Copy the URL and paste it into your browser window to get the one-time code.
One-time code >
とこんな感じでコードを入力するプロンプトがでます。
GitHub Codespaces環境なのでデフォルトブラウザなどはなく、The browser cannot be launched
と表示されますね。
IBM Cloudのコンソールにログインして、ユーザー設定のCLIとAPIにログイン
を押します。
以下のようなワンタイムパスコードが表示されるのでターミナルに貼り付けてログインします。
問題なければ以下のような表示になりログインできます。
Authenticating...
OK
Targeted account sugawara nobisuke's Account
次に
Select a region (or press enter to skip):
1. au-syd
2. in-che
3. jp-osa
4. jp-tok
5. kr-seo
6. eu-de
7. eu-gb
8. ca-tor
9. us-south
10. us-east
11. br-sao
Enter a number>
と出ますがとりあえず何も選択せずにエンターキーでスキップします。
Code Engineのプラグインをインストールする
こちらのページにある通りに進めます。
以下でプラグインのインストールです。
$ ibmcloud plugin install code-engine
インストールが問題なくできたか確認
$ ibmcloud plugin list
Listing installed plug-ins...
Plugin Name Version Status Private endpoints supported
code-engine[ce] 1.43.5 true
1.43.5のバージョンがインストールされた模様です。
$ ibmcloud ce help
を実行すると以下のような出力になります。ceがCode Engineの略称みたいですね。
NAME:
code-engine, ce - Manage Code Engine components
Webコンソールからプロジェクトの作成
CLIから全てやっても良いと思うのですが、イマイチイメージが掴みにくかったのでプロジェクト作成はWebから進めてみました。
Code Engineのサイトから作成を押して進みます。
ロケーションを選び、名前を付けて作成します。リソースグループはdefaultのままで大丈夫です。
作成に数秒かかり、少し待つと以下のような表示になります。
一旦これでプロジェクトを作ることが出来ました。
実際のアプリケーションはプロジェクトの中に紐づく単位となります。
- プロジェクト
- アプリケーション(Webアプリなど)
- ジョブ(定期実行タスクなど)
という構成になっている模様です。
CLIでアプリケーション作成前準備
ここからCode Engineでアプリケーション作成前の準備になります。
- リージョン指定
- リソースグループ指定
- プロジェクト指定
の3つの設定になります。
1. リージョン指定
リージョンを指定する必要がある模様です。
先ほどスキップしましたが、Code Engineでテストアプリケーションなどを作成してみます。
東京リージョンでプロジェクト作成した場合jp-tok
というIDがロケーションに表示されてると思います。
$ ibmcloud target -r jp-tok
特にエラーが出なければOKです。
Switched to region jp-tok
API endpoint: https://cloud.ibm.com
Region: jp-tok
User: xxxxxxx@gmail.com
.
.
.
略
といった出力になります。
2. リソースグループの指定
リソースグループも指定する必要がある模様です。
以下でリソースグループを調べます。
$ ibmcloud resource groups
以下のようにリソースグループが表示されます。
Name ID Default Group State
default xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx true ACTIVE
defaultしかない場合は以下のように設定できます。ID指定でも大丈夫そうでした。
$ ibmcloud target -g default
3. プロジェクトの指定
登録されているプロジェクトの一覧を表示してみます。
$ ibmcloud ce project list
僕の場合mybotというプロジェクトを作ってたのでこのような表示になりました。
Name ID Status Enabled Selected Tags Region Resource Group Age
mybot xxxxxxxxxxxxxxxx active true false jp-tok default 161m
プロジェクトの選択をします。mybot
という名前だったので以下のような指定にしました。
$ ibmcloud ce project select --name mybot
アプリケーションの作成とデプロイ
n0bisukeBotという名前でアプリケーションの作成を行います。
(ここまでの名前付けだとmybotプロジェクト内にn0bisukeBotというアプリを作成します。)
デプロイ方法はいくつかありましたが、 ローカルのソースコードを直接デプロイする方法を試してみます。
参考: https://cloud.ibm.com/docs/codeengine?topic=codeengine-app-local-source-code
$ ibmcloud ce application create --name n0bisukeBot --build-source .
特にエラーもなくデプロイできました。。 だいたいエラーでたりする印象ですが一発でいけました。
デプロイ後の操作など
アプリケーションの更新
アプリケーションの更新をする際にはibmcloud ce application create
ではなくupdate
を使えば良いみたいです。
$ ibmcloud ce application update --name n0bisukeBot --build-source .
簡単ですね。
環境変数の登録
CLIから環境変数の登録ができます。トークンなどを入れておけます。
$ ibmcloud ce application update --name n0bisukeBot --env TOKEN=xxxxxx
お金をケチりたいのでミニマム構成にしてみる。
Code Engineはデフォルトで作成すると4GBくらいのメモリになり、ちょっとオーバースペックになります。
最小構成ではメモリ0.25GB、0.125 vCPUの指定ができますが、CLI経由じゃないとこの組み合わせは選べないかもしれません。createで作成する際に以下のようにオプションを指定して作成することでミニマム構成にできます。
参考: https://cloud.ibm.com/docs/codeengine?topic=codeengine-mem-cpu-combo
$ ibmcloud ce application create --name n0bisukeBot --build-source . --max-scale=1 --memory=0.25G --cpu=0.125 --min-scale=1
また、--min-scale
を0にすることで、アクセスが無い時にはスリープ状態になって全くお金が掛からない状態にもできました。僕が試したときには2分~3分くらいでスリープ状態(インスタンス0)になっていました。
逆に起動させっぱなしにしたい場合は--min-scale
を1にしておけば、常時1つのインスタンスが立ち上がっていてスリープが無い状態も作れそうでした。
Code Engineの無料枠の計算がイマイチよくわかってませんが、以下の記事でもあるように特定の時間だけ立ち上げておいて夜間はスリープ状態にするような仕様のアプリケーションにしておけば月毎の無料枠内でも収まるかもしれません
所感とまとめ
意外と簡単にデプロイまですることができました。
どこでそんなに使ったか不明ですが半日くらい動かしてみて331円かかっていました。途中のテストデプロイ時などにメモリなどをリッチなインスタンスを作ってしまって一気に無料枠を超えてしまったのかな... とか予想しています。
無料枠で結構使えるような気はしていますが、少しでも金額かかるのが気になる人にはあまりおすすめできないかもしれません。
2023/7/14に追記: 結果0円だった
割とすぐ止めたのもありますが、結果無料枠内だったから0になったのかわからないですが、7月に入ってから6月分を確認したら0円でした。0円でどこまでいけるのかな。。。
誰かの参考になれば幸いです。