Azure Automationとは?Runbook・スケジュール実行・マネージドIDを入門から解説【シリーズ入門編】

Azure

Azureの運用を任されるようになると、だんだん「毎日・毎週おなじ作業を手でやっている」ことに気づきます。夜間に使わない仮想マシンを止める、月初にレポート用のスクリプトを回す、リソースにタグを付け直す——どれも大事だけど、人間が手作業でやるとやり忘れ・時間外対応・作業ミスがついて回ります。

これを「Azureの中にいる自動化の仕組み」に肩代わりさせるのが Azure Automation です。ただ、いざMicrosoft Learnを開くと、Runbook・トリガー・マネージドID・ハイブリッドワーカー・DSC……と用語が一気に押し寄せてきて、「結局これは何をしてくれるサービスなの?」で手が止まりがちです。私自身、最初は「Functionsと何が違うの?」あたりでずっと迷子になっていました。

「Automationって、要はスクリプトを自動で回すだけ?でも認証とかパスワード管理はどうするの?そこが不安で手が出せないんだよね……」

この記事はAzure Automationシリーズの入門編(ハブ記事)です。Automationを「深夜でも文句を言わずに働いてくれるロボット執事」にたとえながら、まずは土台となるRunbookの書き方・定期実行とWebhook・マネージドIDでシークレット無しにAzureを操作する方法・資産(変数/資格情報)の安全な参照まで、迷わない順番で解説します。読み終わるころには、「毎日手でやっているあの定期作業、Automationに任せられそうだ」と自分で判断できるようになります。

なお、ハイブリッドRunbookワーカー・構成管理(DSC/Machine Config)・更新管理(Update Manager)・Logic Apps/Functionsとの使い分けといった一歩進んだ話は、この記事の続きにあたる応用編で扱います。まずはこの入門編で「自分でRunbookを1本、安全に動かせる」状態を作りましょう。

Azure Automationとは——雇わなくていい「夜勤のオペレーター」

Azure Automationは、ひとことで言うとAzureの運用作業を自動化してくれるマネージドサービスです。公式の説明では「プロセスの自動化」「構成管理」「更新管理」を提供する、とされています。難しく聞こえますが、やってくれることは意外と地に足がついています。

イメージとしては、Azureのテナントに24時間働いてくれる夜勤のオペレーターを一人雇う感じです。「毎晩22時になったら開発用のVMを全部止めておいて」「毎週月曜の朝、レポート用のスクリプトを回して」——そんな指示書(=スクリプト)をあらかじめ渡しておくと、Automationがその通りに、人間が寝ている間も淡々とこなしてくれる。しかもこのオペレーターは、実行基盤のサーバーを自分で用意する必要がありません。実行環境(Azureが用意するサンドボックス)はマネージドで、こちらは中身の指示書に集中できます。

Automationの機能は、大きく次の3つの柱に分かれています。この分類を頭に入れておくと、シリーズ全体で「今どの柱の話をしているか」で迷いません。

  • プロセスの自動化……スクリプト(Runbook)を定期実行・外部起動する。VMの起動停止、レポート生成、リソースのタグ付けなど。この入門編の中心はここ
  • 構成管理……サーバーの「あるべき状態」を定義し、ズレ(構成ドリフト)を検知・修正する。DSC / Machine Config。応用編で解説
  • 更新管理……OSのパッチ適用状況を評価し、スケジュールを組んで一括で当てる。現在はAzure Update Managerに移行。応用編で解説

この3本柱を包んでいる入れ物が Automationアカウント です。まずAutomationアカウントというリソースを1つ作り、その中にRunbookやスケジュール、変数などをぶら下げていく、という構造になります。最初の一歩は「Automationアカウントを作る」だと覚えておけば大丈夫です。この入門編では、その中でも一番おいしい「プロセスの自動化」を、手を動かせる粒度で追いかけます。

Runbook——執事に渡す「作業手順書」

Automationの主役が Runbook(ランブック) です。名前のとおり「手順書(run book)」で、自動化したい処理を書いたスクリプトそのものだと思ってください。ロボット執事に「これをこの順番でやってね」と渡す作業指示書、という位置づけです。

Runbookにはいくつか種類がありますが、実務で使うのはほぼ次の2つです。

  • PowerShell Runbook……Azureの操作と相性が良い定番。Az モジュールでVM・ストレージなどをそのまま操作できる。Windows寄りの運用や、とりあえず自動化を始めるならこれ。
  • Python Runbook……PythonでAzureのSDKや外部ライブラリを使いたいとき。データ処理・機械学習まわりや、既存のPython資産を活かしたいチーム向け。

