Azure Logic Apps から Azure 仮想マシン(Linux)上のスクリプトを実行してみる

2022.09.02

いわさです。

ずいぶん前ですが、Azure Logic Apps から Azure Functions と Azure Automation を経由して PowerShell スクリプトを実行する方法をご紹介しました。

本日は Azure Functions も Azure Automation も使わずに Azure 仮想マシン内のスクリプトを実行する機会があったので実現方法をご紹介します。

仮想マシン内のスクリプトをリモート環境から実行

仮想マシン上にスクリプトを実行する方法ですが、いくつか方法があります。
ここでは以下の方法の中から Run command を使ってみたいと思います。

この方法を使うと仮想マシン上のエージェント経由で、仮想マシン内でスクリプトを実行することが出来ます。

仮想マシンのスクリプトを Azure CLI から実行してみる

まずは仮想マシンを用意します。

今回は外部の Webhook へ HTTP リクエストを送信するスクリプトを作成します。
Webhook は以下を使って用意しました。

スクリプトの中身は以下です。本当にただ GET リクエストを送信しているだけです。

/hogem/iwasa/hoge.sh

curl https://webhook.site/b6bf109b-1092-4a9a-a204-88dc74d9ffee

Azure 環境外からは以下の方法を使って、このスクリプトを実行することが出来ます。
試してみましょう。

% az vm run-command invoke --command-id RunShellScript --name hoge0902vm -g hoge0902logic --scripts "sh /home/iwasa/hoge.sh"  
{
  "value": [
    {
      "code": "ProvisioningState/succeeded",
      "displayStatus": "Provisioning succeeded",
      "level": "Info",
      "message": "Enable succeeded: \n[stdout]\n\n[stderr]\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0\r  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0\n",
      "time": null
    }
  ]
}

実行に成功しました。

Logic Apps から実行する

Logic Apps から Azure CLI を直接実行することは出来ないようなので HTTP モジュールを使って API 経由でリクエストを送信してみます。

リファレンスは以下となっています。

Azure CLI と同様で、パラメータのRunCommandInputでどういったスクリプトを実行するか指定出来ます。
今回は Linux を対象にしましたが Windows 仮想マシンを対象に PowerShell スクリプトを実行することも可能です。

Azure を API 経由で操作する際には認証情報が必要になります。
今回は Logic Apps でマネージド ID を有効化し、マネージド ID に API 呼び出し権限を付与しています。

では作成したフローをトリガーしてみましょう。

Webhook にリクエストが送信されました。
これで、例えば一定周期で仮想マシン内のスクリプトを実行するなどが出来るようになりました。

さいごに

本日は Azure Logic Apps から Azure 仮想マシン(Linux)上のスクリプトを実行してみました。

直接接続出来る経路がなくても Azure の基盤経由で実行出来るのは便利ですね。
Logic Apps が適しているかはともかく、定期的に仮想マシンをリモートメンテナンスしたいときなどに Logic Apps で制御出来なくもなさそうです。