経費節減(仮想マシン)

問題提起

僭越ですが「入るを量りて出ずるを制す」です。会社の収入に見合う支出に抑えるのは経営の鉄則。当社の身の丈を考えれば、毎月のインフラ維持費は2〜3万円が妥当と考えます。会社設立時新規に購入した機材はもちろん、加入したネットワーク、各種サービス・サブスクリプションについても、100円/月単位で厳格にコストを評価して抑制の努力をして来たところです。

そんな中、大きな問題として、設立以前の活動から継承されるサービスの維持費があります。とりわけ、社長が個人として運営して来たサーバサイト(delegate.org)です。今後の当社の業務と深く関係するサイトであり、会社としてその運営を引き継ぐ由。それに掛かる運営費のうち、ドメイン名維持費としてN. Solutionsに支払っている年間$10.00は、他社の同様なサービスの料金と比較して妥当と言えます。一方、サーバの運用費用としてMS Win. Azureに支出されて来た月当たりおよそ1万円は昨今の一般的レンタルサーバ費用と比較して全く妥当性を欠き、そのままでは会社として引き継ぐ事を許容できません。

本件にかかる維持費としては半減目標としては3,000円/月以内とすることを求めます。費用削減の検討、実施計画をお願いします。

経理部 佐藤
2020-0426

p.s. 解約手続きもありますので、Azureの次回課金期間が始まる5月11日より前に、余裕を持って移行を決行してくださるようお願いします。


対応決定

どうも、社長です。経費の節減に関してご提案をありがとうございます。本件については、早急に対策を講じたいと思います。まず状況整理のため、これまでの経緯を説明します。

当該サーバためのAzureのサブスクリプションは仮想マシン(従量課金)となっています。利用目的が、WebサーバやFTPサーバをはじめ、独自開発したサーバ類の運用試験でもあること、またソフトウェア開発環境として利用することを考えていたため、Web専用のサーバでは足りず、仮想マシンとしてのレンタルしか選択肢がありませんでした。課金が従量ベースであるということも、無用な費用を抑えられるという期待から、望ましいと判断しました。

費用的にも、2014年に利用を開始した当時には全く妥当な選択でした。それまでは、サーバ運用のための回線と固定IPアドレス、サーバ機、UPS、バックアップ用ディスク等の機材、またそれらによる電力使用料金を合算すると、毎月およそ3万円を費やしていました。ですので、それらを全て代替して月1万円というのは劇的なコストダウンであったのです。しかも、それ以前には何度かサーバ機のクラッシュあるいは停電によるサービス途絶があり、復旧のための労力もかかっていましたから、サーバをクラウドに移行することで、単純に費用として見積もりがたいメリットもあったのです。

レンタルサービスとしては、Azureとともに、Amazon AWSを検討しました。試用してみたところ、当時のAzureはシンプルで非常にわかり易く、とても親切でほぼバカチョン、一方AWSは難解に感じました。それで、Azure にUbuntu の仮想マシンをサクッと立ててDeleGateの運用を開始、開発作業も主にこの仮想マシンで行っていました。当初は大変快適に使えていました。

ですが実のところ、Azureが行った何らかのアップデートに巻き込まれて発生したUbuntuの回復不能状態のために2度、仮想マシンをゼロから作り直す必要はありました。その際に10数年分のログ情報も消失してしまいました。リセット後に継続が保証されているのが30ギガバイトという信じがたい制約にも苦しめられて来ました。しかもその後、管理コンソールが次々に改悪され複雑化し重くなっていったAzureからは、いずれ撤収したいと思っていたのも事実です。

なのですが、2014年にAzureに移行後ほどなくして、前職での本業に追われるようになり、世情の変化にキャッチアップできず、コストの見直しを行うことができませんでした。それに、コストを削減できたとしてもおそらく半分程度、私人としての感覚でたとえれば1日の飲み代程度ですから、月に1日断酒すれば済む事、削減作業のためにかかる労力も考えると、総合的に考えて割に合わず、確かに言ってみれば放置していた、という経緯です。