ほかにPowerShell WorkflowやグラフィカルRunbookもありますが、初心者はまずPowerShell Runbook一択で始めて問題ありません。迷うぐらいなら普通のPowerShellで書く、が正解です。

下は「リソースグループ内のVMを全部止める」だけのごく単純なRunbookのイメージです。中身より「これぐらいの短いスクリプトが1本のRunbookになる」という粒度感をつかんでください。

# マネージドIDでAzureにサインインしてからVMを停止する
Connect-AzAccount -Identity

$rg = "rg-dev"
Get-AzVM -ResourceGroupName $rg | ForEach-Object {
    Write-Output "Stopping $($_.Name)..."
    Stop-AzVM -ResourceGroupName $rg -Name $_.Name -Force
}
Write-Output "Done."

ポイントは冒頭の Connect-AzAccount -Identity です。ここが「シークレットを一切持たずにAzureへログインする」魔法の一行で、あとのマネージドIDの章で詳しく触れます。まずは「Runbook=Azure用の短いスクリプトを1本ずつ管理するもの」というイメージを持てればOKです。

「発行」しないと動かないという落とし穴

最初につまずくのがこれです。Runbookはエディタで書いた後、「発行(Publish)」という操作をして初めて本番として実行できるようになります。書いただけの状態は「下書き」で、テスト実行(テストペイン)はできても、スケジュールやWebhookからは呼ばれません。「スケジュールを組んだのに動かない」の犯人はたいてい発行忘れなので、書いたら発行、を癖にしておきましょう。

トリガー——「定期実行」と「外から起動」の2系統

Runbookという手順書ができたら、次はいつ・何をきっかけに実行するかを決めます。これがトリガーです。大きく2系統あり、この違いが分かると設計がぐっとラクになります。

スケジュール——時計で自動起動

スケジュールは「毎日22時」「毎週月曜9時」のように、時刻ベースで自動的にRunbookを回す仕組みです。夜間バッチや定期メンテナンスはほぼこれで組みます。Automationアカウント内でスケジュールを作り、それをRunbookに「リンク」するだけ。cronのような書式を覚えなくても、画面で「毎週・月曜・9:00」と選べるのが親切なところです。

1つ注意したいのがタイムゾーンです。作成時にタイムゾーンを選べるので、必ず「(UTC+09:00) 大阪、札幌、東京」を選んでおきましょう。ここをUTCのままにして「なぜか9時間ずれて動く」というのは、多くの人が一度は踏む定番の罠です。

Webhook——外部システムから叩いて起動

もう一方のWebhookは、Runbook専用のURLを1本発行しておき、そのURLにHTTP POSTが来たら実行する仕組みです。監視ツールがアラートを検知したとき、社内システムのボタンが押されたとき、他のサービスから連携したいとき——つまり「時刻」ではなく「外部のできごと」で起動したいケースで使います。

WebhookのURLは発行時に一度しか表示されず、あとから確認できません。しかもURLを知っている人は誰でもRunbookを起動できてしまうので、パスワード同然に扱います。表示された瞬間にKey Vaultなど安全な場所へ控える、というのが鉄則です。

「時計で回すならスケジュール、外のできごとで起こすならWebhook」。この二択で覚えておけば、トリガー選びで迷いません。

マネージドID実行——シークレットを持たずにAzureを操作する

ここがAutomationを実務で使ううえで、いちばん美味しいポイントです。Runbookから「VMを止める」「ストレージを触る」といったAzure操作をするには、当然ながら「あなたは誰?操作していい人?」という認証が要ります。昔はここでサービスプリンシパルの証明書やパスワードをRunbookに埋め込んでいましたが、それだと秘密情報の管理と定期更新(ローテーション)という重い宿題を背負うことになります。

これを一掃してくれるのがマネージドIDです。Automationアカウントにシステム割り当てマネージドIDを有効にすると、そのアカウント自身がAzure上で「身分を持った存在」になります。Runbookの中では、先ほど出てきた一行を書くだけです。

# パスワードも証明書も書かない。IDだけでサインインできる
Connect-AzAccount -Identity

スクリプトのどこにもパスワードが出てきません。認証情報はAzureが裏側で面倒を見てくれるので、キーレスで、しかもローテーション不要。これがマネージドID最大の利点です。私はセキュリティ設計で「まずキーを消せないか」を最初に考えるタイプなので、この方式は本当に相性が良く、新規のRunbookは原則これで組んでいます。

