Azure Automation : Runbook Webhook を使って仮想マシンの自動垂直スケール(スケールアップ / ダウン)

こんにちは、Azure サポートチームの山口です。 今回は Azure 仮想マシンのインスタンス サイズを垂直スケール(スケールアップ / スケールダウン)するための Runbook をご紹介したいと思います。 はじめに 突然ですが、お使いの Azure 仮想マシンは、トラフィックが少なくなる夜間や休日などの間、無駄に強力なパワーで稼働していませんか? 同じインスタンス サイズで静的に固定された仮想マシンは、ワークロードが少ない時間帯が来るとコンピューティング リソースが余ってしまいます。それだけでなく、ワークロードが増加する時間帯にはリソースが枯渇し、サーバーダウンにつながる恐れもあります。 この手の問題に対処する一番シンプルな方法は、想定される最大の負荷に耐えられるインスタンス サイズにあらかじめ設定しておくことですが、これは費用の観点から見るとベストな方法といえないこともあります。なぜなら、耐えられる負荷の量が大きくなると、掛かるコストも高くなるからです。 「負荷がかかる時間になれば自動的にスケールアップし、負荷が少ない時にはスケールダウンする」といったインスタンス サイズの動的スケーリングは、コスト最適化を実現する上では必ず考慮すべき対策のひとつです。 与えられたワークロードに必要な分のコンピューティング リソースだけを割り当て続けることが出来れば、必要最低限の出費だけで済みますよね。:) この記事では、そんな動的スケーリングを実現するための Runbook を紹介したいと思います! スケールアップ / ダウン後のインスタンス サイズの取得 まずは、インスタンス サイズを与えると、スケールアップ(スケールダウン)した後のインスタンス サイズを返す PowerShell の関数から紹介します。 後のセクションでこの関数を使った Runbook を説明しますので、「とにかく速く動的な垂直スケールを実現したい!」という方はこのセクションを飛ばして頂いても構いません。 関数中のデフォルトのスケール セット $Default_VerticalScaleTable は、本記事執筆時における東日本 / 西日本リージョンで利用可能なすべてのインスタンス サイズに対応しています。しかしながら、インスタンス サイズ名や利用可能なインスタンス サイズは、今後変更される可能性もございますのでご注意ください。 PowerShell スクリプト Function Get-UpOrDownScaledVmSize { Param ( [Parameter(Mandatory…