会社としての経費の支出において、この状態が望ましくない事は承知しており、早急に対策を取りたいと思います。まずは基盤部に現状調査と対策案の検討を指示します。

社長
2020-0426

p.s. Azure の仮想マシンは、止めておけば課金は生じないので、解約を急ぐ必要はありませんよ。


現状調査

基盤部より報告(1)

基盤部の佐藤です。インフラのコスト効果の調査ですので、まずは現状、何にいくらかかっているのかざっと調べました。何年も前からのことですので、オンラインでの追跡調査が可能かな…と。実際 Azure のサイト(portal.azure.com)では、過去の注文履歴の検索が困難です(これには以前から私も困ってました)。それで、何やかやしているうちに acount.microsoft.comというサイト(最近できた?)に入っていて、全注文履歴を閲覧できました。(共通のアカウントでログインできているようなのに両者が連携していないという、あいからわず不思議な会社ですわ)

それによると、実際にはAzure(従量料金)のサブスクリプションは 2013年8月に開始されています。開始月に¥10,492、その後ほぼ横這いで推移しています。最大の月でも¥12,108でした。また、昨年(2019)6月に¥10,525だったものが突然、7月に¥8,451に低下し、それ以降横這いで推移していました。何か劇的な料金体系変更が起きたとも考えられますが、その後、先の3月分¥8,440だったものが4月分¥9,540になっていますので、そうとも言いい切れません。それに前後して、仮想マシンで動作させるサーバやアクセス状況に、大きな変化があった形跡はありません。(てか、ディスクフルになって3カ月分のログが飛んでましたよ 笑)

利用料金の分析

課金の内訳(根拠)は上記のアカウントサイトでは見られなかったので Azure のportal.azure.com に戻って調べました。請求書情報は過去12回(12ヶ月)ぶんしか見られませんが、月ごとに以下のような課金の遷移になってました。

MS用語はイマイチわからないのですが、水色が仮想マシン(主にCPU使用量?)、紺色が Storage(つまりディスク?アクセス量?)、小豆色がバンド幅(つまりネットワーク通信量かな)です。たしかに、最初から2本目が6月なので、次の7月にガクッと料金が低下しています。減少したのは紺色、つまりStorage料金です。まさか消費税を乗せ忘れたとしても、計算が合いません。やはり価格改訂かな?

一方、¥8,675 (税込み¥9,540)だった4月請求分(3/11 - 4/10)の使用料金の内訳は以下のようでした。小豆色がそそりたっているのは 3/30 なので、これは社長が身辺整理の一環でファイルのコピー等を行っていた際の使用であると思われます。当日、このサイトの来訪者向けHTTPやFTPサーバのアクセス数は通常通りでしたので、これはやはり、裏口からscpで行った全力ファイル転送のためと考えられます。

このように日別にみると「従量料金」とは言え、毎日ほぼ一定です。これはおそらく、使用量の最低量が決められていて、その基本料金ということと思われます。最終の2日間に突然変化していますが、これは課金のための整理作業かなんかのためではないかと。実際の運用状況は、この期間を通して平坦でしたから。

これから考えるに、この仮想マシンの固定費は¥8,000/月を下回ることができない、ということになります。これはいまどき、この30GBというバックアップ保証ディスク容量から考えても、あり得ない料金と言えます。またもう一つの問題は、従量通信料金の高さです。外部からガンガンにネットワークアクセスされると小豆色部分がのしかかり、従量料金総額として¥16,000/月にも達する恐れがある、ということです。これは当社にとって、許容しがたいリスクのレベルではないでしょうか?

これと同規模のしょぼいサービスであれば(もしあればですが)、¥3,000/月定額ですら割高、と考えます。[1]

基盤部 佐藤
2020-0426