ただし、有効化しただけでは何もできません。そのマネージドIDに対して、操作したい範囲のRBACロールを付ける必要があります。たとえば「rg-devの中のVMを止めたい」なら、そのマネージドIDに対してrg-devスコープで「仮想マシン共同作成者」などのロールを割り当てます。ここで必要最小限の権限だけを、必要なスコープにだけ付けるのが定石です。サブスクリプション全体に「共同作成者」をベタ付けするのは、事故のもとなので避けましょう。

「Connect-AzAccountで認証エラーになる」ときは、たいていマネージドIDの有効化を忘れているか、ロールを付け忘れているかのどちらかです。この2点をセットで確認する、と覚えておくと詰まりにくいです。マネージドIDそのものをもう少し体系的に知りたい方は、条件付きアクセス・マネージドID・PIMを噛み砕いて解説の記事も参考になります。

資産(Assets)——変数・資格情報・証明書を安全に取り出す

Runbookを本格運用しはじめると、「接続先のURL」「通知先のメールアドレス」「外部APIのキー」といった設定値をスクリプトに直書きしたくない場面が必ず出てきます。それを引き受けるのが Automationの資産(Assets)です。Automationアカウント側に値を保管しておき、Runbookからは名前で呼び出す、という分離ができます。

  • 変数(Variables)……環境名やしきい値など、コードから切り出したい設定値。「暗号化」を有効にすると値が保護され、取り出し以外では中身が見えなくなる。
  • 資格情報(Credentials)……ユーザー名+パスワードのセット。オンプレ機器への接続など、どうしてもID/パスワードが要る相手向け。
  • 証明書(Certificates)……クライアント証明書などをアップロードして保管。
  • 接続(Connections)……接続に必要な情報をひとまとめにした構成。

Runbookからの取り出しは、たとえば変数ならこう書きます。

# 「NotifyEmail」という名前で保存した変数を読み込む
$mail = Get-AutomationVariable -Name "NotifyEmail"

# 資格情報を取り出してオンプレ機器などへ接続
$cred = Get-AutomationPSCredential -Name "OnPremAdmin"

ここで指針を1つ。AzureのシークレットならKey Vault、Automation内で完結する運用値なら資産と切り分けると整理しやすいです。とはいえ本命は前章のマネージドIDで、「そもそもパスワードを持たない」設計にできるならそれが一番安全です。資格情報はマネージドIDが使えない相手(オンプレ機器など)への最後の手段、ぐらいの温度感で使うのがおすすめです。

まとめ——まずは「定期作業を1つ」執事に任せる

Azure Automationの入門編を、ロボット執事のたとえで一気に見てきました。要点を振り返ります。

  • Automation=運用作業を自動化するサービス。柱は「プロセス自動化」「構成管理」「更新管理」の3つ。入門編はプロセス自動化が中心。
  • Runbook=自動化したい処理を書いたスクリプト(まずはPowerShell)。書いたら発行を忘れずに。
  • トリガー=時刻で回すスケジュールと、外部から起こすWebhookの2系統。
  • マネージドID=シークレットを持たずにキーレスでAzureを操作できる本命の認証。有効化+RBACロール付与がセット。
  • 資産=変数・資格情報・証明書を安全に保管し、Runbookから名前で参照。

最初から全部を使いこなそうとしなくて大丈夫です。まずは「毎日手でやっている定期作業を1つ」Runbookにして、マネージドIDで動かし、スケジュールで回す——ここまでできれば、Automationの一番おいしい部分はもう体験できています。認証をキーレスにできているので、セキュリティ的にも胸を張れる自動化です。

さらに深く学ぶ:Azure Automation 応用編

入門編で「Runbookを1本、安全に回す」土台ができたら、次はAutomationの世界をぐっと広げていきましょう。クラウドの外(オンプレや別クラウド)で実行する仕組みや、残りの2本柱である構成管理・更新管理、そしてLogic Apps/Functionsとの使い分けは、続きの応用編でまとめて扱います。

まずはこの入門編を手を動かして試す→慣れたら応用編、の順で読むのがおすすめです。土台がある状態だと、応用編の内容がすっと入ってきます。

あわせて読みたい

学んだクラウドスキルを、キャリアに活かす

Azureを学ぶ目的が「年収を上げたい」「フルリモートで働きたい」なら、スキルの棚卸しと並行して市場も見ておくと選択肢が広がります。私も未経験からクラウドに軸足を移して働き方を変えられました。

未経験・学生・ハイクラスなど、状況別におすすめのエージェントを比較した記事を用意しています。あわせてどうぞ。

タイトルとURLをコピーしました