Bluemix

Bluemix Public のスペースにクォータを設定する

More than 1 year has passed since last update.

Cloud Foundry Command Line Interface (cf CLI)を利用して、Bluemix Public のスペースにクォータを設定してみました。



はじめに

クォータは Bluemix Doc では割り当て量と表現されているのですが、Bluemix Public に関しては組織に対する割り当て量の記載があるのみでスペースに関しては記述がありません。

そこで Cloud Foundry のドキュメントをご覧ください。

Cloud Foundry Documentation - Creating and Modifying Quota Plans

https://docs.cloudfoundry.org/adminguide/quota-plans.html

スペース単位でもクォータが設定できそうですね。

以下では、Bluemix Public でも使えるか確認していきます。


スペースに設定されたクォータと定義の確認

まずは初期状態でスペースに設定されたクォータと定義を確認してみましょう。

$ cf space dev

id@example.com として組織 id@example.com 内のスペース dev の情報を取得しています...
OK

dev
組織: id@example.com
アプリ: nodejs
ドメイン: mybluemix.net
サービス: availability-monitoring-auto, Cloudant NoSQL DB, Continuous Delivery, Object Storage
セキュリティー・グループ: bluemix_cf_api_4, dns, bluemix_cf_api_3, bluemix_cf_api_1, bluemix_cf_api_2
スペース割り当て量:
$

$ cf space-quotas

id@example.com としてスペース割り当て量を取得しています...
OK

名前 合計メモリー インスタンス・メモリー 経路 サービス・インスタンス 有料プラン アプリ・インスタンス 経路ポート
$

初期状態では設定も定義も無いみたいですね。


クォータの定義

次は実際にクォータの定義を作ってみます。

参考のため組織のクォータの定義を確認してみます。

$ cf quotas

id@example.com として割り当て量を取得しています...
OK

名前 合計メモリー インスタンス・メモリー 経路 サービス・インスタンス 有料プラン アプリ・インスタンス 経路ポート
q2GB 2G 2G 500 10 許可されました 制限なし 0
q4GB 4G 4G 500 20 許可されました 制限なし 0
q8GB 8G 4G 500 40 許可されました 制限なし 0
q16GB 16G 4G 1000 80 許可されました 制限なし 0
q32GB 32G 4G 1000 160 許可されました 制限なし 0
q64GB 64G 4G 1500 320 許可されました 制限なし 0
q128GB 128G 8G 2000 640 許可されました 制限なし 0
q256GB 256G 8G 4000 1024 許可されました 制限なし 0
q512GB 512G 8G 8000 2000 許可されました 制限なし 0
qIBM 1G 1G 100 4 許可されました 制限なし 0
q256MB 256M 制限なし 100 100 不許可 制限なし 0
$

q512GB というのがコンソールの「アカウント」>「組織の管理」ページで確認できるあれですね。

折角なので操作をミスしても課金されずに済むような sandbox 用の定義を作りましょう。

インスタンス・メモリーを 512MB に制限して有料プランを不許可にすれば実現できそうな気がします。その他は q512GB の設定を上限にしておきます。

コマンドのヘルプを確認します。

$ cf help create-space-quota 

名前:
create-space-quota - 新しいスペース・リソース割り当て量を定義します

使用法:
cf create-space-quota QUOTA [-i INSTANCE_MEMORY] [-m MEMORY] [-r ROUTES] [-s SERVICE_INSTANCES] [-a APP_INSTANCES] [--allow-paid-service-plans] [--reserved-route-ports RESERVED_ROUTE_PORTS]

オプション:
-a アプリケーション・インスタンスの合計数 -1 は量に制限がないことを表します。 (デフォルト: 制限なし)
--allow-paid-service-plans 有料サービス・プランのインスタンスをプロビジョンできます (デフォルト: 不許可)
-i 1 つのアプリケーション・インスタンスが占有できる最大メモリー量 (例: 1024M、1G、10G)。 -1 は量に制限がないことを表します。 (デフォルト: 制限なし)
-m 1 つのスペースが占有できる合計メモリー量 (例: 1024M、1G、10G)
-r 経路の合計数
--reserved-route-ports 予約されたポートで作成される可能性のある経路の最大数 (デフォルト: 0)
-s サービス・インスタンスの合計数

関連項目:
quotas, space-quotas

では作成します。

cf create-space-quota sandbox -i 512M -r 8000 -m 512G -s 2000

id@example.com として組織 id@example.com のスペース割り当て量 sandbox を作成しています...
OK
$ cf space-quotas
id@example.com としてスペース割り当て量を取得しています...
OK

名前 合計メモリー インスタンス・メモリー 経路 サービス・インスタンス 有料プラン アプリ・インスタンス 経路ポート
sandbox 512G 512M 8000 2000 不許可 制限なし

作成できました。


スペースへの設定

スペース dev に設定して実験していきましょう。

cf set-space-quota dev sandbox

id@example.com としてスペース割り当て量 sandbox をスペース dev に割り当てています...
OK
$

$ cf space dev

id@example.com として組織 id@example.com 内のスペース dev の情報を取得しています...
OK