[1] ご参考までに。当社が現在使用しているレンタルウェブサーバは、250GB SSD、転送量目安 3TB/月で、¥1,300/月ポッキリです(当社では12ヶ月まとめ払いで¥980/月ポッキリとなりました)。3TB/月は、概算で100GB/日、10Mbpsです。簡易測定したところ、表玄関のHTTPでは100Mbps、裏玄関のscpでは10Mbpsでした。TCPやSSHサーバでリミッターをかけていると思われます。それでもこれは、現状の当社のウェブサービスや、製品の配信にとって、十分な能力です。つけ加えますと、このサーバのOSは Linux、カーネルは 3.10で、SSHで入って作業ができ、C言語の開発環境やOpenSSLなどのライブラリも揃っています。ベンチマークによっては、Azure上の仮想マシンの3〜4倍の性能をたたき出します。super user にはなれず、システムのファイルにもアクセスできないので逆に安心ですし、当社の製品はまさに、通常ユーザとして使用するサーバですので、問題ありません。通常ユーザとしての自前サーバでは、標準のHTTPやFTPなどのポートで外部からのアクセスを受けることはできませんが、SSHの口が空いているわけですから、ここを通して自前サーバにアクセスするようにするのは技術的にはカンタンです。要するに、少なくとも予備もしくは拡張機能用のサーバ機として使用するのに十分なスペックであり、またLinux用ソフトウェアの開発マシンとしても耐えます。ただし、そのような利用に問題がないかは、当該サーバレンタル会社に問い合わせてはいますが、確認できていません。推測ですが、迷惑になるような理不尽な使い方をしなければ、怒られないんじゃないかなと…

佐藤メモ:
・Amazon AWS の無料枠を活用できないか
・Azure にも今はリーズナブルなプランがあるに違いない
・静的コンテンツ、ファイルサーバは別に置いても良い
 ー バックアップ機能付き、アクセスログ機能付きであること
 ー 通信量は固定・無料であること
・分散したとしても、全体を一体管理し易いことも重要
 ー 記憶域(ディスク)はクラウド上のドライブで統合するとか
・自社内にサーバを置くことも検討
 ー ギガビットインターネットが来ているので通信容量は十分
・手元のVMwareでラクラク運転・保守できるのと同じ感覚が良い
・サーバの階層化を考える
 ー クラウド上には基本的・固定コンテンツ・サービスのみ(安定運転)
 ー 拡張コンテンツとサーバは社内サーバに置く(長ダウンタイム許容)


技術提案準備:
・仮想マシンで行く
 ー クラウドに置くなら必然
 ー 手元に置くにも管理し易く、セキュリティ面でも有利
 ー 手元とクラウドの間でカンタンに移行・並行できる
・VMwareをVMホストとする
 ー 実績十分、ホストマシンはWinでもMacでも良し
 ー VirtualBox とかショボすぎる
 ー Hyper-v はMac版が無い
・Linux仮想マシンをウェブサーバホストとする
 ー Mac仮想マシンもありかも、Winではやりたくない
 ー AMPするにはやはりLinuxかな?
・クラウド仮想マシンをサーバ入り口とする
 ー ミニマム料金に収まるサーバを置く
 ー 微々たる通信量が従量料金を動かすのは問題外
 ー 残りは手元の拡張サーバに転送する
・WordPress/Apache + DeleGateを動かす
 ー どちらを根っこにしても良し
・全てのファイルはクラウドに置きたい
 ー 性能から言えばGoogleDriveだが
 ー Unixのシンボリックリンクが使えないのは問題
  ー 仮想マシンの仮想ディスク置き場と考えれば無問題
・RealVNCを活用できるか?
 ー たとえば汎用サーバとして
 ー そのための費用は生じる


クラウド仮想マシン・コスト評価

基盤部 佐藤メモ

まずは、うちが契約してるAzureが現状の水準の中で大損してないかが気になる。Azureの課金は複雑で人間には計算が無理だから、料金計算サイトに行こう。
https://azure.microsoft.com/ja-jp/pricing/calculator
よくわからないが、とりあえずLinux仮想マシンで従量料金デフォで$85/月と出る。てことは現状の費用がとんでもないということではないようだ。一安心。まあその辺は従量だから、現状に追随しているんだろう。

だが待てよ、ストレージも一応30GB ついてるし、IPアドレスも1ついてる。あと先月は通信量も結構かかった。もう一度内容を確認しよう。

