Functions で仮想マシンの起動停止を行うには

はじめに

本記事は PowerShell を用いて仮想マシンの起動停止を行う Functions を作成します。インフラ技術者が普段使用する PowerShell を使用することで、より直感的に Functions を理解し、Automation との違いを理解することを目的とします。
流れとして、Functions リソースを作成し起動停止スクリプトを記述します。次にマネージド ID を有効にし、Functions アプリに対し仮想マシンの起動停止権限を設定します。

作成方法

では作成していきましょう。

  1. Azure ポータル > リソースの作成 > Functions App(関数アプリ) から作成をクリックします。
  2. アプリ名等を決め、ランタイムスタックに PowerShell Core を選択し作成します。
  3. “関数” > “追加” をクリックします。
  4. “Timer Trigger” をクリックします。
  5. 名称とスケジュールを適宜指定します。
    [0 30 4 * * *] ならば毎日4:30(UTC) =13:30(JST)に実行されます。
    https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-bindings-timer?tabs=csharp#ncrontab-expressions
  6. “コードとテスト” を開き、以下のコードを追記します。

    # 関数定義
    Function Start-VM ($ResourceGroup, $VM) {
    # 起動、停止の場合は Stop-AzVM
    Start-AzVM -ResourceGroupName $ResourceGroup -Name $VM
    }

    # ポータルのアプリケーション設定からリソースグループと仮想マシン名を取得
    $rg1 = $env:RG1
    $vm1 = $env:VM1

    # ログ
    Write-Host ("Get Environment/RG:{0},VM:{1}" -f $rg1, $vm1)

    # 関数呼び出し
    Start-VM $rg1 $vm1

    # ログ
    Write-Host ("Start VM/RG:{0},VM:{1}" -f $rg1, $vm1)


  7. 保存をクリックします。
  8. 構成を開きます。
  9. Functions 内で使用する変数(RG1、VM1)をアプリケーション設定に追加します。”新しいアプリケーション設定” をクリックします。
    ※RG1:リソースグループ名、VM1:仮想マシン名です。
  10. 追加後、保存します。
  11. Functions に仮想マシン操作権限を追加するため、”ID” をクリックします。
  12. “システム割り当て済み” の状態を “オン” にし保存します。
  13. Azure AD に登録するか確認ダイアログが表示されるので “はい” をクリックします。
  14. リソースグループの “アクセス制御(IAM)” > “ロールの割り当て” をクリックします。
    ※仮想マシンが存在するリソースグループに割り当てしていますが、サブスクリプションに対して追加するとサブスクリプション全体で権限が有効になります。
  15. “役割” に “仮想マシン共同作成者” を選択し、”アクセスの割り当て先” に “関数アプリ” を選択します。その後作成した Functions を選択し保存します。
    ※システム割り当て済みがオンの Functions が表示されます。
  16. 作成した Functions を開き、”コードとテスト” > “テストと実行” をクリックします。
  17. “実行” をクリックして起動したことを確認します。
    ※スケジュールでも実行されます。
    ※アクティビティログにはイベント開始者が作成した Functions 名として記録されています。

    以上で完了です。

まとめ・Functions の強み

いかがでしょうか。
マネージド ID を使用することで、非常に少ないスクリプト量で仮想マシンの操作が可能なことがお分かり頂けたかと思います。また、仮想マシンだけではなくその他の様々な PowerShell Core コマンドも使用可能です。

Functions と Automation は似ており、実行可能な処理が重複していますが Functions のメリットデメリットをまとめてみます。
メリットとしては

デメリットとしては

  • PowerShell は PowerShell Core のみ対応
  • スケジュールの作成が cron で分かりにくい
  • Automation は課金アカウント毎に500分まで無料
    →Functions も無料分がありますが、分かりにくいです

といった点があります。
取っつきにくいと思われがちな Functions ですが、この記事を見て使ってみたいという原動力になりましたら幸いです。

参考URL

・仮想マシン管理 PowerShell コマンド
https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/ps-common-ref
・Azure serverless community library
https://www.serverlesslibrary.net/?technology=Functions%202.x&language=PowerShell

いいね (この記事が参考になった人の数:5)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください