Azure Automation旧runtime廃止対策|2026年9月30日までのRunbook棚卸し・更新手順

Azure AutomationでPython 2.7/3.8、PowerShell 7.1/7.2のRunbookを運用している場合、2026年9月30日までに、PowerShellは7.4、Pythonは3.10へ移行するのが基本方針です。MicrosoftのAzure Update 567556では、これらの旧runtimeが2026年9月30日にretirementとなり、2026年10月1日からunsupportedになる予定が示されています。(Microsoft Azure)

ただし、Runbookのruntime設定だけを変更しても、安全な移行にはなりません。Runtime Environmentに登録するPowerShellモジュールやPythonパッケージ、マネージドIDなどの認証方法、スケジュール・Webhook・親子Runbookの呼び出し関係まで確認する必要があります。

2026年10月1日以降も、旧runtimeのRunbookが直ちにすべて停止するとは限りません。しかし、Microsoftのサポートポリシー上はreduced-supportとなり、新機能、セキュリティ更新、パフォーマンス最適化の対象外です。状況によってはスケーリングも制限されるため、「動く間は使う」という判断は避け、期限前に本番切り替えまで完了させる必要があります。(Microsoft Learn)

目次

旧runtimeの期限と移行先

対象となるruntimeと、基本的な移行先は次のとおりです。

現在のruntime基本的な移行先主な確認ポイント移行難易度の目安
PowerShell 7.1PowerShell 7.4Azモジュール、外部モジュール、出力オブジェクト、認証
PowerShell 7.2PowerShell 7.4モジュール依存関係、PowerShell 7.4固有の制約
Python 2.7Python 3.10構文、文字列とbytes、ライブラリ、SDKの全面的な見直し
Python 3.8Python 3.10パッケージ版、wheel互換性、非推奨API

Azure AutomationのRuntime Environmentで現在選択できるサポート対象は、PowerShellが5.1または7.4、Pythonが3.10です。既存のPowerShell 7.1/7.2は原則として7.4へ、Python 2.7/3.8は3.10へ更新します。(Microsoft Learn)

PowerShell 5.1もサポート対象ですが、PowerShell 7.xのRunbookを安易に5.1へ戻すことは推奨できません。クロスプラットフォーム対応や.NET依存、モジュールの対応状況が変わり、かえって修正範囲が広がる可能性があるためです。Windows PowerShell専用モジュールが必要など、明確な理由がある場合だけ例外として検討します。

なお、PowerShell Workflow、Graphical PowerShell、Graphical PowerShell Workflowは、通常のPowerShell 7.4 Runbookと同じ方法では移行できません。これらはSystem-generated PowerShell 5.1 Runtime Environmentで動作するため、今回の棚卸しで見つかった場合は別案件として扱います。(Microsoft Learn)

2026年10月1日以降も動く可能性はあるが、運用継続は避ける

MicrosoftのAzure Automationランタイムサポートポリシーでは、retired runtimeを使用するRunbookについて、引き続き作成、デプロイ、実行できる場合があると説明されています。ただし、その状態は正式サポートではなく、次の制約を伴います。(Microsoft Learn)

  • セキュリティ更新を受けられない
  • 新機能が追加されない
  • パフォーマンス最適化の対象にならない
  • 問題や性能低下が発生する可能性がある
  • 割り当て可能なインスタンス数が制限される場合がある

したがって、2026年9月30日は「移行作業を開始する日」ではなく、すべての本番Runbookが新runtimeで安定稼働しているべき最終期限です。社内期限は少なくとも2週間前に設定し、残りを監視とロールバック確認に充てるのが安全です。

最初にRunbookを棚卸しする

移行で最も危険なのは、Azure portalに表示されたRunbookだけを見て、順番にruntimeを変更する進め方です。

実際の影響範囲を把握するには、Runbook本体だけでなく、起動元、実行先、認証、モジュール、処理内容を一つの台帳にまとめます。