「コスト分析」

なるほど、VMが¥4,992、ストレージが¥2,870、バンド幅が¥789、あとはゴミだな。つまり、この3点セットで料金計算すれば良いということか。料金計算サイトに戻ろう。

ストレージを30GBにすると、$1.66/月と出る。あれこれはうちの場合と全然違うじゃないか。デフォの読み書き回数が100,000回で計算してるからかな。ウェブサーバとしてそんなことはあり得ない。HTTPだけにしても、1日100,000回から200,000回程度のリクエストはあるんだから。10,000,000回ずつにしてみよう。お、$55/月と出た。まあこれなら桁的にはあってる。ログをかなり細かくとってるから、読み書きは拮抗してるんじゃなじゃないだろうか。でもコスト分析表によると¥789は data transfer out とあるから、やっぱサーバの応答分なのかな。Azureの中で閉じてるディスクI/Oは、たぶんこの、disk read/writeあたりなんだろうか。わからん。ま、足して100円未満だかどうでもいいか。では、読み書き5,000,000回ずつにしてみよう。$28と出た。これは先月の料金に近い。とりあえずこれで。

いずれにしても、容量よりもアクセス量で料金が支配されてる感じだ。なら、でかい容量をとっても時々バックアップするくらいなら問題ないか。では1TBでどうさ。おや、$48と来たな。うーむ、これは結構きつい。100GB/月で$2ということらしい。うちのサーバのアクティブなファイルとログを含めておそのくらいでおさまるだろうから、それが適当かな。とりあえず30GBに戻そう。

あとはバンド幅だ。デフォの見積もりが5GBで$0って、アタマがおかしいのか?デフォのVMと比べてバランスが悪すぎる。まあ、サーバとしての運用を想定してるわけじゃないのかな。100GBにしてみよう。ほほー、$826と出た。これは先月の料金にかなり近い。にしても、いま契約してる安かろうサーバは通信3TB込みでまるっと1000円なんだが…まあ、スループットが違うのかな。これじゃあ、遠隔でscpとかした分で料金が変動するわな。でも、scpでせいぜい20Mbps程度しか出てないから、速いっても2倍ってとこだと思うけど。てか、うちのサーバってそれくらいしか通信してないのか。1日3GB、ならすと300Kbpsってとこか。

あと、固定IPアドレスをひとつ持っているから、これはどうなんだろう?おっと、これは5つまで$0なのか。それを超えると、ひとつあたり$2.63とな。こりゃ利用しないと孫じゃないか。まあとりあえず1つで。

ストレージとバンド幅は現状に近くなったけど、VMだけで$85というのは、現状の¥5000と解離がでかい。これはなんだろう?うーむ、コスト分析の表を見ると、うちのはa1というものらしい。a1にしてみよう。おお、$43.80と出た。これでかなり現状に近い。総額で$80.24と出たな。んー、うちのマシンはデフォのUS西部じゃなくて東アジアだから…変えてみると…$83.47。まあ誤差範囲か。

$83.47/月。だいたいこれで、現状のモデルになったんじゃあるまいか。
それにしてもなんだAzureよ、現状の料金がどうやって発生してるのか、同じ料金計算にかけらないのはおかしいじゃないか?

まあいいか。それでは仕分けに入ろう。ざっくり切るぞー!

当該仮想マシン「概要(1日ぶん)」
当該仮想マシン「概要(7日ぶん)

うーむ、見事にスカスカじゃわ。CPUは5%も食ってない。もちろん、ネットやディスクで律速されてるわけじゃない。てことで、まずはVMのリストラだ。

最安VMは、A0というものらしい。これはいくらだ?…おおっと、$14.60とでたぞ。これなら、現状のA1の1/3の費用じゃないか。スペックはどうか?
A0: 0.75GB RAM, 20GB一時ストレージ, $0.02/時間
A1: 1.75GB RAM, 70GB一時ストレージ, $0.06/時間

