DevTest Labs 仮想マシンでの成果物の適用に関する問題のトラブルシューティング

この記事では、Azure DevTest Labs 仮想マシン (VM) での成果物に関するエラーについて、考えられる原因とトラブルシューティングの手順を説明します。

成果物とは、VM の作成時または作成後にラボ VM にインストールできるツール、アクション、またはソフトウェアです。 ラボの所有者は、必須の成果物を事前に選択して、作成時にすべてのラボ VM に適用できます。また、ラボのユーザーは、自分が所有している VM に成果物を適用できます。

成果物が正常にインストールまたは実行されない場合、いくつかの原因が考えられます。 成果物が応答を停止しているように見える場合は、最初に、スタックしている場所を特定してみてください。 成果物のインストールは、初期要求中にブロックされたり、要求の実行中に失敗したりする可能性があります。

Azure portal から、または成果物が失敗した VM から、成果物の失敗をトラブルシューティングできます。

Azure portal から成果物の失敗のトラブルシューティングを行う

VM に成果物を適用できない場合は、まず Azure portal で次のアイテムを調べます。

  • VM が実行されていることを確認します。
  • ラボ VM の [成果物] ページに移動し、VM が成果物を適用できる状態であることを確認します。 成果物の適用機能を使用できない場合は、ページの上部にメッセージが表示されます。

PowerShell コマンドを使用する

Azure PowerShell を使って、VM が成果物を適用できるかどうかを確認することもできます。 canApplyArtifacts フラグを調べます。これは、GET 操作で展開すると返されます。 次に例を示します。