棚卸し項目記録する内容
Azure上の識別情報サブスクリプション、リソースグループ、Automationアカウント、Runbook名
現行実行環境Runbook type、Runtime Environment名、runtime version
モジュール・パッケージ名前、現在の版、移行先で使う版、依存パッケージ
起動方法手動、スケジュール、Webhook、Azure Monitor、Logic Apps、親Runbook
実行先Azure sandbox、Hybrid Runbook Worker、Worker group
認証方法システム割り当てマネージドID、ユーザー割り当てマネージドID、資格情報、証明書
操作対象サブスクリプション、VM、Storage、Key Vault、Microsoft Graphなど
処理の危険度読み取りのみ、作成・更新、停止、削除
運用情報実行頻度、最終成功日時、担当者、障害時の代替手段
移行管理移行先runtime、テスト結果、本番切り替え日、ロールバック方法

lastModifiedTimeはRunbookの最終更新日時であり、最終実行日時ではありません。「長期間更新されていないから未使用」と判断せず、ジョブ履歴、スケジュール、Webhook、親Runbookからの呼び出しも確認してください。

REST APIでRunbook一覧を取得する

Automationアカウント内のRunbook一覧は、Azure Automation REST APIの2024-10-23版から取得できます。応答にはRunbook type、Runtime Environment、公開状態、最終更新日時などが含まれます。(Microsoft Learn)

Azure Cloud Shellなどで、次のように実行します。

SUBSCRIPTION_ID="<subscription-id>"
RESOURCE_GROUP="<resource-group-name>"
AUTOMATION_ACCOUNT="<automation-account-name>"

az rest \
  --method get \
  --url "https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Automation/automationAccounts/${AUTOMATION_ACCOUNT}/runbooks?api-version=2024-10-23" \
  --query "value[].{Runbook:name,Type:properties.runbookType,Runtime:properties.runtimeEnvironment,State:properties.state,LastModified:properties.lastModifiedTime}" \
  --output table

結果を保存する場合は、最後を次のように変更します。

--output json > runbooks.json

応答にnextLinkが含まれる場合は、次ページも取得しなければ一覧が欠落します。また、このAPIだけではスケジュール、Webhook、ジョブ履歴、親子関係までは分かりません。Azure portalとソースコード検索を併用してください。

Runtime Environmentのパッケージを一覧化する

特定のRuntime Environmentに登録されたモジュールやパッケージは、次のAPIで確認できます。

RUNTIME_ENVIRONMENT="<runtime-environment-name>"

az rest \
  --method get \
  --url "https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Automation/automationAccounts/${AUTOMATION_ACCOUNT}/runtimeEnvironments/${RUNTIME_ENVIRONMENT}/packages?api-version=2024-10-23" \
  --query "value[].{Package:name,Version:properties.version,State:properties.provisioningState,Default:properties.default}" \
  --output table

パッケージ一覧APIでは、パッケージ名、バージョン、プロビジョニング状態などを取得できます。(Microsoft Learn)

ただし、登録済みパッケージの一覧だけでは、どのRunbookがどのコマンドを利用しているかまでは分かりません。PowerShellではImport-Moduleusing module、使用しているコマンド名を、Pythonではimportfrom ... import ...を検索し、実際の依存関係を台帳に追記します。

移行優先度を決める判断基準

すべてのRunbookを同時に移行すると、障害発生時に原因を切り分けにくくなります。次の基準で優先度を決めます。

優先度該当するRunbook
最優先毎日実行、Webhook起動、VM停止やリソース削除を行う、業務停止につながる、代替手段がない
通常週次・月次処理、読み取り中心、手動で代替可能、影響範囲が限定的
廃止候補スケジュールなし、Webhookなし、親Runbookからの呼び出しなし、長期間ジョブ実績なし
要個別対応PowerShell Workflow、Graphical Runbook、Hybrid Worker固有処理、ソース管理連携あり

未使用Runbookは、無理に新runtimeへ移すより、コードと設定を保全したうえで廃止する方が安全です。移行対象を減らせるため、期限対応だけでなくAutomationアカウントの保守性も改善できます。

Runtime Environmentは依存関係ごとに分ける

Runtime Environmentは、runtimeの言語、バージョン、実行時に使用するパッケージをまとめて管理する仕組みです。1つのRunbookが関連付けられるRuntime Environmentは1つですが、1つのRuntime Environmentを複数のRunbookで共有できます。(Microsoft Learn)

