Linux 仮想マシンで Azure カスタム スクリプト拡張機能 v2 を使用する

注意

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

カスタム スクリプト拡張機能バージョン 2 は、スクリプトをダウンロードし、Azure Virtual Machines (VM) 上で実行します。 この拡張機能は、デプロイ後の構成、ソフトウェアのインストール、その他の構成タスクや管理タスクに使用します。 スクリプトは、Azure Storage や他のアクセス可能なインターネットの場所からダウンロードできます。または、実行時に拡張機能に提供することもできます。

カスタム スクリプト拡張機能は Azure Resource Manager テンプレートと統合します。 また、Azure CLI、Azure PowerShell、または Azure Virtual Machines REST API を使って実行することもできます。

この記事では、Azure CLI からカスタム スクリプト拡張機能を使う方法と、Azure Resource Manager テンプレートを使って拡張機能を実行する方法について説明します。 また、Linux システムでのトラブルシューティング手順も示します。

カスタム スクリプト拡張機能には、次の 2 つのバージョンがあります。

  • バージョン 1: Microsoft.OSTCExtensions.CustomScriptForLinux
  • バージョン 2: Microsoft.Azure.Extensions.CustomScript

新規および既存のデプロイにはバージョン 2 を使用します。 この新しいバージョンは、一時的な置き換えです。 移行は、名前とバージョンを変更するだけで簡単に行うことができます。 拡張機能の構成を変更する必要はありません。

前提条件

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

Distribution 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+、9.x+ 8.6 以降、9.x 以降
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+

スクリプトの場所

Azure Blob Storage の資格情報を使用して Azure Blob Storage にアクセスできるように拡張機能を設定できます。 スクリプトは、そのエンドポイント (GitHub や社内ファイル サーバーなど) に VM をルーティングできる限り、任意の場所に保存できます。

インターネット接続

GitHub や Azure Storage などからスクリプトを外部でダウンロードする場合は、ファイアウォールやネットワーク セキュリティ グループ (NSG) の他のポートを開く必要があります。 たとえば、スクリプトが Azure Storage にある場合、Storage の Azure NSG サービス タグを使用することでアクセスを許可できます。

スクリプトがローカル サーバーにある場合でも、ファイアウォールや NSG の他のポートを開く必要があります。

ヒント

  • この拡張機能のエラーで最も多い原因は、スクリプトの構文エラーです。 スクリプトがエラーを出さずに実行されることを確認してください。 スクリプトに追加のログ記録を挿入すると、エラーを見つけやすくなります。
  • 誤って複数回実行された場合でもシステムに変更が加えられないよう、べき等のスクリプトを作成してください。
  • スクリプトの実行時に、ユーザー入力を必要としないように作成してください。
  • スクリプトは、実行されるまでに 90 分かかることがあります。 これを超えると、拡張機能のプロビジョニングに失敗します。
  • スクリプト内で再起動を行わないでください。 再起動すると、インストール中の他の拡張機能に問題が発生し、拡張機能は再起動後に継続しません。
  • アプリケーションをインストールしてスクリプトを実行する前に再起動を引き起こすスクリプトがある場合は、cron ジョブを使用するか、DSC、Chef、または Puppet 拡張機能などのツールを使用して、再起動をスケジュールします。
  • Azure Linux エージェントの停止または更新を引き起こすスクリプトを実行しないでください。 実行すると拡張機能が移行中状態になり、タイムアウトにつながることがあります。
  • 拡張機能はスクリプトを 1 回だけ実行します。 起動するたびにスクリプトを実行する場合、cloud-init イメージと、Scripts Per Boot モジュールを使用できます。 または、systemd サービス ユニットを作成するためにスクリプトを使用することができます。
  • VM に適用できる拡張機能のバージョンは 1 つだけです。 2 つ目のカスタム スクリプトを実行するには、既存の拡張機能を新しい構成で更新します。 または、カスタム スクリプト拡張機能を削除し、更新されたスクリプトを使用してそれを再適用できます。
  • スクリプトを実行する時期をスケジュールする場合は、拡張機能を使用して cron ジョブを作成します。
  • スクリプトが実行されているとき、Azure portal または CLI には拡張機能の状態が "移行中" とだけ表示されます。 実行中のスクリプトのステータスをより高い頻度で更新するには、独自のソリューションを作成してください。
  • カスタム スクリプト拡張機能は、ネイティブではプロキシ サーバーをサポートしません。 ただし、スクリプト内のプロキシ サーバーをサポートする、Curl などのファイル転送ツールを使用できます。
  • スクリプトまたはコマンドで使用している既定以外のディレクトリの場所に注意してください。 この状況を処理するロジックを用意してください。