Select-AzSubscription -SubscriptionId $SubscriptionId | Out-Null
$vm = Get-AzResource `
        -Name "$LabName/$VmName" `
        -ResourceGroupName $LabRgName `
        -ResourceType 'microsoft.devtestlab/labs/virtualmachines' `
        -ApiVersion '2018-10-15-preview' `
        -ODataQuery '$expand=Properties($expand=ComputeVm)'
$vm.Properties.canApplyArtifacts

失敗した成果物を調査する

成果物は、応答を停止し、最終的に失敗として表示される可能性があります。 失敗した成果物を調査するには:

  1. ラボの [概要] ページで、[自分の仮想マシン] の下の一覧から、調査する成果物を含む VM を選びます。

  2. VM の [概要] ページで、左側のナビゲーションの [成果物] を選びます。 [成果物] ページに、VM に関連付けられている成果物とその状態の一覧が表示されます。

    成果物の一覧とその状態を示すスクリーンショット。

  3. 状態が [失敗] と表示されている成果物を選びます。 成果物が開かれ、成果物の失敗に関する詳細が含まれる拡張メッセージが表示されます。

    失敗した成果物のエラー メッセージのスクリーンショット。

アクティビティ ログを調べる

成果物をインストールするため、DevTest Labs によって、カスタム スクリプト拡張機能 (CSE) の使用を要求する Azure Resource Manager (ARM) テンプレートが作成されてデプロイされます。 このレベルでのエラーは、サブスクリプションおよび VM のリソース グループのアクティビティ ログで示されます。

成果物のインストールが失敗した場合は、アクティビティ ログで、成果物を直接適用した場合は [仮想マシン拡張機能の作成または更新] というエントリ、成果物が VM 作成の一環として適用された場合は [仮想マシンの作成または更新] というエントリを調べます。 これらのエントリでエラーを探します。 場合によっては、エントリを展開してエラーを確認する必要があります。

失敗したエントリを選んで、エラーの詳細を表示します。 エラーのページで、[JSON] を選んで JSON ペイロードの内容を確認します。 JSON ドキュメントの最後にエラーが表示されます。

プライベート成果物リポジトリとラボ ストレージ アカウントを調べる

DevTest Labs によって成果物が適用されるとき、接続されたリポジトリから成果物の構成とファイルが読み取られます。 既定では、DevTest Labs は DevTest Labs のパブリック成果物リポジトリにアクセスできます。 また、ラボをプライベート リポジトリに接続して、カスタム成果物にアクセスすることもできます。 カスタム成果物のインストールが失敗する場合は、プライベート リポジトリの個人用アクセス トークン (PAT) の有効期限が切れていないことを確認してください。 PAT の有効期限が切れると、成果物の一覧は表示されず、そのリポジトリの成果物を参照するスクリプトは失敗します。

構成によっては、ラボの VM が成果物リポジトリに直接アクセスできない場合があります。 DevTest Labs では、ラボが最初に初期化されたときに作成されたラボ ストレージ アカウントに成果物がキャッシュされます。 このストレージ アカウントへのアクセスがブロックされた場合 (VM から Azure Storage サービスへのトラフィックがブロックされたときなど)、次のようなエラーが表示されることがあります。

CSE Error: Failed to download all specified files. Exiting. Exception: Microsoft.WindowsAzure.Storage.StorageException: The remote server returned an error: (403) Forbidden. ---> System.Net.WebException: The remote server returned an error: (403) Forbidden.

このエラーは、VM のリソース グループのアクティビティ ログに表示されます。

Azure ストレージ アカウントへの接続の問題をトラブルシューティングするには:

  • 追加されたネットワーク セキュリティ グループ (NSG) を調べます。 すべての仮想ネットワークで NSG を自動的に構成するサブスクリプション ポリシーが追加された場合、ラボ VM の作成に使用される仮想ネットワークに影響します。

  • NSG 規則を調べます。 IP フロー検証を使って、NSG 規則により VM との間のトラフィックがブロックされているかどうかを判断します。 有効なセキュリティ グループ規則を調べて、インバウンドの許可 NSG 規則が存在することを確認することもできます。 詳細については、「有効なセキュリティ規則を使用した VM トラフィック フローのトラブルシューティング」を参照してください。

  • ラボの既定のストレージ アカウントを調べます。 既定のストレージ アカウントは、ラボの作成時に作成された最初のストレージ アカウントです。 その名前は、通常、文字 "a" で始まり、複数桁の数字で終わります (例: a<labname>#)。

    1. ラボのリソース グループに移動します。
    2. 名前が規則に一致するストレージ アカウントの種類のリソースを探します。
    3. ストレージアカウントの [概要] ページで、左側のナビゲーションから [ネットワーク] を選択します。
    4. [ファイアウォールと仮想ネットワーク] タブで、[パブリック ネットワーク アクセス][すべてのネットワークから有効] に設定されていることを確認します。 または、[選択した仮想ネットワークと IP アドレスから有効化] オプションが選ばれている場合は、VM の作成に使われたラボの仮想ネットワークが一覧に追加されていることを確認します。

詳細なトラブルシューティングについては、「Azure Storage ファイアウォールおよび仮想ネットワークを構成する」をご覧ください。

ラボの VM から成果物の失敗のトラブルシューティングを行う

成果物が失敗したラボの VM に接続し、そこで問題を調べることができます。

カスタム スクリプト拡張機能のログ ファイルを調べる

  1. ラボ VM で C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\*1.10.12*\Status\ に移動します。*1.10.12* は CSE のバージョン番号です。

    ラボ VM の状態フォルダーのスクリーンショット。

  2. STATUS ファイルを開いて調査し、エラーを表示します。

Linux VM でログ ファイルを見つける方法については、「Linux 仮想マシンで Azure カスタム スクリプト拡張機能 v2 を使用する」をご覧ください。

VM エージェントを調べる

Azure 仮想マシン エージェント (VM エージェント) がインストールされ、準備が済んでいることを確認します。

VM が最初に起動されたとき、または CSE が最初にインストールされて、成果物を適用する要求を処理するときに、VM で VM エージェントのアップグレードや、VM エージェントの初期化の待機が、必要になることがあります。 VM エージェントは、初期化に長い時間がかかるサービスに依存する場合があります。 トラブルシューティングについて詳しくは、「Azure 仮想マシンエージェントの概要」をご覧ください。

VM エージェントが原因で成果物が応答を停止したように見えるかどうかを確認するには:

  1. ラボ VM で、C:\WindowsAzure\logs に移動します。

  2. WaAppAgent.exe ファイルを開きます。

  3. 成果物の問題が発生した時刻の前後で、VM エージェントの開始、初期化の完了、ハートビートの最初の送信を示すエントリを探します。

    [00000006] [11/14/2019 05:52:13.44] [INFO]  WindowsAzureGuestAgent starting. Version 2.7.41491.949
    ...
    [00000006] [11/14/2019 05:52:31.77] [WARN]  Waiting for OOBE to Complete ...
    ...
    [00000006] [11/14/2019 06:02:30.43] [WARN]  Waiting for OOBE to Complete ...
    [00000006] [11/14/2019 06:02:33.43] [INFO]  StateExecutor initialization completed.
    [00000020] [11/14/2019 06:02:33.43] [HEART] WindowsAzureGuestAgent Heartbeat.
    

前の例では、VM エージェントの開始に 10 分 20 秒かかりました。 その原因は、OOBE サービスの開始に時間がかかることでした。

Azure 拡張機能の一般情報については、「Azure 仮想マシンの拡張機能と特徴」をご覧ください。

スクリプトの問題を調べる

成果物のインストール スクリプトの作成方法のために、成果物のインストールが失敗する可能性があります。 次に例を示します。

  • スクリプトに必須のパラメーターがありますが、ユーザーが空白のままにすることが許可されているため、または artifactfile.json 定義ファイルに既定値がないために、値が渡されません。 ユーザーの入力を待機しているため、スクリプトが応答を停止します。

  • スクリプトで、実行の一部としてユーザー入力が必要です。 スクリプトは、ユーザーの介入を必要とせずに、サイレントで動作する必要があります。

スクリプトが原因で、成果物が応答を停止しているように見えるかどうかをトラブルシューティングするには:

  1. スクリプトを VM にコピーするか、VM の成果物スクリプトのダウンロード場所 C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads で見つけます。
  2. 管理コマンド プロンプトを使って、VM でスクリプトを実行し、問題が発生したのと同じパラメーター値を指定します。
  3. スクリプトが望ましくない動作を示すかどうかを確認します。 その場合は、更新を要求するか、スクリプトを修正します。

ヒント

DevTest Labs のパブリック リポジトリでホストされている成果物について、スクリプトの修正提案を送信できます。 詳しくは、README ドキュメントの「Contributions (投稿)」セクションをご覧ください。

注意

カスタム成果物には適切な構造が必要です。 アーティファクトを正しく構築する方法については、カスタム アーティファクトの作成に関するページを参照してください。 適切な構造の成果物の例については、「Test parameter types (パラメーターの型のテスト)」成果物を参照してください。

成果物スクリプトの作成と修正について詳しくは、作成に関するページをご覧ください。

次の手順

さらにヘルプが必要な場合は、次のいずれかのサポート チャネルを試してください。

  • MSDN の Azure と Stack Overflow のフォーラムで、Azure DevTest Labs のエキスパートに問い合わせます。
  • Azure フォーラムを通じて Azure エキスパートから回答を得ることができます。
  • @AzureSupport (カスタマー エクスペリエンスを向上させるための Microsoft Azure の公式アカウント) に連絡する。 Azure サポートにより、Azure コミュニティの回答、サポート、エキスパートと結び付けられます。
  • Azure サポート サイトにアクセスし、[サポート チケットを送信する] を選んで、Azure サポート インシデントを提出します。