Azure

Azure Service Health API活用ガイド:取得・認証・自動化手順

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Azure Service Health とサービスステータス API の概要

Azure Service Health は、サブスクリプション単位で発生する障害やメンテナンス情報をリアルタイムに取得できるサービスです。本節では Service Health のサービス別ステータス API が提供するエンドポイントと、取得できる対象(リージョン・リソースタイプ)について解説します。API を正しく呼び出すことで、独自の監視システムやレポートに組み込むことが可能です。

エンドポイントと取得対象

  • 基本エンドポイントは以下の通りです。
    text
    GET https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.ResourceHealth/availabilityStatuses?api-version={apiVersion}
  • {apiVersion} は公式ドキュメントで最新バージョンを必ず確認してください(例: 2023‑07‑01)。古いバージョンは将来的にサポートが終了します。
  • パラメータ location$filter クエリに組み込むことで、特定リージョンだけのステータスを取得できます。

利用例とフィルタリング

以下は東京リージョン(japaneast)のみを対象にした呼び出し例です。

レスポンスは JSON で返り、availabilityStateAvailable, Degraded, Unavailable)や影響開始時刻 (impactedScope.startTime) が含まれます。


認証と権限設定:Azure AD アプリ登録とクライアントクレデンシャルフロー

Service Health API は Azure AD のアクセストークンで保護されています。本節では 安全にトークンを取得し、最小権限で API にアクセスする手順 を示します。

Azure AD アプリの作成手順

  1. Azure ポータル → 「Azure Active Directory」 → 「アプリ登録」 → 「新規登録」。
  2. 名前(例: ServiceHealthMonitor)とサポート対象のアカウント種別を入力し、リダイレクト URI は不要です。
  3. 作成後に「証明書とシークレット」から クライアント シークレット を生成し、表示された値は安全な場所に保管します(コードに埋め込まない)。

必要な Application Permission と RBAC ロール

項目 推奨設定 補足
Application Permission Microsoft.ResourceHealth/availabilityStatuses/read(※正式名称は Azure ドキュメントで確認) アプリ権限なので管理者同意が必須です。
RBAC ロール サブスクリプションレベルの Reader もしくはカスタムロールに Microsoft.ResourceHealth/availabilityStatuses/read を追加 Reader が既に含んでいる場合は追加不要ですが、最小権限を保つために Permission のみ付与することが推奨されます。

注意:Permission 名は将来的に変更される可能性があります。実装前に Azure Portal の「API のアクセス許可」画面で正確な名称を必ず確認してください。

シークレット・マネージド ID の管理ベストプラクティス

  • 本番環境では Azure Managed Identity を有効化し、シークレットの保管を不要にします。
  • 開発・テスト環境でシークレットを使用する場合は Azure Key Vault に格納し、スクリプトからは Get-AzKeyVaultSecret などで取得してください。

API 呼び出し実装例:PowerShell・Azure CLI・Python

ここでは アクセストークン取得 → API リクエスト のフローを三つの言語で示します。すべて環境変数または Key Vault から機密情報を取得する想定です。

PowerShell 実装例(正しいプロパティ参照)

ポイント
プロパティは $_ .property の形で参照し、誤った $_.. を使用していません。
エラーハンドリングは try{} / catch{} で囲み、429(レートリミット)時は指数バックオフで再試行します。

Azure CLI 実装例(az rest の活用)

ポイント
* az rest は内部的に curl 相当の処理を行うため、追加ヘッダーは --header でも指定可能です。