拡張機能のスキーマ

カスタム スクリプト拡張機能の構成では、スクリプトの場所や、実行するコマンドなどを指定します。 この情報は、構成ファイルに格納したり、コマンド ラインで指定したり、Azure Resource Manager テンプレートで指定したりできます。

機微なデータは、保護された構成に格納できます。この構成は暗号化され、ターゲットの VM でのみ復号化されます。 保護された構成は、実行コマンドにパスワードなどの機密情報が含まれている場合に便利です。 次に例を示します。

{
  "name": "config-app",
  "type": "Extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      "skipDos2Unix":false,
      "timestamp":123456789
    },
    "protectedSettings": {
       "commandToExecute": "<command-to-execute>",
       "script": "<base64-script-to-execute>",
       "storageAccountName": "<storage-account-name>",
       "storageAccountKey": "<storage-account-key>",
       "fileUris": ["https://.."],
       "managedIdentity" : "<managed-identity-identifier>"
    }
  }
}

Note

managedIdentity プロパティは、storageAccountName または storageAccountKey プロパティと組み合わせて使用しないでください

プロパティ値

名前 値または例 データ型
apiVersion 2019-03-01 date
publisher Microsoft.Azure.Extensions string
type CustomScript string
typeHandlerVersion 2.1 INT
fileUris https://github.com/MyProject/Archive/MyPythonScript.py array
commandToExecute python MyPythonScript.py \<my-param1> string
script IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo= string
skipDos2Unix false boolean
timestamp 123456789 32-bit integer
storageAccountName examplestorageacct string
storageAccountKey TmJK/1N3AbAZ3q/+hOXoi/l73zOqsaxXDhqa9Y83/v5UpXQp2DQIBuv2Tifp60cE/OaHsJZmQZ7teQfczQj8hg== string
managedIdentity { } または { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" } または { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" } JSON オブジェクト

プロパティ値の詳細

プロパティ 省略可能または必須 詳細
apiVersion 適用できません 最新の API バージョンを確認するには、リソース エクスプローラーを使用するか、Azure CLI のコマンド az provider list -o json を使用します。
fileUris 省略可能 ダウンロードするファイルの URL。
commandToExecute script が設定されない場合は必須 実行するエントリ ポイント スクリプト。 コマンドにパスワードなどの機密情報が含まれている場合は、script の代わりにこのプロパティを使用します。
script commandToExecute が設定されない場合は必須 /bin/sh によって実行される、Base64 でエンコードされ、必要に応じて gzip されたスクリプト。
skipDos2Unix 省略可能 スクリプトベースのファイルの URL またはスクリプトの dos2unix 変換をスキップする場合は、この値を false に設定します。
timestamp 省略可能 この値は、スクリプトの再実行をトリガーするためにのみ変更します。 任意の整数値を使用できますが、前の値とは異なる必要があります。
storageAccountName 省略可能 ストレージ アカウントの名前。 ストレージの資格情報を指定する場合は、すべての fileUris 値が Azure BLOB の URL である必要があります。
storageAccountKey 省略可能 ストレージ アカウントのアクセス キー。
managedIdentity オプション ファイルをダウンロードするためのマネージド ID。 値は、マネージド ID のクライアント ID を示す clientId (省略可能、文字列) と、マネージド ID のオブジェクト ID を示す objectId (省略可能、文字列) です。

"パブリック設定" は、スクリプトが実行される VM にクリア テキストで送信されます。 "保護された設定" は、Azure と VM のみが認識するキーを使用して暗号化されます。 設定は、送信先の仮想マシンに保存されます。 つまり、設定が暗号化された場合は、暗号化された設定が仮想マシンに保存されます。 暗号化された値の暗号化を解除するために使用される証明書は、仮想マシンに格納されます。 証明書は、必要に応じて実行時に設定の暗号化を解除するためにも使用されます。

デバッグにはパブリック設定を使用することが便利な場合もありますが、保護された設定を使用することを強くお勧めします。

パブリックまたは保護された設定のいずれかで、次の値を設定できます。 拡張機能では、パブリック設定と保護された設定の両方でこれらの値が設定されている構成が拒否されます。

  • commandToExecute
  • script
  • fileUris

プロパティ: skipDos2Unix