このA0でも、軽いサーバを動かすLinuxとしちゃ、十分なスペックだろう。750MB RAM … 昔なんてVMのLinuxとかBSDを、128MB RAM程度で動かしてたような気がする。 VMwareだって、デスクトップUbuntuをインストールするのに2GBを推奨してくる。サーバマシンなら750MBでまったく問題ないはずだ。

テンポラリが20GBってのがちょっと気になるけど、そもそも総量30GBでこれまで来たんだから、問題ないだろう。

てことで、VMはA0に決定かな。$14.65

ストレージは30GBでは苦しいのはわかってるから、100GBにはしたい。30GBで$28.22のところ、100GBにすると、$29.90。まずは良し。足りなくなったら後でドライブを足そう。そもそもドライブを複数に分けるのは管理上望ましいことだ。

バンド幅は、実績から100GB/月。$11.40と見積もろう。

しめて$55.95となった。現状の$83.47から30%カットだ。コストカット後、ストレージ分の料金$29.90が過半になったのは気になるが、これは削るのが難しい。

ストレージ料金の中で支配的なのは、書き込み操作ぶんの$25.00だ。書き込みの単価が$0.05に対して読み出しの単価が$0.004で10倍以上違うから、これは…書き込むログの量(詳細度)を落とせば減らせば効果がありそうな気はする。うまく運用すれば半減できるかもしれない。いずれにしても、このサーバをバックアップ用にして書き込むをするのは、やってはいけないことだろう。

さて、それで次は「割引のオプション」だ。従量料金、1年間予約、3年予約、とある。年間予約は、従量料金ではないような名前だが、そんなことはあるまい。ただ、年間予約だと料金をVMでは72%とか、ストレージでは38%だか節約できるというフレーズが目に付く。バンド幅には割引はないようだ。これは、Azureの中で閉じてない料金だからだろうか?

では、3年予約にしてみよう。$1,665.53と出た(笑)。

意味がわからない。見ると、VMもストレージも、勝手にハイスペックに変えられている。それでも、VMはB1S=1GB RAM, 4GBストレージ, $0.0062/時間にアップグレードされた一方、$4.56/月と、57%の値引きになっている。問題は、ストレージが最小100TB($1,622/月)になることらしい。もちろん、あり得ない。

ということで、VMだけ3年予約にすると、$45.91/月となる。ここで気付いたのだが、画面の右下の隅っこに金額の単位として$以外が選べるのだった。日本円にして、¥5,141/月である。

現状の$83.47/月から45%カットであり、半減というノルマには近い。しかし、目標の¥3,000/月には、到底届かない。

他社の安かろうサーバの5倍の価格である。しかし、5倍の価値があるとは思えない。各種サブスクリプションはそれぞれ1000円/月程度だし。これなら、自宅でサーバを運営したほうが、コスト・費用・リスクがバランスするだろう。

ともかくストレージが高すぎる。他の要素とのバランスとしては、わからなくもない設定ではあるが。

他をあたって見よう… orz...

いや、ちょっと待て。わが社が欲しいものの中で優先度が高いのは固定IPアドレスだが、これは¥1,000/月はする。Azureは5つまでタダのようだ。単なるIPリダイレクションかフォワードサーバとして使うのはどうか?問題は「ストレージ無し」のVM、というのが意味をなすのかだ。リブートする度にインストールが必要なVMのサービスなんて有り得るだろうか?現状のストレージ代約¥3000/月というのは、あのなんとなく購入してからほとんど使っていない70GBの/mntにかかっていたりしないだろうか?だとすれば、明示的なストレージ契約無しで可能かも知れない。

なんにしても5月11日というデッドラインは近い。次の課金期に入ってしまう。継続するにしても、最低限、VMはA0にダウングレードするという作業はしなければならないだろう。

疲れたから一杯しよう。


クラウド仮想マシン・試作評価

基盤部 佐藤メモ

さて、そもそものAzureの仮想マシンの課金体系というのを見直そう。Azureが公表している「Liunx Virtual Machineの料金」というページがある。
https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/linux/