ここで注意したいのが、Runtime Environment内のモジュールやパッケージを更新すると、関連付けられているすべてのRunbookへ新しい設定が反映される点です。(Microsoft Learn)

そのため、すべてのRunbookを1つの環境へまとめる設計は避けます。依存関係と更新サイクルが同じRunbookだけをグループ化します。

Runtime Environment名の例対象
ps74-az-core-v1Az.AccountsやAz.Resourcesを中心に使うRunbook
ps74-graph-v1Microsoft Graph関連モジュールを使うRunbook
ps74-exchange-v1Exchange Online関連Runbook
py310-rest-v1HTTP API呼び出し中心のPython Runbook
py310-azure-sdk-v1Azure SDK for Pythonを使うRunbook

PowerShell 7.4にはSystem-generated Runtime Environmentが用意されないため、カスタムRuntime Environmentを作成する必要があります。Python 3.10についても、パッケージ版を固定して管理したい場合はカスタム環境を作る方が安全です。(Microsoft Learn)

モジュールを更新するときは既存環境を直接書き換えるのではなく、v2などの新環境を作成し、テスト後にRunbookを付け替える方法が適しています。これにより、問題が起きた場合は旧環境へ戻せます。

Runbookを安全に更新する手順

現行状態を保全する

最初に、現在公開されているコードと設定を保全します。

  • Runbookの公開済みコード
  • 入力パラメーターと既定値
  • 現在のRuntime Environment
  • モジュールとパッケージのバージョン
  • スケジュールとWebhook
  • 親子Runbookの呼び出し関係
  • マネージドIDとRBACロール
  • 正常実行時の出力と処理時間

特に、正常実行時の出力件数、対象リソースID、終了コードを保存しておくと、新旧runtimeの結果を比較しやすくなります。

サポート中のRuntime Environmentを作成する

Azure portalでAutomationアカウントを開き、次の順に操作します。

  1. 「Process Automation」から「Runtime Environments」を開く
  2. 「Create」を選択する
  3. PowerShellの場合は7.4、Pythonの場合は3.10を選ぶ
  4. Runbookが必要とするモジュールやパッケージを追加する
  5. パッケージのプロビジョニング完了を確認する

Runtimeの言語とバージョンは作成後に変更できません。一方、モジュールやパッケージは更新できます。(Microsoft Learn)

本番Runbookを直接変更せずにテストする

通常のRunbookでは、ポータルエディターで新しいRuntime Environmentを選択し、「Test pane」で実行してから公開できます。Microsoftも、Runtime Environmentを変更したRunbookを公開前にテストすることを推奨しています。(Microsoft Learn)

業務影響が大きいRunbookは、本番Runbookのコピーを作り、次のような名前で検証します。

Stop-NightlyVMs-ps74-test
Create-MonthlyReport-py310-test

MicrosoftのマネージドID移行手順でも、本番Runbookを上書きしないよう、コピーを作って認証を検証する方法が推奨されています。(Microsoft Learn)

テスト用Runbookには、いきなり本番スケジュールや本番Webhookを接続しないでください。停止や削除を伴う処理は、テスト用サブスクリプション、テスト用リソースグループ、対象を限定するパラメーターなどを使って副作用を抑えます。

本番RunbookのRuntime Environmentを切り替える

テストに合格したら、本番RunbookのRuntime Environmentを変更して公開します。

既存のRunbook自体を更新すれば、Runbook名や紐付け先を変えずに移行できるため、スケジュールや親Runbookへの影響を抑えられます。Runtime Environmentは複数Runbookを選択して一括更新することもでき、変更時点ですでに実行中のジョブには影響しません。(Microsoft Learn)

ただし、一括更新は同じテスト結果を適用できるRunbook群に限定します。依存モジュールや認証方法が異なるRunbookまでまとめて切り替えないでください。

PowerShell 7.4でモジュール互換性を検証する

