🔥

検証用Azure Firewallを確実に停止するためのPowerShellスクリプト with GitHub Copilot

2023/04/04に公開1

モチベ

  • 検証用Azure Firewallの割り当て解除が面倒で放置しておくと結構お金がかかる
    • 毎回スクリプトのリソースグループ名を変えたりするのが面倒でつい後回しにしてしまう
  • スケジュールで検証サブスクリプションのAzure Firewallを全部割り当て解除してくれれば落なのではないか?
    • Azure Automation Runbook + Azure PowerShellでやってみよう
  • ついでにVSCodeにGitHub Copilotが入っているので試したい

スクリプト

https://github.com/zukakosan/azure-automation/blob/main/deallocate-all-azfirewall.ps1

  • Get-AzResourceGroupでリソースグループ一覧を取得
  • それをforeachで回してAzure Firewallの有無によって挙動を変更
    • Get-AzFirewall -ResourceGroupName $r.ResourceGroupNameで特定RG内のAzure Firewallを複数取得できるため、さらにそれらに対してforeachを回す
  • Azure Firewallの割り当て状況はipConfigurationsから判別でき、構成されていれば割り当て解除する
  • GitHub Copilotが大筋を立ててくれているのと、何か関数を実行するときにPlaceholderにするのではなく、自分で定義した変数をきちんと再利用してくれるので気持ちいい

Azure Automation Runbook

  • Azure AutomationはいろいろとAzure環境の自動化ツールがまとまったサービス
  • 中でも、RunbookはPowerShellのスクリプトやPythonのスクリプトを自動実行してくれる
    • Azure Functionsのイメージにも近い
  • 各種アラートから呼び出すことができるので、自動復旧とか通知の作りこみのシナリオで用いられたり、定期タスクの自動化などに利用される

Runbook 作成


  • スクリプトの貼り付け
  • 保存して公開

実行スケジュールの追加

  • とりあえず日次で朝2時に割り当て済みAzure Firewallがあったら割り当て解除するイメージでスケジュールを作成
  • Azure Firewallの再割り当てはオンデマンドにやるので、一旦リセットされればいい

Runbookと実行スケジュールの紐づけ


おわり

これで安心だ

GitHubで編集を提案
Microsoft (有志)

Discussion