清水理史の「イニシャルB」
1日10分だけ起動するWindows 10環境をAzure VMで 「Azure Automation」の自動オン/オフで1日のコストを30円以下に抑える
2019年8月5日 06:00
これまで「うっかり」課金が怖くて、あまり使ってこなかった「Azure VM」。しかし、どうしても夜間に10分間だけ起動するWindows 10環境が必要になり、ついに自分の課金アカウントでVMを稼働! やってみれば何てことなし。しっかりプランを選んでオン/オフを管理すれば、課金の恐怖なんて心配する必要なかった。
クラウド課金恐怖症も、実際に使ってみると……
Azureの機能は、これまでCognitive Servicesを中心に使ってきたのだが、ついに今まで避けてきたVMを使うことにした。
理由は、とある企画で、夜間にRPA処理を自動実行させる環境を用意する必要性が出てきたから。
短時間の稼働なので、小型PCの実機環境を用意するか、NASの仮想マシンで乗り切ろうかとも考えたのだが、さすがにいつまでも自宅でテスト環境を用意するのも時代遅れなので、今回は思い切ってクラウド上にマシンを用意することにした。
かつて、クラウド上の仮想マシンは、ライセンスの関係でWindows Serverのみだったのだが、現状、Azure VMではOSにWindows 10も選択可能になっているため、今回のようなクライアントOSを使ったテストにもうってつけだ。
そもそも、なぜ、今までAzure VMの使用を避けてきたのかというと、理由は単純で、怖かったから。
自宅のテスト環境は、基本的にその案件がクローズするまで、起動させっぱなしにしていることが多いため、クラウド環境を同じような感覚で使ってしまうとコストがかさんでしまう。
うっかり稼働させっぱなしにしたら……、という恐怖感がどうしても頭から離れず、今までクラウドにVMのテスト環境を用意するのは避けてきたわけだ。
しかし、何でもやってみるものである。
実際に使ってみると、早い(速い)し、自動オン/オフできるし、コストも細かくチェックできる。今にして思うと、あの恐怖は何だったんだろうという感じだ。
どのスペックのマシンを選ぶかで、料金は大きく変わる
今回、テスト環境に利用したのは、Azureの「Windows Virtual Machines」で提供されている「Starndard B2s」という仮想マシンだ。
Azureの仮想マシンは、用途によっていくつかのシリーズが用意されている。Bシリーズは、「通常は低から中程度のCPU使用率を基準にして実行されながらも、要求が増えた場合には非常に高いCPU使用率が求められるワークロードに適した、低コストの選択肢」とされている。
VMのシリーズには、v2やv3などの世代があったり、BasicとStandardの違いがあったり(Basicはオートスケールや負荷分散なし)と、結構複雑なので、「どれを選べばいいのかが分からない」というのも、今まで、Azure VMの利用を避けてきた理由の1つではあったのだが、今回は、テスト環境の要求がメモリ4GB以上とはっきりしていたので、比較的選びやすかった。
OSに「Windows 10 Pro Version 1809」を、地域に「東日本」を選択した場合、標準でVMを作成しようとすると、「Standard D2 v2」が選択される。2VCPU、メモリ7GB、一時記憶域100GBで、月額1万7082円というスペックだ。
汎用的な用途であればDシリーズの利用が適しているようだが、フルに動かした場合とは言え、1万7082円の月額料金は、今回のテスト用途には過剰だ。
ということで、メモリ4GBという最低条件を満たしつつ、なるべくコストが安いものを、ということで、前述した「Standard B2s」を選択したわけだ。
スペックとしては、2VCPU、メモリ4GB、8GBの一時記憶域、ストレージはSSD(Premium)で、コストは月額4533円。仮に、うっかり稼働させっぱなしにしたとしても、これくらいなら何とか納得できる金額だろう。
ちなみに、VMの料金は、稼働させた分だけ課金される仕組みとなっている。データ用の追加ディスクなしで作成した今回の仮想マシンのコストは、1時間あたり4.533円と表示された。
ただし、実際の料金は、また変わってくる。AzureのVMは、次の3つの要素に対して課金が発生する仕組みになっているからだ。
- コンピュート要素(CPU、メモリ、ハードウェア)
- ディスク要素
- ネットワーク要素
コンピュート要素は、マシンで選択したCPUやメモリに対しての課金だ。VMに対して割り当てが開始されると同時に課金され、割り当てが解除されると(電源オフでも割り当てを解除しないと課金される)課金が停止する。
ディスク要素は、容量とトランザクションに対して課金される。標準ではOS領域として128GBのVHDが割り当てられるが、このうちの使用量と、ストレージへのトランザクション量に対して課金がされる。ただし、選択したマシンでPremium SSDを選択した場合、トランザクションに対する課金は行われない。
ネットワーク要素は、通信量に応じた課金だ。インバウンドとアウトバウンドの通信があるが、このうちアウトバウンドに関しては、利用料(バイト単位)で課金が発生する。
このあたりの詳細は、こちらや、こちらの記事で解説されているので、参考にするといいだろう。
というわけで、実際の料金は、どのような処理をさせるかによって変わってくることになる。短時間であっても、ディスクやネットワークの要素によっては、料金が高くなる可能性はある。
「Azure Automation」で自動オン/オフ
VMの料金が稼働している時間に対して課金されるとなると、いくら低スペックなVMと言えども、無駄に稼働させておくと、それだけ料金がかさんでしまう。そこで、今回は「Azure Automation」を使って、決まった時間だけVMを稼働させることにした。
Azure Automationは、Azureのさまざまな管理タスクを自動化できる機能だ。「Runbook」と呼ばれるテンプレートを活用すると、さまざまな処理を実行可能で、VMの起動や停止も、Runbookを使えば簡単にスケジュールできる。
Azure Automationサービスの利用には、サービス用のアカウントをAzure ADに登録し、あらかじめ権限を与えておく必要がある(こちらの記事を参照)ので、準備が少々面倒だが、一旦使えるようにしてしまえば、あとはRunbookギャラリーから、使いたいものを追加するだけで、いろいろな操作が簡単にできるようになる。
今回使用したのは、「Start Azure V2 VMs」と「Stop Azure V2 VMs」というRunbookだ。
先に触れたように、VMの課金を停止するには、単にOSをシャットダウンするだけではなく、Azureの管理コンソールから「停止」を実行して、「割り当て解除」の状態にしておく必要がある。
「Stop Azure V2 VMs」のRunbookで、きちんと停止を実行して割り当てを解除できるため、無駄な課金を避けられるわけだ。
今回は、この2つのRunbookをスケジュールで起動させ、VMを夜中の午前2時に起動、午前2時10分に停止するようにしておいた。
実際にいくら料金が掛かったか?
というわけで、作成したVMに、RPAツール(UiPath Community Edition)をインストールし、実行するジョブを保存。外部サイトへアクセスするジョブを実行させた(RPAツールのクラウド管理ツールと接続)。
ジョブは、外部サイトに合計3回ほど簡単なREST APIを発行するだけであり、実行時間としては十数秒程度で、やり取りするデータもごくわずかだが、念のため、VMの稼働時間は先に触れたように10分間としておいた。
この状態で10日ほど経過したタイミングで、Azureのポータルからサブスクリプションの課金状況を確認してみたところ、合計は579.79円だった。
ただし、最初の数日は、ツールのインストールやテストのためにVMを数時間起動していたことがあったし、インストールでもトランザクションを発生させていた。この料金には、こうした分の課金も含まれていることになる。
もう少し、詳しくコストを見るために、「コスト分析」という機能を使って、累積ではなく1日あたりのコストを確認してみると、セットアップやテストを実行していた日は、1日あたり80~90円のコストになっていたが、途中から1日あたり30円ほどにガクッと下がっている。
今後、VM側のメンテナンスなどが発生しなければ、基本的にこのまま1日あたり30円で推移するのではないかと考えられる。1カ月なら30円×30日で900円ほどだ。これなら、無理なく運用できる。
続いて、リソースごとのコストを見てみよう。
最もコストが掛かっているのはディスクで、10日間の累積で529.25円が掛かっている。仮想マシン自体は26.71円(10日間)なので、ディスクの割合がダントツに多い。
この原因は、選択されているディスクの種類が高価だからだ。マシン作成時、Premium SSDが選択されていたのでそのまま作成したが、このコストがかさんでいる。
こちらのウェブページを参考に、ストレージの価格を調べてみると、Premium SSDが128GBのP10の価格が月額2539.04円(最大500IOPS、最大100MB/s)で、Standard SSDは128GBのE10が1075.2円(最大500IOPS、最大60MB/s)、Standard HDD(最大500IOPS、最大60MB/s)なら128GBのS10で659.46円となる。
Premium SSDの場合、リモートデスクトップで接続した際の操作感が非常に軽快なので、GUI操作を伴うテストには適しているのだが、今回のように簡単なジョブを実行する用途の場合、Premium SSDである必要はなさそうだ。
Standard SSDやStarndard HDDでは、トランザクションに応じて課金が発生するが、それを考えても、トータルのコストは安く済みそうなので、思い切ってStandard HDDへ変更してみた。
ディスクのリソースを選択して変更したのだが、数秒ほどで変更できてしまい、拍子抜けしてしまった。こうした構成変更が手軽にできるのは、やはりクラウドならではのメリットだ。
実際に使ってみても、リモートデスクトップ経由での操作を遅いと感じることがない。また、ジョブを実行させるためには、事前にUiPath Studioからクラウド上の管理ツールであるOrchestratorに接続する必要があるため、その起動や接続確立に多少の時間がかかるのだが、Premium SSDとStandard SSDの場合を比べても、起動から接続までにかかる時間にほとんど差はなかった。
用途によっては、Standard HDDでも十分という印象だ。
この変更の結果が、先の1日あたりのコストの途中からガクっと減っている部分だ。1日あたりのコストは90円前後から30円前後へと下がった。これなら毎日動かしてもコスト面の負担は小さくて済む。
テスト目的にも十分活用できる
というわけで、Azure VMでWindows 10を使ってみたが、テスト環境にも十分使えるパフォーマンスがある上、セットアップは楽で、しかも、構成をきちんと選べば、コスト的にもさほど高くないことが分かった。
稼働させっぱなしで使うのは、やはり慎重になる必要があるが、必要なときだけ起動する、定期的に一定時間だけ使う、といった用途であれば、かなり便利だ。
クラウドサービスは、どれもそうだが、一歩を踏み出すまで、いつもコスト的な恐怖に襲われる。だが、使ってみれば、実際にはたいしたことがない場合が多い。エンタープライズ向けだけでなく、もう少し、カジュアルな事例を紹介し、意外にリーズナブルなことが分かると、もっと用途も増えそうだ。