はじめに
Developer.ioのInfracostの記事を見て、「Azureはどれぐらい対応しているんだろう?」と気になったので触ってみました。
Infracostについて
Infracostは、エンジニアリングチームがクラウドのコストを意識し最適化していくFinOpsを実現するためのOSSツールです。
具体的には、IaCプロバイダーであるTerraformのコードを元に以下の3大クラウドのコストを試算してくれます。
(今後はPulumiとCloud Formationもサポート予定とのこと)
- AWS
- Azure
- Google Cloud
FAQにあるように、内部的にはInfracostが独自にCloud Pricing APIを持っており、
Terraformからリソースタイプを読み取ってそのAPIを叩きに行っているようです。
OSSツールということもあり、コストの推移などを統合的に管理できるInfracost Cloudを使用する以外は無料で利用することができます。
コスト試算の実行方法は主に以下の3通りのようです。
infracost
CLIツールをインストールして実行- GitHub等と統合してCI/CDにコスト情報を追加
- VSCode拡張でエディタ上にコストを表示
1,で事あるごとにコマンドを叩くのは少々手間を感じるかもしれません。
2.はリポジトリにプッシュやプルリクをする必要がありますし、Terraform CloudにもCost Estimationの機能がありますのでそちらでも対応可能です。
最後の3.はなかなか新しい開発者体験!という感じでしたのでご紹介したいと思います。
準備
前提として、VSCodeのインストールが必要になります。
まずはVSCode拡張からinfracostをインストールします。
インストールが完了するとVSCodeのサイドメニューに以下のようなアイコンが現れます。
InfracostアイコンをクリックするとConnect VSCode to infracost
というボタンが出てくるのでクリック
初回はGitHub/Googleないし何かしらのメールアドレスでアカウントを作れば認証できます。
ログイン後にGitHub等のコード管理システムとの連携画面に移りますが、
VSCode拡張で利用する上では不要なので特に設定しなくて問題ありません。
準備としては以上になります。
使ってみる
準備が整ったので早速使ってみましょう。
まずは適当に、今回はAzure Functionsを作るていでTerraformコードを書きます。
main.tfを書いて保存すると…
早速 azurerm_service_plan
の上に
total monthly cost: $12.41
というメッセージが出てきました!
さらにこのメッセージ文をクリックすると、
こんな感じで内訳が出てきます。
他のリソースはランニングコストが掛からないタイプなので$0となっていますが、こちらもクリックすると、
従量課金で掛かるコストを表示してくれます。親切ですね。
ここで本番運用に向けてSKUを変更してみましょう。
P1v3プランに変更して保存すると、数秒で表示される価格が変更されます。
また、リージョンによっても価格が違うので、リージョンを変更しても表示価格は変わってくれます。
さらに、ループやモジュールにも対応していて、コード上には合算が表示され、クリックして詳細画面を開くと内訳が表示されます。
Infracostのアイコンをクリックすると全体のコストが表示されます。
ディレクトリを分割している場合はディレクトリ毎にコストを表示してくれます。
なお、Infracostを利用すると.infracost
という隠しディレクトリが作成されるので、
ワークスペースによってInfracostの有効/無効を切り替えると良いと思います。
ざっくりとした使用感は以上になります。
Azureリソースの対応状況
気になってくるのはリソース種別毎の対応状況ですね。
クラウド毎に対応状況がまとめられていて、Azureは以下のページに記載されています。
比較的新しいMachine LearningやContainer Appsは未対応だったりと完全に網羅されているわけではありませんが、
十分使える範囲ではないかと思います。
対応してもらいたい場合はページにもあるようにIssueを送ったりコントリビュートしてみましょう。(Goで書かれているようです)
まとめ・所感
Azureポータルでリソースを作成する場合はSKUの選択画面で価格が表示されたりリンクされていたりと比較的コストを意識しやすいAzureですが、
TerraformなどのIaCで開発していると、開発に集中できる反面コスト意識が薄れる部分はあるなあ、とたまに感じるところはありました。
一方で価格表や見積もりツールで確認するのは億劫コンテキストスイッチになって非効率でもあるので、
Infracostのようにコードの中にスッと差し込んでくれるのはありがたいと感じました。
FinOpsというワードも聞いたことはあるものの理解や実践には程遠い状態ですが、
こういったところから初めて見るのも良いかもしれません。