APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

LogicAppsでRunCommandを実行してみる

はじめに

Power Platform推進チームの鈴木です。 今回はLogicAppsを使って、AzureVMに対するRunCommandを実行してみます。 RunCommand(実行コマンド)は、AzureVMの拡張機能の一つであり、仮想マシンデプロイ時に有効となる仮想マシンエージェントを介して、WindowsやLinuxのAzureVM内でコマンドやスクリプトをリモート実行できる機能です。

learn.microsoft.com


RunCommandには、PortalやAzureCLI、PowerShellなど様々な投入方法がありますが、今回はLogicAppsからREST APIによるコマンド投入を行います。

やりたいこと

  • AzureVM(Linux)にLogicApps経由でRunCommandを発行する
  • RunCommandでApacheのインストールを行う

事前準備

  • AzureVM(Linux)を作成しておく
  • NSGの受信ポートルールにて、インターネット(外部)からのHTTPアクセスを許可しておく
    • RunCommand実行後のApache動作確認のため
  • LogicAppsを作成しておく
    • 従量課金プランで動作確認できます
  • LogicAppsのマネージドIDを有効にし、作成したAzureVMに対する「仮想マシン共同作成者」のロールを付与する

マネージドIDの設定が大事です。 LogicAppsから透過的にAzureVMにアクセスできるよう、マネージドIDを用いたアクセス権の付与を設定してください。 今回は、ユーザー割り当てマネージドIDを作成し、これに「仮想マシン共同作成者」のロールを付与しています。

LogicApps上のユーザー割り当てマネージドID

マネージドIDに対するロールの割り当て

やってみる

事前準備が終わっている状態で、LogicAppsにRunCommand用のアクションを投入します。

1.トリガーを作成する

まずはトリガーを作ります。
今回は動作確認のため、手動実行で確認ができる「Recurrence(スケジュール)」トリガーを用いますが、実行さえできれば、それ以外のトリガーでも問題ありません。
※「Recurrence」トリガーの場合、実行間隔を短く設定したまま放置すると、予期せぬ従量課金の元となるので、意図的に実行間隔を長くとるか、確認後はLogicAppsを破棄するよう、ご注意ください。

トリガーの設定

2.RunCommand用アクションを作成する

RunCommand用のアクションは「HTTP」アクションを定義します。

  • アクションコネクタ:HTTP
    ※認証に関する設定は、詳細パラメーターから設定してください。
パラメーター項目 設定する値
URL https://management.azure.com/subscriptions/[サブスクリプションID]/resourceGroups/[VMのリソースグループ]/providers/Microsoft.Compute/virtualMachines/[VMマシン名]/runCommand?api-version=2022-08-01
Method POST
Body [下記のBodyを参照]
認証の種類 マネージドID
マネージドID [事前準備で用意したマネージドID]


* Bodyの中身

{
  "commandId": "RunShellScript",
  "script": [
    "sudo su - && sudo yum -y install httpd  && sudo systemctl enable httpd && sudo systemctl restart httpd && sudo firewall-cmd --permanent --add-port=80/tcp && sudo firewall-cmd --reload"
  ]
}


動かしてみる

トリガーとアクションの定義を保存したら、さっそく動かしてみましょう。 デザイナー画面の「実行」ボタンから手動実行します。

LogicAppsの実行

処理には少し時間がかかります。 実行履歴で処理結果が「Succeeded」になったことを確認したら、デプロイしたAzureVMのグローバルIPに対して、HTTPでアクセスしてみましょう。 Apacheテストページが表示されれば、RunCommand経由でApacheがインストールされています。

Apacheテストページ

まとめ

今回は手動でRunCommandを投入しましたが、トリガーを自動化したり、Webhookで連携したりすることで、OSにログインしなくても柔軟な設定が可能です。 また、コマンドベースの実行ではなく、OS内に配置したシェルスクリプトなどを実行することで、複雑な設定投入も可能となります。