Azureやらかし懺悔
はじめに
Microsoft Azureを使いだして、早くも9年が経とうとしています。
使い始め当時は、仕様の理解不足が起因する「やらかし」もありましたが、私は普通の人間ですので凡ミスも何度も経験してきました。
これまでにAzureでやらかしてしまった事をこちらで懺悔するとともに、是正策についても考えてみました。
Click Opsの罠
Azureに限らず、クラウドのインフラ構築はブラウザを使ったマウスでぽちぽちと簡単に操作可能ですが、過去から現在に至るまで色々と罠に引っ掛かっています。
ケース1:手順書書き直しやん
Azureポータルのレイアウトや表記(特にローカライズしたもの)は不定期にちょくちょく変更されます。
これは、各サービスの機能追加に伴って拡張されたり、ローカライズが後から追加・変更されることで起こる場合もあります。
画面キャプチャを張りつつ作成した、いわゆる「構築手順書」が作成途中に既に古いものになってしまうケースもあって、界隈の皆様においては毎回絶望されていたと存じます。
ケース2:えっ。環境全部作り直しですか?
何時間・何日も手塩にかけて作成した仮想ネットワークと、その配下に配置した無数の仮想マシンたち。
「え?仮想ネットワークのアドレスレンジ変更ですか?」
「え?仮想マシンのOS、全部Ubuntu 18.04じゃなくて22.04なんですか?」
一旦仮想マシンを全て消して再度デプロイかぁ。仮想マシン50台あるんだけど。
ケース3:えっ。この環境一式をあと2つ作れと?
クラウドの良いところの一つとして、必要な時だけ必要なマシンリソースを使えるところです。
本番環境を想定して作成したインフラ環境一式を、構成は大きく変えずにSKUだけ絞って「開発環境」「ステージング環境」を別途用意するケースは良くあるでしょう。
同じインフラ構成をほぼ同じ手順とはいえ、複数Click Opsで作成するのは苦行です。
解決策
上記全てのケースに当てはまりますが、可能な限りブラウザからのマウス操作で構築するのは止めました。
理想はARM Template(json)、Bicep、Terraformなどを使ってinfrastructure as codeを実践して、成果物も別途作成しないで、それらのコードを利用できればベストです。
Azure 上の Terraform の概要 - Terraform とは
とはいってもinfrastructure as codeを実践するためには学習コストもかかるので、まずはAzure portalでぽちぽち作成した後に、「テンプレートのエクスポート」を行った後にそのコードを修正していく所から始めるのが良さそうです。
他に、Azure CLIやAzure PowerShellを使ってスクリプト化するという方法もありますが、リソースの依存関係やエラー処理など含めて記述する必要があるため、私個人としてはベストではないかなと思います。
これにより、ケース2,3は解決できそう。あとはケース1の生産物としてテンプレートファイルがお客さんに納品時、許容してもらえるかが焦点かなと思います。
課金の罠
Azureの課金は主に、利用時間(期間)と、利用量による二種類に大別されます。
Azureサブスクリプションの契約方法にもよりますが、基本的にはAzure内で作成したリソース(サービス)はMicrosoftから一括請求されます。(仮想マシン上で別途追加したサードパーティのライセンス費用などは別)
ケース1:NASのリストアで泣いた
自宅で利用しているSynology NASに搭載されているHyper BackupはAzure BLOB Storageに対しても日時バックアップが取れます。
初回バックアップ以降は差分バックアップなので、毎月Azureにかかるコストのメインは保存している容量に対する課金です。
1TBをAzure BLOB Storageに保存しておく場合、東日本でLRSであればストレージ代としては3,000円/月程度となります。
無論毎日のバックアップ差分書き込みのコストもかかりますが、これはNASの使い方によるもので私の場合は毎日頻繁にファイルが追加更新されることもないため微小な金額です。
問題はリストアでした。
当時はシングルHDDのNAS(DS118)を使っており、バックアップはこのAzure BLOB Storageのみだったのですが、NASのHDD障害で全ファイルがロストしたことがあります。
「こういう時のクラウドバックアップさ。俺様に全く隙はないぜ」
というわけで、さくっとHDDを入れ替えてAzure BLOB Storageからのデータリストア。
その翌月の請求に泣きました。15,000円くらい請求されました。
理由として、インターネット経由での通信は、Azureに入ってくるものは無料ですが、Azureから外に出ていくものは100GB/月の無料枠はあっても、それ以降はまあまあ課金されます。
私の場合は¥17.0683/GBが900GB程度課金されました。
ケース2:え。それ別課金なの?
Azure Marketplaceには、多彩な仮想マシンイメージが公開されていますね。
MicrosoftからはOSライセンスが含まれた「Windows Server Datacenter Edition」や、Canonicalからはフリー版の「Ubuntu Server」などが提供されています。
Microsoft提供のWindows Serverには持ち込みライセンスの他に、従量課金でライセンス料金込みで仮想マシン利用料と合わせて請求されます。
これはいいのですが・・・
他に仮想マシンOSイメージに独自にアプリなどをインストール済みのものが、各社からMarketplaceで公開されています。
例えば「Load Tester (standalone) Powered by Apache JMeter™」はUbuntu上にJMeterとリモートデスクトップサービスが既に導入済のイメージとなっています。
Load Tester (standalone) Powered by Apache JMeter™
この場合には、課金としては仮想マシン代(インフラストラクチャコスト)の他に、追加で「ソフトウェアのコスト」が発生します。
私は普段の検証作業では、Visual Studio Subscriptionの特典を利用しており、毎月一定額($150)は無料で使えるのですが、このソフトウェアのコストとなる部分は無料枠には入りません。
つまりAzure仮想マシン代として$150/月以内に収めても、ソフトウェアのコストは別に追加されて請求されます。
基本的な考え方としては、Microsoft自社内の製品(ライセンスなど)に関するものは無料枠内で精算できるけど、社外製品(サードパーティーに支払う分)は別課金となります。
他の例として、App Service証明書はAzure Portalから購入手続きが行えますが、実際に証明書を払い出しているのはGoDaddy社となるため、請求はMicrosoftから一括で行われますが、無料枠とは別に課金されます。
Web アプリの App Service 証明書を作成して管理する
こういったケースは利用するサービスによってまちまちで、ドキュメントを読んでも判りづらい事もあるので要注意です。
Azureサブスクリプションの契約がそもそも従量課金の場合には、あまり気にする必要はないでしょうね。
解決策
もう、なんていうか、経験を詰めば解決すると言えばそれまでですが、課金に不明点があれば積極的にMSサポートを利用するのが良いと思います。
Azure Portalからサポートリクエストは簡易に出すことができますし、経験ですが課金に関する問合せは比較的レスポンスも早い印象です。
おわりに
今回は効率化と課金について記しましたが、本当は他にパブリックで公開できない「やらかし」も(人間ですので)色々経験しています。
まずは、良くありがちなこの2つのトピックについて記しました。
どなたかの参考になれば幸いです。
Discussion