PowerShell Runbookでは、runtimeに対応したモジュールをRuntime Environmentへ登録する必要があります。PowerShell 7.4用として登録したモジュールはジョブ実行時に検証されるため、ポータル上でインポートが完了しただけでは互換性を確認したことになりません。依存モジュールが不足していれば、実行時に失敗します。(Microsoft Learn)

実際にロードされるモジュールを確認する

新しいRuntime Environmentへ関連付けたテストRunbookで、次のコードを実行します。

$ErrorActionPreference = "Stop"

Write-Output "PowerShell version:"
$PSVersionTable.PSVersion

Write-Output "Available modules:"
Get-Module -ListAvailable |
    Sort-Object Name, Version |
    Select-Object Name, Version, Path

必要なモジュールだけを明示的に検証する場合は、次のようにします。配列内の名前はRunbookに合わせて変更してください。

$ErrorActionPreference = "Stop"

$requiredModules = @(
    "Az.Accounts",
    "Az.Resources",
    "Az.Storage"
)

foreach ($name in $requiredModules) {
    $module = Get-Module -ListAvailable -Name $name |
        Sort-Object Version -Descending |
        Select-Object -First 1

    if (-not $module) {
        throw "Required module not found: $name"
    }

    Import-Module $module.Path -Force -ErrorAction Stop
    Write-Output "$($module.Name) $($module.Version)"
}

PowerShellで確認すべき互換性

確認項目失敗例対応
依存モジュールImport-Moduleで依存関係エラー依存モジュールもRuntime Environmentへ追加
コマンドの存在コマンドが見つからない対象モジュールとバージョンを確認
パラメーターパラメーター名や型のエラー現行モジュールのコマンド仕様に合わせて修正
戻り値プロパティが存在しない新旧の出力オブジェクトを比較
内部パスC:\modulesなどが見つからないAzure内部パスへの依存を除去
子スクリプト.\child-runbook.ps1が動かないStart-AzAutomationRunbookなどでRunbookとして呼び出す
バックグラウンドジョブStart-Job -Credentialが失敗対応する別の実行方法へ変更
モジュール更新複数Runbookが同時に失敗新しいRuntime Environmentを作って段階移行

PowerShell 7.xではWorkflowと署名付きRunbookに制約があります。また、PowerShell 7.4はAzure AutomationのSource control integrationに対応しておらず、ソース管理から同期した7.4 Runbookが5.1として作成される制約も公式ドキュメントに記載されています。既存の同期運用を使っている場合は、ポータルまたはREST APIを含めたデプロイ経路を先に検証してください。(Microsoft Learn)

モジュールは単に「最新版」にするのではなく、テストに合格した版を記録して固定します。Runbookのコード変更とモジュールのメジャーアップデートを同時に行うと、障害原因の切り分けが難しくなります。

Python 3.10でパッケージ互換性を検証する

Python 2.7から3.10への移行では、単なるruntime変更ではなく、実質的なコード移植が必要です。

特に次の記述を検索します。

Python 2.7で使われやすい記述Python 3.10での確認内容
print "text"print("text")へ変更
unicodestrbytesの使い分けを確認
dict.iteritems()dict.items()へ変更
xrange()range()へ変更
古い例外構文except Exception as e形式へ変更
/による整数除算必要に応じて//へ変更
urllib2urllib.requestなどへ変更
Python 2向けAzure SDKPython 3.10対応SDKへ更新

Python 3.8から3.10の場合は、構文変更よりもパッケージ互換性が問題になりやすくなります。requirements相当の一覧を作り、利用している全パッケージの対応版を確認してください。

新しいRuntime Environmentでパッケージ版を確認する簡易コードは次のとおりです。

import sys
from importlib import metadata

print(f"Python: {sys.version}")

required_packages = (
    "requests",
    "azure-identity",
    "azure-mgmt-resource",
)

for package in required_packages:
    try:
        version = metadata.version(package)
        print(f"{package}=={version}")
    except metadata.PackageNotFoundError as exc:
        raise RuntimeError(f"Required package is missing: {package}") from exc

required_packagesは、実際のRunbookで使用するパッケージ名へ置き換えます。

