はじめに
Power Platform推進チームの鈴木です。 今回はLogicAppsを使って、AzureVMに対するRunCommandを実行してみます。 RunCommand(実行コマンド)は、AzureVMの拡張機能の一つであり、仮想マシンデプロイ時に有効となる仮想マシンエージェントを介して、WindowsやLinuxのAzureVM内でコマンドやスクリプトをリモート実行できる機能です。
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に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" ] }
動かしてみる
トリガーとアクションの定義を保存したら、さっそく動かしてみましょう。
デザイナー画面の「実行」ボタンから手動実行します。
処理には少し時間がかかります。
実行履歴で処理結果が「Succeeded」になったことを確認したら、デプロイしたAzureVMのグローバルIPに対して、HTTPでアクセスしてみましょう。
Apacheテストページが表示されれば、RunCommand経由でApacheがインストールされています。
まとめ
今回は手動でRunCommandを投入しましたが、トリガーを自動化したり、Webhookで連携したりすることで、OSにログインしなくても柔軟な設定が可能です。 また、コマンドベースの実行ではなく、OS内に配置したシェルスクリプトなどを実行することで、複雑な設定投入も可能となります。