これによると課金方式は3種類。従量課金、定期予約(1年または3年(Azure Reserved VM Instances とか、日本語訳だけが仕事のMS Japanは仕事してるのか?))、それとスポットだな。スポットてのは、混んでたら遠慮してもらいます悪しからずサービスらしいからサーバ用としてはあり得ない。定期予約は「最大72%割引」とうたってるけど、どうやら最低で年1万円くらいらしい。無料使用12ヶ月とかいうのもあるようだけど、Microsoftの言うことだから眉唾だろう。タダほど高いものは無い。結局、従量課金だな。

従量課金は、めちゃ貧民向けの600円/月くらいのもあるけど、それを除けば最低限で1GB RAM+1TBディスクだと1000円/月くらいのようだ。途中でさようならしたくなった場合のために、従量課金で行くのが良いのではなかろうか?

てか、従量料金8,000円/月以上払ってる社長、やっぱおかしくね?

生命保険屋のメニューとか、携帯電話の料金体系とか、Azureのこれとか、アタマをおかしくして思考停止させる戦法には辟易する。で結局、面倒臭いからとりあえず作っちゃって考えよう。そもそも料金とサービス品質のトレードオフだからな。動かしてみないとわからないこともある。どうせ1000円くらい、失敗して自分がカブったってなんてことは無いし。

でもってサクサクっと設定。あいかわらず作るのだけはカンタンそうだなAzure。うまくいけばこのまま運用に入りたいので、あんまりケチるのもなんだし、1GB RAM, 1TB SSD にしとこう。¥1.6352/時間だから、¥1,190/月のはず。MSのひっかけがなければ。

仮想マシンの構成

まあこんなもんだろうよしよし。では、作成をポチッと。(待つことしばし)。おー、できたか。どれどれ、sshでログイン。問題なし。あれ、1TBあるはずなんだが…30GBしかないぞ…そういや特別にmountしないといけなかったような記憶がある。どうやらデフォは30GBというのはお変わり無いようだ。こいつが、ストレージ無しでついてくるやつなんだろうか?あとで別のマシンを作って試してみよう。sudo reboot ... 再度 ssh ... おお、ちゃんと生き残ってるな。あたりまえか。

開発環境はどうか。何?makeがないと。sudo apt install make。よしよし。お、ccも無いか。sudo apt install g++。あれ?エラーが出てインストールできねぇ。なんじゃこれは?Not Found?まあ、とりあえずUbuntuの64ビットでバイナリは共通だろうから良しとしよう。

64ビットLinux用のDeleGateのバイナリをscpで送り込んでと。 delegaed -P8080 -fv 、telnet localhost 8080 で繋いでみる。問題なし。では外から繋ぐとどうか… あ、ポートを開けないといかんな。どうするんだっけ?なんか Cloud serviceとかを入れるはず。これか。んんー。使い方側わからん。昔と違う。リソースグループってなんだっけ?ごちゃごちゃいじっているうちに…なんか壊れた。

(ここで苦闘することしばし)。これはもうだめかもね。なんかAzureでエラーがでるし。ゼロから作り直そう。そのほうが早い。(第2版を作って前のは捨てる)。この手軽さが仮想マシンのいいとこだよなー。できたできた。んー、やっぱり、Cloud services の使い方がわからん… そもそも昔作ったCloud serviceってやつは…おや?ポートの設定画面にならないのだが...

おや?新規仮想マシンの設定に「ネットワーク」とかいうのがある。なんかポートの接続を定義するもののようだ。SSHも定義されている… なんだ、ここで定義すればいいのかあ。つまり、新しい仮想マシンは、Cloud service とかいらなくなたのか。でもって 8080 を通してと、外からブラウザで繋ぐと、おお、つながったぞ。パチパチパチ。それでは、現行 delegate.org のサーバデータを送り込んでみよう。うーん、これはしばらく時間がかかるな。CPUもかなりいってる。

この時間パブリックIPでも追加してみよう。ぽちっ。お、できた。あれ?アドレスが割り当てられてない。どういうこと?まあいいか、とりあえず困らない。

面白すぎて疲れた。寝よう。
2020-0428


Ubuntu 18.0.4 仮想マシンで DeleGate を動かした