前のバージョンのカスタム スクリプト拡張機能、Microsoft.OSTCExtensions.CustomScriptForLinux では、\r\n\n に変換することによって DOS ファイルが UNIX ファイルに自動的に変換されました。 この変換は引き続き存在し、既定ではオンに設定されています。 この変換は、fileUris からダウンロードされたすべてのファイル、または次の条件のいずれかに基づくスクリプト設定に適用されます。

  • 拡張子は .sh.txt.py または .pl です。 スクリプト設定は、/bin/sh で実行されるスクリプトであると想定されるため、常にこの条件に一致します。スクリプト設定は VM 上で script.sh として保存されます。
  • ファイルは #! で始まります。

既定値は false で、dos2unix 変換が実行されます。 次のように skipDos2Unixtrue に設定すると、dos2unix 変換をスキップできます。

{
  "fileUris": ["<url>"],
  "commandToExecute": "<command-to-execute>",
  "skipDos2Unix": true
}

プロパティ: script

カスタム スクリプト拡張機能によって、ユーザー定義スクリプトの実行がサポートされます。 スクリプト設定は、commandToExecutefileUris を 1 つの設定に結合します。 Azure Storage または GitHub gist からダウンロードするファイルを設定する代わりに、設定としてスクリプトをエンコードできます。 スクリプトを使用して、commandToExecutefileUris を置換できます。

いくつかの要件を次に示します。

  • スクリプトは、Base64 エンコードをする必要があります。
  • スクリプトは必要に応じて GZip 圧縮できます。
  • スクリプトの設定は、パブリックまたは保護された設定で使用できます。
  • スクリプト パラメーターのデータの最大サイズは、256 KB です。 スクリプトはこのサイズを超えた場合、実行されません。

たとえば、ファイル /script.sh/ に次のスクリプトが保存されているとします。

#!/bin/sh
echo "Creating directories ..."
mkdir /data
chown user:user /data
mkdir /appdata
chown user:user /appdata

次のコマンドの出力を取得して、正しいカスタム スクリプト拡張機能のスクリプト設定を作成します。

cat script.sh | base64 -w0
{
  "script": "IyEvYmluL3NoCmVjaG8gIlVwZGF0aW5nIHBhY2thZ2VzIC4uLiIKYXB0IHVwZGF0ZQphcHQgdXBncmFkZSAteQo="
}

ほとんどの場合、gzip 圧縮してさらにスクリプトのサイズを削減することもできます。 カスタム スクリプト拡張機能は、gzip 圧縮の使用を自動的に検出します。

cat script | gzip -9 | base64 -w 0

カスタム スクリプト拡張機能では、次のアルゴリズムを使用してスクリプトを実行します。

  1. スクリプトの値の長さが 256 KB を超えないことをアサートします。
  2. スクリプトの値を base64 にデコードします。
  3. base64 にデコードされた値の GunZip 圧縮を試行します。
  4. デコードされ、必要に応じて圧縮解除された値をディスクに書き込む: /var/lib/waagent/custom-script/#/script.sh
  5. _/bin/sh -c /var/lib/waagent/custom-script/#/script.sh を使用してスクリプトを実行します。

プロパティ: managedIdentity

Note

このプロパティは、保護された設定でのみ指定する必要があります

カスタム スクリプト拡張機能のバージョン 2.1 以降では、fileUris 設定で指定された URL からファイルをダウンロードするためのマネージド ID がサポートされています。 この方法により、ユーザーが Shared Access Signature (SAS) トークンやストレージ アカウント キーなどのシークレットを渡さなくとも、カスタム スクリプト拡張機能で Azure Storage プライベート BLOB またはコンテナーにアクセスできるようになります。

この機能を使用するには、カスタム スクリプト拡張機能の実行が想定される仮想マシンまたは仮想マシン スケール セットに、システム割り当て ID またはユーザー割り当て ID を追加します。 その後、Azure Storage コンテナーまたは BLOB へのアクセスをマネージド ID に許可します。

ターゲット VM または仮想マシン スケール セットでシステム割り当て ID を使用するには、managedidentity を空の JSON オブジェクトに設定します。

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : {}
}

ターゲット VM または仮想マシン スケール セットでユーザー割り当て ID を使用するには、managedidentity を、マネージド ID のクライアント ID またはオブジェクト ID で構成します。

{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "clientId": "31b403aa-c364-4240-a7ff-d85fb6cd7232" }
}
{
  "fileUris": ["https://mystorage.blob.core.windows.net/privatecontainer/script1.sh"],
  "commandToExecute": "sh script1.sh",
  "managedIdentity" : { "objectId": "12dd289c-0583-46e5-b9b4-115d5c19ef4b" }
}