Azure AutomationのPython 3.10カスタムパッケージは、公式ドキュメント上、cp310のLinux OSを対象としたwheelがサポート対象です。また、カスタムパッケージの互換性はジョブ実行時に検証されるため、依存パッケージの不足や非互換なwheelは実行時エラーになります。(Microsoft Learn)

Windows専用のバイナリを含むパッケージや、OSネイティブライブラリを必要とする処理は、Azure sandboxでは動作しない可能性があります。その場合は、Python 3.10を構成したHybrid Runbook Workerでの実行も検討します。

認証とRBACをruntime移行と同時に確認する

runtimeとモジュールの読み込みに成功しても、認証先やRBACが正しくなければRunbookは完了しません。

特に、コード内に次の記述が残っていないか確認します。

AzureRunAsConnection
Get-AutomationConnection
CertificateThumbprint
Add-AzureRmAccount
Connect-AzureRmAccount

Azure AutomationのRun Asアカウントは2023年9月30日にretirementとなり、マネージドIDへ置き換えられています。旧Run As接続を参照するRunbookが残っている場合は、今回のruntime移行と合わせて修正対象にします。(Microsoft Learn)

システム割り当てマネージドIDの接続例

$ErrorActionPreference = "Stop"

# 別ジョブのAzContextを引き継がないようにする
Disable-AzContextAutosave -Scope Process

# Automationアカウントのシステム割り当てマネージドIDで接続
$AzureContext = (Connect-AzAccount -Identity).Context

# 対象サブスクリプションを明示
$AzureContext = Set-AzContext `
    -SubscriptionName $AzureContext.Subscription `
    -DefaultProfile $AzureContext

Write-Output $AzureContext

これはMicrosoft公式ドキュメントで案内されている接続方法です。ユーザー割り当てマネージドIDを使用する場合は、Connect-AzAccount -Identity -AccountId "<client-id>"のように対象IDを指定します。(Microsoft Learn)

認証テストでは、Connect-AzAccountが成功したことだけを合格条件にしてはいけません。実際にRunbookが行う操作を、最小権限の範囲で確認します。

  • 対象サブスクリプションを取得できるか
  • 対象リソースを読み取れるか
  • VMの開始・停止など必要な更新操作ができるか
  • Key VaultやStorageなど、対象サービスへのアクセスができるか
  • 別サブスクリプションを誤って操作していないか
  • ユーザー割り当てIDとシステム割り当てIDを取り違えていないか

読み取りテストだけで、停止、更新、削除を行う本番Runbookの権限を検証したことにはなりません。実際の操作に近いテスト用リソースを用意してください。

Hybrid Runbook Workerは別途runtimeを準備する

Hybrid Runbook Workerで実行するRunbookは、Azure側のRuntime Environmentを変更するだけでは移行できません。

現行の公式要件では、PowerShell 7.4とPython 3.10は、Windows・LinuxともにExtension-based Hybrid Runbook Workerでサポートされます。(Microsoft Learn)

Worker OS必要なExtensionの最低版追加作業
Windows1.3.63以上PowerShell 7.4またはPython 3.10をインストールし、実行ファイルのパスを設定
Linux1.1.23以上PowerShell 7.4またはPython 3.10をインストールし、実行ファイルのパスを設定

PowerShell 7.4ではpowershell_7_4_path、Python 3.10ではpython_3_10_pathという環境変数をWorker側に設定します。設定後はHybrid Runbook Workerの再起動が必要です。(Microsoft Learn)

Hybrid Workerでは、次の項目も確認します。

  • Worker extensionのバージョン
  • PowerShellまたはPythonの実体が存在するか
  • 環境変数のパスが正しいか
  • ローカルモジュールやOS依存ライブラリ
  • プロキシ、DNS、ファイアウォール
  • ファイル共有やオンプレミスサーバーへの接続
  • 実行アカウントのローカル権限
  • Worker groupを指定した実行

クラウドのTest paneだけで成功しても、Hybrid Worker上で成功するとは限りません。最終テストは本番と同じWorker group、ネットワーク経路、認証方式で実施します。

本番切り替え前のテスト項目

テストは「ジョブがCompletedになったか」だけでは不十分です。新旧runtimeの出力と副作用を比較します。