dev
組織: id@example.com
アプリ: nodejs
ドメイン: mybluemix.net
サービス: availability-monitoring-auto, Cloudant NoSQL DB, Continuous Delivery, Object Storage
セキュリティー・グループ: bluemix_cf_api_4, dns, bluemix_cf_api_3, bluemix_cf_api_1, bluemix_cf_api_2
スペース割り当て量: sandbox (512G メモリー制限, 512M インスタンス・メモリー制限, 8000 経路, 2000 サービス, 有料サービス 不許可, 制限なし アプリのインスタンス制限)
$


確認

さて、どうでしょうか。

コンソールから確認します。

まずはランタイムのメモリをいじってみます。

512MB から増加させます。

メモリ増加.PNG

このようなエラーになりました。

メモリ増加エラー.PNG


BXNUI0020E: Cloud Foundry へのコンタクトで問題が発生したため、'nodejs' アプリの設定は更新されませんでした。


それとわかるメッセージではありませんが、256MB への変更は成功しましたので効いていると考えてよいと思います。

次に有料のサービスが作成できるか試してみます。

ちょっと怖いので作成するのは固定の支払いの無い「Push Notifications」にしてみます。

サービス.PNG

無事にエラーになりました。

サービス作成エラー.PNG


The service instance cannot be created because paid service plans are not allowed for your space.


こちらのメッセージはそれっぽいですね。


クォータの定義の更新

定義の更新をしてみます。

ここまでの sandbox の例ではアプリケーション・インスタンスの合計数を無制限にしていますが、1 にすれば確実ですね。そのように変更してみます。

$ cf update-space-quota sandbox -a 1

id@example.com としてスペース割り当て量 sandbox を更新しています...
OK
$ cf space-quota sandbox
id@example.com としてスペース割り当て量 sandbox 情報を取得しています...
OK

合計メモリー制限 512G
インスタンス・メモリー制限 512M
経路 8000
サービス 2000
非基本サービス 不許可
アプリのインスタンス制限 1
予約された経路ポート
$


確認

確認します。

インスタンス数3だったアプリケーションを開始してみます。

インスタンス数制限.PNG

エラーになりました。

インスタンス数制限エラー.PNG

なお、停止状態であればインスタンス数の変更は制限を超えた値にも可能でした。

開始するときにエラーになるようです。


合計メモリー制限の動作

ここまでの例の中で「インスタンス・メモリー制限」と「非基本サービス(有料プラン)」の動作を確認しましたが、「合計メモリー制限」についても確認してみます。

まず、クォータはこのようにしました。

$ cf space-quota sandbox

id@example.com としてスペース割り当て量 sandbox 情報を取得しています...
OK

合計メモリー制限 512M
インスタンス・メモリー制限 制限なし
経路 8000
サービス 2000
非基本サービス 不許可
アプリのインスタンス制限 制限なし
予約された経路ポート
$

コンソールからメモリーを増やします。

合計メモリー制限でメモリーを増やす.PNG

今回はエラーにならずに更新できました。

開始してみます。

合計メモリー制限で起動.PNG

開始時にエラーになるようです。

インスタンス数制限と同様の動きですね。


余談: Cloud Foundry アプリの無料枠に関して

従量課金アカウント入りしたのが今月なので手探りなのですが、Bluemix Doc の料金ページ には「Bluemix ランタイムを通して共有される 」とか「すべてのランタイム間で共有」とあるものの、料金カリキュレーターで見積もった結果と、Bluemix Blog の Bluemix UI Updates: August 2014 の記載を鑑みて、無料枠は Node.js や Liberty for Java といったランタイム(の種別)毎に割り当ててもらえているものと理解しています。(ただし、カリキュレーターにあるようにコミュニティーのビルドパックは一括りで同一枠。たとえば Tomcat と PHP は同じ枠。)

それを踏まえて、私は無料枠で遊ぶにあたり、ランタイムの種別でスペースを分け、ここで試した合計メモリー制限を設定することにしました。

Node.js や Liberty for Java、Community といった名前のスペースを作って、それぞれに合計メモリー制限 512MB と有料プランの制限を設定しています。これで安心!・・・なはず!

コマンドの例

$ cf create-space-quota sandbox -r 8000 -m 512M -s 2000

id@example.com として組織 id@example.com のスペース割り当て量 sandbox を作成しています...
OK
$ cf space-quota sandbox
id@example.com としてスペース割り当て量 sandbox 情報を取得しています...
OK

合計メモリー制限 512M
インスタンス・メモリー制限 制限なし
経路 8000
サービス 2000
非基本サービス 不許可
アプリのインスタンス制限 制限なし
予約された経路ポート
$ cf create-space "Liberty for Java" -q sandbox
(以下略)


最後に

スペースへのクォータ設定が使えそうなことがわかりました。

組織に対するクォータ(割り当て量)のほうは、上限ではなく消費量の通知用のトリガーであるとドキュメントにありますが、スペースへのクォータは上限として働くようです。

しかしながら、Bluemix Doc に記述が無いですし、IBM からの各種案内では制限できないようなことが書いていることが多いので実際に運用する場合にはサポートに確認したいところです。

上限としての効き方も今回はコンソールからの確認だけ行いましたが、manifest.yml を使ったデプロイの場合なども確認したいですね。