実行コマンド アクションを使用して Linux VM でスクリプトを実行する

注意

この記事では、間もなくサポート終了 (EOL) 状態になる Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。

適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット

実行コマンド機能では、仮想マシン (VM) エージェントを使用して Azure Linux VM 内でシェル スクリプトが実行されます。 これらのスクリプトは、マシンやアプリケーションの一般的な管理に使用できます。 これらを使用すれば、VM のアクセスおよびネットワークの問題を迅速に診断して修正し、VM を良好な状態に戻すことができます。

メリット

仮想マシンには複数の方法でアクセスできます。 実行コマンドは、VM エージェントを使用して、仮想マシン上でスクリプトをリモートで実行できます。 実行コマンドは、Azure portal、REST API、または Linux VM 用の Azure CLI から使用します。

この機能は、仮想マシン内でスクリプトを実行するすべてのシナリオで役立ちます。 これは、ネットワークまたは管理ユーザーの構成によって RDP または SSH ポートが閉じられている仮想マシンをトラブルシューティングして修正する、限られた方法の 1 つです。

前提条件

サポートされる Linux ディストリビューション

Linux ディストリビューション x64 ARM64
Alma Linux 9.x 以降 9.x 以降
CentOS 7.x+、8.x+ 7.x+
Debian 10+ 11.x+
Flatcar Linux 3374.2.x+ 3374.2.x+
Azure Linux 2.x 2.x
openSUSE 12.3+ サポートされていません
Oracle Linux 6.4+、7.x+、8.x+ サポートされていません
Red Hat Enterprise Linux 6.7+、7.x+、8.x+ 8.6+、9.0+
Rocky Linux 9.x 以降 9.x 以降
SLES 12.x+、15.x+ 15.x SP4+
Ubuntu 18.04+、20.04+、22.04+ 20.04+、22.04+

制限

実行コマンドを使用するときには、次の制限が適用されます。

  • 出力は最後の 4,096 バイトに制限されます。
  • スクリプトを実行するための最小時間は約 20 秒です。
  • スクリプトは既定で、管理者特権として Linux 上で実行されます。
  • 一度に実行できるスクリプトは 1 つです。
  • 情報の入力を求めるスクリプト (対話モード) はサポートされていません。
  • スクリプトの実行を取り消すことはできません。
  • スクリプトを実行できる最大時間は 90 分です。 その後、スクリプトはタイムアウトになります。
  • スクリプトの結果を返すために、VM からの送信接続が必要

Note

正常に機能するには、実行コマンドに Azure のパブリック IP アドレスへの接続 (ポート 443) が必要です。 この拡張機能にこれらのエンドポイントへのアクセス権がない場合、スクリプトが正常に実行されても結果が返されないことがあります。 仮想マシン上のトラフィックをブロックしている場合、サービス タグを使用し、AzureCloud タグを使用して Azure パブリック IP アドレスへのトラフィックを許可できます。

使用可能なコマンド

この表は、Linux VM で使用可能なコマンドの一覧を示しています。 RunShellScript コマンドを使用して、任意のカスタム スクリプトを実行できます。 Azure CLI または PowerShell を使用してコマンドを実行する場合、--command-id または -CommandId パラメーターに指定する値は、次に示す値のいずれかである必要があります。 使用可能なコマンドではない値を指定すると、次のエラーが表示されます。

The entity was not found in this Azure location
名前 説明
RunShellScript Linux シェル スクリプトを実行します。
ifconfig すべてのネットワーク インターフェイスの構成を取得します。

Azure CLI

次の例は、az vm run-command コマンドを使用して Azure Linux VM 上でシェル スクリプトを実行します。

az vm run-command invoke -g myResourceGroup -n myVm --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"

注意

別のユーザーとしてコマンドを実行するには、sudo -u を入力してユーザー アカウントを指定します。

Azure portal

Azure portal で VM に移動し、左側のメニューの [Operations](操作)[実行コマンド] を選択します。 VM 上で実行できるコマンドの一覧が表示されます。

コマンドの一覧

実行するコマンドを選択します。 一部のコマンドには、省略可能または必須の入力パラメーターがある場合があります。 そうしたコマンドの場合、パラメーターは、入力値を指定するためのテキスト フィールドとして表示されます。 コマンドごとに、 [スクリプトの表示] を展開することによって、実行されるスクリプトを表示できます。 RunShellScript は他のコマンドと異なり、独自のカスタム スクリプトを指定することができます。

Note

組み込みコマンドは編集できません。

コマンドを選択した後、 [実行] を選択してスクリプトを実行します。 スクリプトが完了すると、出力ウィンドウに出力およびエラー (発生した場合) が返されます。 次のスクリーンショットは、ifconfig コマンドの実行の出力例を示しています。

実行コマンド スクリプトの出力

PowerShell

次の例では、Invoke-AzVMRunCommand コマンドレットを使用して Azure VM 上で PowerShell スクリプトを実行します。 このコマンドレットは、-ScriptPath パラメーターで参照されるスクリプトが、このコマンドレットの実行場所に対してローカルであることを想定しています。

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

実行コマンドへのアクセスの制限

実行コマンドを一覧表示したり、コマンドの詳細を表示したりするには、サブスクリプション レベルの Microsoft.Compute/locations/runCommands/read アクセス許可が必要です。 組み込みの閲覧者ロール以上のレベルには、このアクセス許可があります。

コマンドの実行には、Microsoft.Compute/virtualMachines/runCommands/write アクセス許可が必要です。 仮想マシンの共同作成者ロール以上のレベルには、このアクセス許可があります。

実行コマンドを使用するには、いずれかの組み込みロールを使用するか、カスタム ロールを作成します。

Linux のアクション実行コマンドのトラブルシューティング

Linux 環境のアクション実行コマンドのトラブルシューティングを行う場合、詳細については、"ハンドラー" ログ ファイルを参照してください。このファイルは通常、/var/log/azure/run-command-handler/handler.log のディレクトリ内にあります。

既知の問題

Linux のアクション実行コマンド ログには、Windows のアクション実行コマンド ログと比較して、いくつかの注目すべき違いがあります。

  • シーケンス番号が、ログの各行で 'seq=#' として報告されます。
  • Awaiting completion... を含む行は存在しません。これは、Windows のアクション実行コマンドにのみ存在します。
  • Command existed with code: # の行も Windows のアクション実行コマンドにのみ存在します。

アクション実行コマンドの削除

Linux 拡張機能のアクション実行コマンドを削除する必要がある場合は、Azure PowerShell と CLI について次の手順を参照してください。

次の削除例では、rgnamevmname を関連するリソース グループ名と仮想マシン名に置き換えます。

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandLinuxExtension'
az vm run-command invoke  --command-id RemoveRunCommandLinuxExtension --name vmname -g rgname

Note

実行コマンドをもう一度適用すると、拡張機能は自動的にインストールされます。 拡張機能の削除コマンドを使用して、拡張機能に関連する問題のトラブルシューティングを行うことができます。

次のステップ

VM においてリモートでスクリプトやコマンドを実行するその他の方法の詳細については、「Linux VM でスクリプトを実行する」を参照してください。