Python 実装例(msalrequests

ポイント
* msal がトークンキャッシュと自動リフレッシュを行うため、コードがシンプルです。


取得したステータス情報の解析とエラーハンドリング

API が返す JSON は階層化された構造です。本節では 主要フィールドのマッピング表 と、代表的なエラー種別ごとのハンドリング例 を示します。

JSON フィールドマッピング表

パス データ型 意味
properties.availabilityState string (Available, Degraded, Unavailable) 現在の稼働状態
properties.impactedScope.startTime ISO8601 datetime 影響開始時刻
properties.impactedServices[*].serviceDisplayName string 障害対象サービス名
id / name string リソース識別子(サブスクリプション/リソースグループ)

エラー種別別ハンドリング例

PowerShell

Python

ポイント
* 401/403 は設定ミスを示すため即時通知し、429Retry-After ヘッダーまたは指数バックオフで再試行します。


自動化・通知連携:Log Analytics、アラート、Teams への配信と定期実行

取得したステータスを ログに蓄積し可視化、さらに 障害時に即座に担当者へ通知 するフローを構築します。ここでは Log Analytics Ingestion API の署名生成手順、Azure Monitor アラート設定例、定期実行の選択肢とベストプラクティスを示します。

Log Analytics Ingestion API の認証署名作成手順

  1. 必要情報
  2. ワークスペース ID ($workspaceId)
  3. 共有キー(Base64 エンコードされたシークレット)$sharedKey
  4. HTTP ヘッダーに必須の項目
  5. Authorization: SharedKey <WorkspaceId>:<Signature>
  6. Log-Type: ServiceHealthStatus(任意だが大文字で 1 語)
  7. x-ms-date: <RFC1123 GMT>
  8. 署名文字列の生成手順(PowerShell)

  1. 最終的な API 呼び出し

この手順をスクリプト化すれば、PowerShell・Azure CLI・Python のいずれでも同様に署名生成が可能です(Python 版は hmachashlib を使用)。

Azure Monitor アラートと Teams Webhook 設定例

  1. Log Analytics のクエリベース アラート
    kusto
    ServiceHealthStatus
    | where State != "Available"
    | summarize cnt=count() by ServiceName, bin(ImpactStartTime, 5m)
    | where cnt > 0
  2. アクション グループに Teams Webhook を追加
  3. Teams の「Incoming Webhook」コネクタ URL を取得し、Azure ポータルの「アラート」→「アクショングループ」→「Webhook」へ貼り付け。
  4. ペイロード例(Markdown 形式)
    json
    {
    "text": "⚠️ Azure Service Health: 以下のサービスで障害が検出されました\n{{AlertContext}}"
    }
  5. 必要に応じてメールや SMS も併用し、一次対応者への確実な通知を実現します。

定期実行の選択肢とベストプラクティス

サービス メリット 注意点
Azure Automation Runbook (PowerShell) 既存 PowerShell スクリプトをそのまま利用可。スケジュール UI が分かりやすい。 ランブックは Azure AD の マネージド ID を有効化し、シークレット管理を省くことが推奨されます。
Logic Apps ノーコード/ローコードで HTTP 呼び出し・条件分岐・Teams 連携がドラッグ&ドロップで実装可能。 実行回数課金に注意。認証は「Managed Identity」か「API キー」設定が必要です。
Azure Functions (Python / PowerShell) サーバーレスで高速起動、Timer Trigger により柔軟な cron 表記が可能。 消費プランの場合は実行回数に応じ課金。常時オンが必要なら App Service プランを選択。

共通ベストプラクティス
- Managed Identity を利用し、Microsoft.ResourceHealth/availabilityStatuses/read のロールを割り当てるだけでシークレット不要にする。
- 再試行ポリシーは各サービスの組み込み機能(Logic Apps の「Retry Policy」や Functions の Durable Retries)を活用し、コード上の重複実装を避ける。


まとめと次のアクション

  1. API エンドポイントは単一でサブスクリプション全体のステータスを取得でき、最新 api-version を必ず公式ドキュメントで確認してください。
  2. 認証は Azure AD アプリのクライアント クレデンシャル フローで行い、正確な Application Permission Microsoft.ResourceHealth/availabilityStatuses/read とサブスクリプションの Reader(またはカスタム)ロールを付与します。
  3. PowerShell・Azure CLI・Python の実装例はプロパティ参照ミスを修正し、エラーハンドリングと指数バックオフを標準化しました。
  4. 取得した JSON は Log Analytics に送信し、Kusto クエリで可視化、Azure Monitor アラート+Teams Webhook で即時通知できます。署名生成手順も詳細に示しています。
  5. 定期実行は Azure Automation Runbook、Logic Apps、または Functions のいずれかを選択し、Managed Identity によるシークレットレス認証を推奨します。
  6. 過去インシデント取得やレポート作成startTime/endTime フィルタと Data Factory → Power BI のパイプラインで自動化すると、MTTR や障害頻度の定量分析が容易になります。

上記手順を実環境に適用すれば、Azure Service Health の監視が コードベースで自動化され、障害検知から関係者通知まで一貫したフローが構築できます。ぜひ本稿の設定を試し、運用チームの可観測性向上に役立ててください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Azure