Note

managedIdentity プロパティは、storageAccountName または storageAccountKey プロパティと組み合わせて使用しないでください

テンプレートのデプロイ

Azure VM 拡張機能は、Azure Resource Manager テンプレートを使用してデプロイできます。 前のセクションで詳しく説明した JSON スキーマを Azure Resource Manager テンプレートで使用すると、テンプレートのデプロイ時にカスタム スクリプト拡張機能を実行できます。 カスタム スクリプト拡張機能を含むサンプル テンプレートは、GitHub で入手できます。

{
  "name": "config-app",
  "type": "extensions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2019-03-01",
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', concat(variables('vmName'),copyindex()))]"
  ],
  "tags": {
    "displayName": "config-app"
  },
  "properties": {
    "publisher": "Microsoft.Azure.Extensions",
    "type": "CustomScript",
    "typeHandlerVersion": "2.1",
    "autoUpgradeMinorVersion": true,
    "settings": {
      },
    "protectedSettings": {
      "commandToExecute": "sh hello.sh <param2>",
      "fileUris": ["https://github.com/MyProject/Archive/hello.sh"
      ]
    }
  }
}

Note

これらのプロパティ名では大文字と小文字が区別されます。 展開の問題を回避するには、次のような名前を使います。

Azure CLI

Azure CLI を使ってカスタム スクリプト拡張機能を実行するときは、1 つまたは複数の構成ファイルを作成します。 少なくとも、構成ファイルには commandToExecute が含まれている必要があります。 az vm extension set コマンドは構成ファイルを参照します。

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVM --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings ./script-config.json

あるいは、コマンドで JSON 形式の文字列として設定を指定することもできます。 この方法により構成を実行中に指定することができ、個別の構成ファイルが不要になります。

az vm extension set \
  --resource-group exttest \
  --vm-name exttest \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --protected-settings '{"fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],"commandToExecute": "./config-music.sh"}'

例: スクリプト ファイルのあるパブリック構成

この例では、次の script-config.json という名前のスクリプト ファイルを使用します。

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
  "commandToExecute": "./config-music.sh"
}
  1. お好みのテキスト エディターを使用するか、次の CLI コマンドを使用して、スクリプト ファイルを作成します。

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"],
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  2. 次のコマンドを実行します。

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json
    

例: スクリプト ファイルのないパブリック構成

この例では、次の JSON 形式のコンテンツを使用します。

{
  "commandToExecute": "apt-get -y update && apt-get install -y apache2"
}

次のコマンドを実行します。

az vm extension set \
  --resource-group tim0329vmRG \
  --vm-name tim0329vm --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute": "apt-get -y update && apt-get install -y apache2"}'

例: パブリックおよび保護された構成ファイル

スクリプト ファイルの URI を指定するために、パブリック構成ファイルを使います。

{
  "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
}

実行するコマンドを指定するために、保護された構成ファイルを使います。

{
  "commandToExecute": "./config-music.sh"
}
  1. お好みのテキスト エディターを使用するか、次の CLI コマンドを使用して、パブリック構成ファイルを作成します。

    cat <<EOF > script-config.json
    {
      "fileUris": ["https://raw.githubusercontent.com/Microsoft/dotnet-core-sample-templates/master/dotnet-core-music-linux/scripts/config-music.sh"]
    }
    EOF
    
  2. お好みのテキスト エディターを使用するか、次の CLI コマンドを使用して、保護された構成ファイルを作成します。

    cat <<EOF > protected-config.json
    {
      "commandToExecute": "./config-music.sh"
    }
    EOF
    
  3. 次のコマンドを実行します。

    az vm extension set \
      --resource-group myResourceGroup \
      --vm-name myVM \
      --name customScript \
      --publisher Microsoft.Azure.Extensions \
      --settings ./script-config.json \
      --protected-settings ./protected-config.json
    

Virtual Machine Scale Sets

Azure portal からカスタム スクリプト拡張機能をデプロイする場合、ストレージ アカウント内のスクリプトにアクセスするための SAS トークンの有効期限を制御することはできません。 初期デプロイは機能しますが、ストレージ アカウントの SAS トークンの有効期限が切れると、カスタム スクリプト拡張機能がストレージ アカウントにアクセスできなくなるため、後続のスケーリング操作は失敗します。

仮想マシン スケール セットにカスタム スクリプト拡張機能をデプロイする場合は、PowerShellAzure CLI、または Azure Resource Manager テンプレートを使用することをお勧めします。 この方法で、マネージド ID を使用するか、必要に応じてストレージ アカウント内のスクリプトにアクセスするための SAS トークンの有効期限を直接制御するかを選択できます。