テスト合格基準
runtime確認PowerShell 7.4またはPython 3.10で実行されている
パッケージ確認必要なモジュールが指定版で読み込まれる
認証確認意図したマネージドIDとサブスクリプションを使用している
読み取り処理旧runtimeと件数、ID、値が一致する
更新処理テスト用リソースに対して期待した変更だけが行われる
冪等性同じ処理を2回実行しても二重作成や重複通知が発生しない
エラー処理権限不足、対象なし、429、5xxなどを適切に処理できる
パラメーター手動、スケジュール、Webhook、親Runbookの各経路で正しく渡る
出力互換性後続処理が参照するプロパティ名や形式が変わっていない
性能実行時間やメモリ使用量が許容範囲に収まる
ログ・監視エラー、警告、Job output、アラートが確認できる
Hybrid Worker本番相当のWorker groupで正常終了する

破壊的な処理では、対象を1件に限定するパラメーターやテストモードを用意します。対応するコマンドであれば-WhatIfも有効ですが、すべてのコマンドが実際の処理を完全に再現するわけではありません。

よくある失敗と回避策

失敗しやすい進め方問題回避策
runtimeだけ変更するモジュールや認証で実行時エラーになるRuntime Environment、依存関係、認証を一体で検証
共有環境のモジュールを直接更新する複数Runbookが同時に影響を受けるv2環境を作り、Runbookを段階的に付け替える
全モジュールを最新版にするコマンドや戻り値が同時に変わるテスト済みバージョンを固定する
ログイン成功だけで認証テストを終える実操作時にRBACエラーになる読み取りと更新の両方をテストする
Test paneだけで完了とするWebhookやHybrid Worker固有の問題を見逃す実際のトリガーと実行先でも確認する
最終日に一括切り替えするロールバックと原因切り分けができない優先度別に段階移行し、2週間以上の余裕を残す
更新日時だけで未使用と判断する現役Runbookを誤って廃止するジョブ履歴、スケジュール、Webhook、呼び出し元を確認する
10月1日以降も動く前提で延期するセキュリティ更新と正式サポートを失う9月中旬を社内切り替え期限にする

2026年9月30日までの推奨スケジュール

2026年7月から着手する場合は、次のように公式期限より前へ社内期限を設定します。

推奨期限完了させる作業
2026年7月31日AutomationアカウントとRunbookの全件棚卸し、優先度決定
2026年8月14日PowerShell 7.4/Python 3.10環境作成、パッケージ登録
2026年8月31日最優先Runbookの本番切り替え
2026年9月15日使用中の全Runbookを新runtimeへ切り替え
2026年9月25日旧runtime残存ゼロの確認、監視、ロールバック手順確認
2026年9月30日Microsoftのretirement期限

工程が遅れている場合も、モジュール検証、認証テスト、実トリガー確認を省略して一括切り替えするのは危険です。処理件数が多い場合は、まず業務影響の大きいRunbookを新runtimeへ移し、未使用Runbookを廃止して対象数を減らします。

期限前に完了させるべき最終確認

Azure Automation旧runtimeの移行先は、PowerShell 7.1/7.2からPowerShell 7.4、Python 2.7/3.8からPython 3.10です。

実務では、次の状態になって初めて移行完了と判断します。

  • 使用中Runbookがすべてサポート中runtimeに関連付けられている
  • 必要なモジュールとパッケージのバージョンが記録されている
  • マネージドIDとRBACを実操作で検証している
  • スケジュール、Webhook、親子Runbookから正常に起動できる
  • Hybrid Workerを使う場合はWorker側のruntimeも更新済み
  • 新旧の出力と処理結果を比較している
  • 問題発生時に以前のRuntime Environmentへ戻せる
  • 旧runtime上で実行される本番Runbookがゼロになっている

最初に行うべき作業は、REST APIまたはAzure portalでRunbook一覧を出し、Python 2.7、Python 3.8、PowerShell 7.1、PowerShell 7.2を使用しているRunbookへ担当者と優先度を付けることです。その後、依存関係の少ないRunbookを1本選び、PowerShell 7.4またはPython 3.10のRuntime Environmentでパイロット移行を実施してください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次