はじめに
IBM Cloud には Code Engine というフルマネージド型のサーバーレス・プラットフォームが存在します。
こちらのサービスは従量課金制にて提供されており、毎月割り当てられる無料利用枠を超過すると課金が発生します。
料金体系ページより
無料利用枠にある着信要求
項目は1か月あたり100,000件のHTTP要求
という記載がありイメージしやすかったのですが、他項目のCPU: 10万vCPU秒/月
とメモリー: 1か月あたり200,000 GB秒
に関しては、実際のところどれほど無料で利用できるのか具体的にイメージできなかったため少し調査してみました。
最小and最大インスタンス数: 1 / vCPU: 0.5個 / メモリ: 1GB 構成の場合
まずは、HTTP要求を受け付ける一般的なWebアプリケーションを上記構成のCode Engineに実際にデプロイして確認してみます。
デプロイするアプリとして Code Engine のサンプルアプリとしてOSS提供されている以下のアプリを採用します。
https://github.com/IBM/CodeEngine/tree/main/hello
Code Engineのアプリケーションの作成
設定画面に遷移し、ソースコードからビルドする形式を選択、そしてビルド詳細の指定
として下記のように入力します。
今回のアプリはlisten ポート
などはデフォルトのままで動作するため、空欄のままでOKです。
最後に右カラムの作成
ボタンを押下するとデプロイが開始されます。
少し待つとデプロイが完了し、右上にあるアプリケーションのテスト
ボタンから作成されたエンドポイントに対してHTTPリクエストを送ることができます。
今回デプロイしたアプリケーションのOverviewページを見てみると、下記のように表示されています。
これはつまり、今回のアプリケーション作成時に設定した通り、最小インスタンス数として指定した1インスタンスが起動中、インスタンスが起動しているのでvCPUを0.5個使用中、メモリを1GB使用中、ということを表しています。
最大インスタンス数も最小と同様に1を指定しているため、このアプリは基本的にはこの状態を維持することになるのかなと思います。
これであればvCPU/メモリの使用量をシンプルに計算できそうです。
e.g. 上記構成における1日の使用量
- vCPU
- 1(インスタンス) * 0.5(vCPU) * 60(秒) * 60(分) * 24(時間) = 43200(vCPU秒)
- メモリ
- 1(インスタンス) * 1(GB) * 60(秒) * 60(分) * 24(時間) = 86400(GB秒)
(実際にはアプリケーションのビルド時にもvCPU/メモリは使用されますが、それらはアプリケーション作成時に設定したランタイム設定
とは別枠にて計算されます。今回はまずシンプルに概算したいため上記計算には含めていません。ビルド時の価格設定に関しての詳細はこちらをご確認ください。)
では、Code Engne の無料利用枠はどれほどだったかとふりかえってみると下記の通りでした。
- vCPU
- 100000(vCPU秒/月)
- メモリ
- 200000(GB秒/月)
ということで、今回の構成のままアプリを使い続けると、vCPU/メモリ共におおよそ下記の日数にて毎月割り当てられる無料利用枠を使い切ることになりそうです。
- vCPU
- 100000 / 43200 = 2.31481481(日)
- メモリ
- 200000 / 86400 = 2.31481481(日)
最小インスタンス数: 0 / vCPU: 0.5個 / メモリ: 1GB 構成の場合
もう少し長い期間を無料で利用できるとうれしいため、今度は最小インスタンスを0にしてみます。
最小インスタンス数以外は先程と同じ設定にして、また新たにアプリケーションをデプロイします。
前回同様に少し待つとデプロイが完了し、ブラウザからエンドポイントにアクセスすることで、こちらも前回同様にHello World
を確認できました。
今回新たにデプロイしたアプリケーションのOverviewページを見てみると、下記の表示となっており、インスタンスは起動した状態です。
暫く何もしないで放置していると、インスタンス数が0になりました。
合わせてvCPU/メモリも0になり、全くそれらを使用していない、という状態です。
インスタンスが一つも起動していない状態で、HTTP要求を送ってみます。今回は応答時間も確認したいため、要求の送信
ボタンを押下します。
すると、少し待つ必要がありますが、12107ミリ秒後にレスポンスが確認できました。
インスタンスが起動している状態で、要求の送信
ボタンを押下してみると467ミリ秒後にレスポンスが確認できました。
そして、また暫く放置するとアクティブなインスタンス数は0になります。
これで、リクエストがある時間帯のみインスタンスが起動する(=リクエストが無い時間帯はvCPU/メモリを使用しない)、という構成にできました。
インスタンス未起動時に発生したリクエストへの応答は遅くなってしまいますが、稀にしか使わない、初回リクエストへのレスポンスは遅くても良い、というような要件のアプリであれば、vCPU/メモリ使用量をかなり抑えることができ、用途によっては毎月の無料利用枠のみでの運用も現実的かと思います。
(毎月の無料利用枠を超過したとしてもリーズナブルなお値段体系だと思うので、気にしすぎずカジュアルに利用していけると良さそうです)
おわりに
今回の調査によって、Code Engine の無料利用枠のボリュームがどれほどなのか、どうすると効果的に使えるのか、という点をイメージすることができました。
Code Engine は個人的にお気に入りなサービスとなりそうなので、引き続きいろんな用途で活用していきたいと思います。