#AzureLogicApps で #AzureAutomation の REST API を実行する(Azure Directory OAuth編)


Azure Logic Apps から実行した Azure Automation のジョブを REST API を使って停止させるシナリオを解説します。
本投稿を読み終わったとき、Azure Logic Apps で以下の設定ができるようになります。(多分)

  • Azure Automation コネクタにサービスプリンシパルで接続する
  • Azure Automation コネクタでジョブを作成する
  • HTTP コネクタの「Azure Directory OAuth」認証で Automation REST API を実行する

事前準備

リソース

  • Azure Logic Apps
  • Azure Automation アカウント
  • Azure Automation の Runbook に登録する PowerShell
  • Azure Automation の実行アカウント(別途 AzureAD にアプリ登録でもOK)

PowerShell

実行したジョブを停止させたいので、スリープ処理を入れてジョブが完了するまで時間稼ぎをします。
この PowerShell を Automation アカウントの Runboook に登録しておきます。

automation/StartSleep
Write-Output "Start"
Start-Sleep -Seconds 15
Write-Output "....."
Start-Sleep -Seconds 15
Write-Output "End"

Azure Logic Apps フロー概要

冒頭で述べたシナリオです。Azure Automation コネクタ「ジョブの作成」でジョブを作成して、ジョブが実行中となるのを待ってから、Automation REST API でジョブを停止させます。全体のフローはこんな感じになります。

Azure Automation コネクタ

Azure Automation への接続方法

Azure Automation コネクタを配置すると、以下のような画面が表示されて「ユーザーとしてサインイン」するか、「サービス プリンシパルを使用して接続」するかを選択できます。

Azure Logic Apps を業務で利用する場合は「サービスプリンシパルで接続」を選択します。なぜなら「ユーザーとしてサインイン」を業務で利用した場合、サインインしたユーザーが退職などで削除されると、この Azure Logic Apps が動かなくなるからです。
個人で利用する場合は「ユーザーとしてサインイン」でも良いでしょう。

サービスプリンシパルで接続する(為の前準備)

「サービスプリンシパルで接続する」をクリックして、事前に用意した Azure Automation の実行アカウント、または、別途登録した AzureAD アプリの情報を入力します。Azure Automation の実行アカウントを利用する場合、別途シークレットキーの発行が必要です。

アプリの登録

AzureAD アプリの登録方法は下記の記事を参照してください。
Microsoft Teamsの特定チャネルのいいねをした人ランキングを作成しよう!その1~Azure ADにアプリを登録する~

ロールの割り当て

Azure Automation コネクタで利用したい Automation アカウントを選択するために必要な設定です。

別途アプリを登録した場合は、Automation アカウントに対して「Automation オペレーター」ロールを割り当ててください。Azure Automation の実行アカウントを利用する場合、サブスクリプションレベルで「共同作成者」ロールが自動的に付与されているので、「Automation オペレーター」ロールの設定は不要です。

アクセス許可

HTTP コネクタで Automation REST API を呼び出すために必要な設定です。

アプリに対して「Azure Service Management」の「user_impersonation」のアクセス許可を割り当ててください。

ジョブを作成する

用意した Runbook を指定します。ジョブをあとで停止させるため、ジョブの待機は「いいえ」を選択します。

HTTP コネクタを設定する

実行したい Automation REST API を入力し、認証の種類を「Active Directory OAuth」に設定します。
「テナント」という入力欄はテナントID(GUID)を入力します。クライアントID、シークレットキーは適宜入力してください。

実行結果

無事にすべてのフローが成功しました。

そして、ジョブが停止されているのが確認できます。

まとめ

Azure Logic Apps で Azure Automation コネクタ、及び、Automation REST API を実行するために必要な情報は下記の通りです。

  • Azure Automation コネクタ
    • サービス プリンシパルで接続する場合、以下が必要
      • テナントID
      • クライアントID
      • シークレットキー
      • Automation アカウントに対するロール
  • HTTP コネクタ
    • 認証の種類「Azure Directory OAuth」を使う場合、以下が必要
      • テナントID
      • クライアントID
      • シークレットキー
      • アプリに対する「Azure Service Management」のアクセス許可

この方法のデメリットは、HTTP コネクタに「テナントID」「クライアントID」「シークレットキー」を設定する必要があるため、管理が面倒になることです。

次回予告

次回の記事では、HTTP コネクタで「テナントID」「クライアントID」「シークレットキー」が必要としない方法として、認証の種類「マネージドID」を使うケースについて書いていこうと思います。

参考

Azure Automation におけるロールベースのアクセス制御 | Microsoft Docs
Job - Stop (Azure Automation) | Microsoft Docs