トラブルシューティング

カスタム スクリプト拡張機能を実行すると、スクリプトが次の例のようなディレクトリに作成されるかダウンロードされます。 コマンドの出力も、このディレクトリの stdout および stderr ファイルに保存されます。

sudo ls -l /var/lib/waagent/custom-script/download/0/

トラブルシューティングする場合は、まず次のように Linux エージェント ログをチェックして、拡張機能が実行されたことを確認します。

sudo cat /var/log/waagent.log

拡張機能が実行されたことを確認します。 これは、次のように表示されます。

2018/04/26 17:47:22.110231 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] [Enable] current handler state is: notinstalled
2018/04/26 17:47:22.306407 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Download, message=Download succeeded, duration=167
2018/04/26 17:47:22.339958 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Initialize extension directory
2018/04/26 17:47:22.368293 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Update settings file: 0.settings
2018/04/26 17:47:22.394482 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Install extension [bin/custom-script-shim install]
2018/04/26 17:47:23.432774 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Install, message=Launch command succeeded: bin/custom-script-shim install, duration=1007
2018/04/26 17:47:23.476151 INFO [Microsoft.Azure.Extensions.customScript-2.0.6] Enable extension [bin/custom-script-shim enable]
2018/04/26 17:47:24.516444 INFO Event: name=Microsoft.Azure.Extensions.customScript, op=Enable, message=Launch command succeeded: bin/custom-sc

前の出力は、次のような内容を表します。

  • Enable は、コマンドの実行が開始されたときです。
  • Download は、fileUris に指定されたスクリプト ファイルではなく、Azure からカスタム スクリプト拡張機能パッケージをダウンロードすることに関連します。

Azure スクリプト拡張機能が生成するログも、ここにあります。

sudo cat /var/log/azure/custom-script/handler.log

個々の実行を確認します。 これは、次のように表示されます。

time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=start
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=pre-check
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="comparing seqnum" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="seqnum saved" path=mrseq
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="reading configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="read configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating json schema"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="json schema valid"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsing configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="parsed configuration json"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validating configuration logically"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="validated configuration"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="creating output directory" path=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="created output directory"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 files=1
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download start"
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 file=0 event="download complete" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executing protected commandToExecute" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event="executed command" output=/var/lib/waagent/custom-script/download/0
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=enabled
time=2018-04-26T17:47:23Z version=v2.0.6/git@1008306-clean operation=enable seq=0 event=end

ここで、

  • このログを開始する enable コマンド。
  • 拡張機能に渡される設定。
  • ファイルをダウンロードする拡張機能と、その動作の結果。
  • コマンドの実行とその結果。

また、Azure CLI を使用して commandToExecute として渡された実引数など、カスタム スクリプト拡張機能の実行状態を取得することもできます。

az vm extension list -g myResourceGroup --vm-name myVM

出力は次のテキストのようになります。

[
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/customscript",
    "resourceGroup": "rgname",
    "settings": {
      "commandToExecute": "sh script.sh > ",
      "fileUris": [
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh",
        "https://catalogartifact.azureedge.net/publicartifacts/scripts/script.sh"
      ]
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "2.0",
    "virtualMachineExtensionType": "CustomScript"
  },
  {
    "autoUpgradeMinorVersion": true,
    "forceUpdateTag": null,
    "id": "/subscriptions/subscriptionid/resourceGroups/rgname/providers/Microsoft.Compute/virtualMachines/vmname/extensions/OmsAgentForLinux",
    "instanceView": null,
    "location": "eastus",
    "name": "OmsAgentForLinux",
    "protectedSettings": null,
    "provisioningState": "Succeeded",
    "publisher": "Microsoft.EnterpriseCloud.Monitoring",
    "resourceGroup": "rgname",
    "settings": {
      "workspaceId": "workspaceid"
    },
    "tags": null,
    "type": "Microsoft.Compute/virtualMachines/extensions",
    "typeHandlerVersion": "1.0",
    "virtualMachineExtensionType": "OmsAgentForLinux"
  }
]

Azure CLI 構文の問題

Azure CLI は、いくつかのシェル環境で実行できますが、形式には若干の差異があります。 Azure CLI コマンドで予期しない結果が発生した場合は、「Azure CLI を正しく使用する方法」を参照してください。

次のステップ

コード、現在の問題およびバージョンについては、custom-script-extension-linux を参照してください。