VM アプリケーションは、Azure Compute Gallery のリソースの種類であり、仮想マシンとスケール セット全体でアプリケーションを管理およびデプロイするための最新の柔軟なアプローチを提供します。 ベース VM イメージからアプリケーションのインストールを切り離すことで、更新を効率化し、イメージメンテナンスのオーバーヘッドを削減し、デプロイ サイクルを高速化できます。 この方法により、アプリケーションの変更ごとに VM イメージを再構築して再発行する必要がなくなり、反復が高速化され、運用の機敏性が向上します。 VM アプリケーションは、AI、高スケール、低待機時間、マイクロサービス、セキュリティで保護された準拠ワークロードを Azure VM にデプロイするのに最適です。
リソース | 説明 |
---|---|
Azure コンピューティング ギャラリー | ギャラリーは、アプリケーション パッケージを管理および共有するためのリポジトリです。 ユーザーは、ギャラリー リソースを共有でき、すべての子リソースは自動的に共有されます。 ギャラリー名は、サブスクリプションごとに一意である必要があります。 たとえば、1 つのギャラリーにすべての OS イメージを格納し、別のギャラリーにすべての VM アプリケーションを格納することができます。 |
VM アプリケーション | VM アプリケーションの定義。 これは、その下にあるすべてのバージョンの共通メタデータを格納する論理リソースです。 たとえば、Apache Tomcat 用の 1 つのアプリケーション定義内に複数のバージョンを含めることができます。 |
VM アプリケーションのバージョン | デプロイ可能なリソース。アプリケーション パッケージとバージョン固有の構成を保持します。 VM アプリケーションのバージョンを、対象の VM インフラストラクチャに近いターゲット リージョンにグローバルにレプリケートできます。 VM アプリケーションのバージョンは、そのリージョン内の VM にデプロイする前に、リージョンにレプリケートする必要があります。 |
ストレージ アカウント | アプリケーション パッケージは、まずストレージ アカウントにアップロードされます。 Azure Compute Gallery は、SAS URL を使用してこのストレージ アカウントからアプリケーション パッケージをダウンロードし、VM アプリケーション バージョン内に格納します。 Azure コンピューティング ギャラリーでは、VM アプリケーションのバージョン定義に従って、リージョン間およびリージョン レプリカ間でこのパッケージもレプリケートされます。 ストレージ アカウント内のアプリケーション パッケージは、AZURE コンピューティング ギャラリーで VM アプリケーションのバージョンが作成された後に削除できます。 |
主な利点:
-
一元化された柔軟なアプリケーション管理:
- 1 回だけパッケージ化、任意の場所にデプロイする: アプリケーション (Windows/Linux)、スクリプト、またはファイルを VM アプリケーションとしてパッケージ化します。 次に、Azure VM または仮想マシン スケール セット全体にデプロイし、Azure コンピューティング ギャラリーで一元的に管理します。 アプリケーションまたはファイルは、.zip、.msi、.exe、.tar.gz、.deb、.rpm、.shなどの形式にすることができます。
- バージョン管理: 各アプリケーションの複数のバージョンを維持して、最新バージョンまたは特定のバージョンをデプロイします。
-
シームレスな共有とアクセス制御
- Tenant-Wide 共有: チーム内または組織全体 (テナント) でアプリケーションを共有します。
- 統合 RBAC: Azure Role-Based アクセス制御 (RBAC) を使用して、発行とデプロイのアクセスを制御します。
-
信頼性の高いカスタマイズ可能なデプロイ
- 個々のアプリケーション制御: アプリケーションを個別にインストール、更新、または削除します。VM イメージを再構築する必要はありません。
- カスタマイズ可能な操作: 再起動処理を含む、アプリケーションのインストール、更新、および削除操作をカスタマイズします。
- Built-In エラー処理: VM アプリケーションの障害を VM 障害に接続して、回復性のあるデプロイを確保します。
-
スケーラブルで Low-Latency な配布
- グローバルレプリケーションと Intra-Region レプリケーション: リージョン間およびリージョン内でアプリケーションを自動的にレプリケートして待機時間を短縮し、回復性を向上させます。AzCopy や手動転送は必要ありません。
- High-Scale シナリオ向けに最適化: 大規模なデプロイ中でも作成の待機時間を短縮します。
-
設計によるセキュリティ保護と準拠
- ポリシー主導の適用: Azure Policy を使用して、フリート全体にアプリケーションのプレゼンスと構成を適用します。
- セキュリティで保護された展開: インターネット ベースのダウンロードや複雑なプライベート リンクのセットアップは避けてください。これは、ロックダウンされた環境やセキュリティで保護された環境には適していません。
-
広範なプラットフォームのサポート
- VM とスケール セット: 完全にサポートされている個々の VM、柔軟なスケール セット、または均一なスケール セットにデプロイします。
- ブロック BLOB のサポート: チャンクされたアップロードとバックグラウンド ストリーミング用の Azure ブロック BLOB を使用して、大規模なアプリケーション パッケージ (最大 2 GB) を効率的に処理します。
VM アプリケーションの作成と VM アプリケーションのバージョン リソース
VM アプリケーションは、Azure コンピューティング ギャラリーに格納されます。 VM アプリケーション リソースでは、VM アプリケーションについて次のことを定義します。
プロパティ | 説明 | 制限事項 |
---|---|---|
名前 | アプリケーションの名前 | 最大長は 117 文字です。 使用できる文字は、大文字または小文字、数字、ハイフン (-)、ピリオド (.)、アンダースコア (_) です。 ピリオド (.) で終わる名前は使用できません。 |
supportedOSType | サポートされている OS の種類を定義する | "Linux" または "Windows" |
endOfLifeDate | アプリケーションの将来の有効期限。 日付は参照専用であり、適用されません。 | |
説明 | Optional. VM アプリケーションの説明 | |
eula | Optional. エンド ユーザー 使用許諾契約書 (EULA) への参照 | |
privacyStatementUri | Optional. アプリケーションのプライバシーに関する声明への参照。 | |
releaseNoteUri | Optional. アプリケーションのリリース ノートへの参照。 |
VM アプリケーションのバージョンは、VM アプリケーション リソース内のデプロイ可能なリソースです。 バージョンは、次のプロパティで定義されます。
プロパティ | 説明 | 制限事項 |
---|---|---|
位置 | VM アプリケーションバージョンのソースの場所。 | 有効な Azure リージョン |
source/mediaLink | ストレージ アカウントのアプリケーション パッケージ ファイルへのリンク | 有効なストレージ URL と既存のストレージ URL |
source/defaultConfigurationLink | Optional. VM アプリケーションの構成ファイルへのリンク。 デプロイ時にオーバーライドできます。 | 有効なストレージ URL と既存のストレージ URL |
manageActions/install | スクリプトを文字列としてインストールしてアプリケーションを適切にインストールする | 指定された OS の有効なコマンド (文字列形式)。 |
manageActions/remove | スクリプトを文字列として削除してアプリケーションを適切に削除する | 指定された OS の有効なコマンド (文字列形式) |
manageActions/update | Optional. スクリプトを文字列として更新して、VM アプリケーションを新しいバージョンに適切に更新します。 | 指定された OS の有効なコマンド (文字列形式) |
targetRegions/name | レプリケート先のターゲット リージョンの名前。 リージョンの障害に対する回復性を向上させ、待機時間を作成します。 | 有効な Azure リージョン |
targetRegions/regionalReplicaCount | Optional. リージョンに作成するレプリカの数。 読み込み処理を改善し、待機時間を作成します。 既定値は 1 です。 | 1 ~ 3 の整数 (両端を含む) |
replicaCount | Optional. 各リージョンのレプリカの数を定義します。 regionalReplicaCount が定義されていない場合に有効になります。 リージョンまたはクラスターの障害に対する回復性を向上させ、高スケール時の待機時間を作成します。 | 1 ~ 3 の整数です。 |
endOfLifeDate | Optional. アプリケーション バージョンの将来の有効期限。 このプロパティは顧客参照専用であり、適用されません。 | 有効な将来の日付 |
excludeFromLatest | applicationProfile で 'latest' キーワードが使用されている場合、アプリケーションの最新バージョンとして使用されるバージョンを除外します。 | |
storageAccountType | Optional. アプリケーション パッケージを格納するために各リージョンで使用するストレージ アカウントの種類。 既定値は Standard_LRS です。 | このプロパティは更新できません。 |
safetyProfile/allowDeletionOfReplicatedLocations | Optional. レプリケートされたリージョンからこのギャラリー イメージ バージョンを削除できるかどうかを示します。 | |
settings/packageFileName | パッケージが VM にダウンロードされるときに使用するパッケージ ファイル名。 | これは 4,096 文字に制限されています。 |
settings/configFileName | 構成を VM にダウンロードするときに使用する構成ファイル名。 | これは 4,096 文字に制限されています。 |
settings/scriptBehaviorAfterReboot | Optional. VM の再起動後にギャラリー アプリケーションをインストール、更新、または削除するために実行するアクション。 |
{
"$schema": "https://schema.management.azure.com/schemas/2020-06-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"galleryName": {
"type": "string"
},
"applicationName": {
"type": "string"
},
"versionName": {
"type": "string",
"metadata": {
"description": "Must follow the format: major.minor.patch (Example: 1.0.0)"
}
},
"___location": {
"type": "string",
"defaultValue": "West US"
},
"supportedOSType": {
"type": "string",
"allowedValues": ["Windows", "Linux"]
},
"endOfLifeDate": {
"type": "string",
"metadata": {
"description": "Optional. This property is for information only and doesn't block app deployment."
}
},
"description": {
"type": "string",
"defaultValue": "Description of the application"
},
"eula": {
"type": "string",
"defaultValue": ""
},
"privacyStatementUri": {
"type": "string",
"defaultValue": ""
},
"releaseNoteUri": {
"type": "string",
"defaultValue": ""
},
"mediaLink": {
"type": "string"
},
"configLink": {
"type": "string"
},
"appConfigFileName": {
"type": "string"
},
"appPackageFileName": {
"type": "string"
},
"replicaRegion1": {
"type": "string",
"defaultValue": "East US"
},
"replicaRegion2": {
"type": "string",
"defaultValue": "South Central US"
},
"installScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to install the application. Example: echo 'Installing application...'"
}
},
"updateScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to update the application. Example: echo 'Updating application...'"
}
},
"removeScript": {
"type": "string",
"metadata": {
"description": "Optional. Script to run to delete the application. Example: echo 'Deleting application...'"
}
},
"storageAccountType": {
"type": "string",
"allowedValues": ["PremiumV2_LRS", "Premium_LRS", "Standard_LRS", "Standard_ZRS"],
"defaultValue": "Standard_LRS"
}
},
"resources": [
{
"type": "Microsoft.Compute/galleries",
"apiVersion": "2024-03-03",
"name": "[parameters('galleryName')]",
"___location": "[parameters('___location')]",
"properties": {
"identifier": {}
}
},
{
"type": "Microsoft.Compute/galleries/applications",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}', parameters('galleryName'), parameters('applicationName'))]",
"___location": "[parameters('___location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries', parameters('galleryName'))]"
],
"properties": {
"supportedOSType": "[parameters('supportedOSType')]",
"endOfLifeDate": "[parameters('endOfLifeDate')]",
"description": "[parameters('description')]",
"eula": "[if(equals(parameters('eula'), ''), json('null'), parameters('eula'))]",
"privacyStatementUri": "[if(equals(parameters('privacyStatementUri'), ''), json('null'), parameters('privacyStatementUri'))]",
"releaseNoteUri": "[if(equals(parameters('releaseNoteUri'), ''), json('null'), parameters('releaseNoteUri'))]"
}
},
{
"type": "Microsoft.Compute/galleries/applications/versions",
"apiVersion": "2024-03-03",
"name": "[format('{0}/{1}/{2}', parameters('galleryName'), parameters('applicationName'), parameters('versionName'))]",
"___location": "[parameters('___location')]",
"dependsOn": [
"[resourceId('Microsoft.Compute/galleries/applications', parameters('galleryName'), parameters('applicationName'))]"
],
"properties": {
"publishingProfile": {
"source": {
"mediaLink": "[parameters('mediaLink')]",
"defaultConfigurationLink": "[parameters('configLink')]"
},
"manageActions": {
"install": "[parameters('installScript')]",
"remove": "[parameters('removeScript')]",
"update": "[parameters('updateScript')]"
},
"settings": {
"scriptBehaviorAfterReboot": "Rerun",
"configFileName": "[parameters('appConfigFileName')]",
"packageFileName": "[parameters('appPackageFileName')]"
},
"targetRegions": [
{
"name": "[parameters('___location')]",
"regionalReplicaCount": 3,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion1')]",
"regionalReplicaCount": 1,
"storageAccountType": "[parameters('storageAccountType')]"
},
{
"name": "[parameters('replicaRegion2')]"
},
],
"excludeFromLatest": false,
"replicaCount": 2,
"storageAccountType": "[parameters('storageAccountType')]"
},
"safetyProfile": {
"allowDeletionOfReplicatedLocations": true
},
"endOfLifeDate": "[parameters('endOfLifeDate')]"
}
}
]
}
Azure VM アプリケーションをデプロイする
VM アプリケーションのバージョンが Azure Compute Gallery に発行されたら、Azure Virtual Machines (VM) と Azure Virtual Machine Scale Sets 全体にバージョンをデプロイできます。
Azure VM と仮想マシン スケール セットの applicationProfile
では、次の定義が定義されています。
プロパティ | 説明 | 制限事項 |
---|---|---|
galleryApplications | デプロイするギャラリー アプリケーション | |
パッケージリファレンスID | デプロイするアプリケーションのバージョンへの参照 | 有効なアプリケーション バージョン リファレンス |
configurationリファレンス | Optional. このデプロイの構成を含むストレージ BLOB の完全な URL。 これにより、前に defaultConfiguration に指定されたすべての値がオーバーライドされます。 | 有効なストレージ BLOB リファレンス |
順序 | Optional. アプリケーションをデプロイする順序 | 有効な整数 |
障害を展開の失敗として扱う | Optional. 障害処理の VM デプロイ エラーとしてアプリケーションの失敗をマークする | True または False |
order フィールドは、アプリケーション間の依存関係を指定するために使用できます。 順序の規則は次のとおりです。
ケース | インストールの意味 | 失敗の意味 |
---|---|---|
順序が指定されていない | 順序指定されていないアプリケーションは、順序付けされたアプリケーションの後にインストールされます。 順序指定されていないアプリケーション間でインストール順序が保証される保証はありません。 | 他のアプリケーションのインストール エラー (順序付けまたは順序なし) は、順序付けされていないアプリケーションのインストールには影響しません。 |
重複する注文値 | アプリケーションは、同じ順序で他のアプリケーションと比較して任意の順序でインストールされます。 同じ注文のすべてのアプリケーションは、注文が低いアプリケーションの後、および注文が高いアプリケーションの前にインストールされます。 | 順序の低い以前のアプリケーションのインストールに失敗した場合、この順序のアプリケーションはインストールされません。 この順序のアプリケーションがインストールに失敗した場合、上位の順序のアプリケーションはインストールされません。 |
注文の増加 | アプリケーションは、注文が少ないものの後に、注文が多いアプリケーションの前にインストールされます。 | 順序の低い以前のアプリケーションのインストールに失敗した場合、このアプリケーションはインストールされません。 このアプリケーションのインストールに失敗した場合、上位の順序のアプリケーションはインストールされません。 |
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vmssName": {
"type": "string"
},
"___location": {
"type": "string"
},
"subscriptionId": {
"type": "string"
},
"resourceGroupName": {
"type": "string"
},
"galleryName": {
"type": "string"
},
"applicationName1": {
"type": "string"
},
"applicationVersion1": {
"type": "string",
"defaultValue": "latest"
},
"configurationReference1": {
"type": "string",
"metadata": {
"description": "Optional path to configuration file from Storage Account. Overrides default configuration file."
}
},
"applicationName2": {
"type": "string"
},
"applicationVersion2": {
"type": "string",
"defaultValue": "latest"
}
},
"variables": {
"packageReferenceId1": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName1'), parameters('applicationVersion1'))]",
"packageReferenceId2": "[format('/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Compute/galleries/{2}/applications/{3}/versions/{4}', parameters('subscriptionId'), parameters('resourceGroupName'), parameters('galleryName'), parameters('applicationName2'), parameters('applicationVersion2'))]"
},
"resources": [
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"apiVersion": "2024-03-03",
"name": "[parameters('vmssName')]",
"___location": "[parameters('___location')]",
"properties": {
"virtualMachineProfile": {
"applicationProfile": {
"galleryApplications": [
{
"order": 1,
"packageReferenceId": "[variables('packageReferenceId1')]",
"configurationReference": "[parameters('configurationReference1')]",
"treatFailureAsDeploymentFailure": true
},
{
"order": 2,
"packageReferenceId": "[variables('packageReferenceId2')]",
"treatFailureAsDeploymentFailure": false
}
]
}
}
}
}
]
}
コスト
VM アプリケーション パッケージの使用に追加料金はかかりませんが、次のリソースに対しては課金されます:
- 各パッケージとレプリカを格納するためのストレージ コスト。
- ソース リージョンからレプリケート先のリージョンに最初のイメージ バージョンをレプリケートするための、ネットワーク エグレスの料金。 後続のレプリカはリージョン内で処理されるので、追加料金は発生しません。
ネットワーク エグレスの詳細については、「帯域幅の料金詳細」を参照してください。
技術的な詳細
考慮事項と現在の制限
リージョンあたり最大 10 個のレプリカ: VM アプリケーション バージョンを作成する場合、ページ BLOB とブロック BLOB の両方のリージョンあたりのレプリカの最大数は 10 です。
リージョンあたり最大 300 バージョン: VM アプリケーション バージョンを作成する場合、リージョンごとに最大 300 のアプリケーション バージョンを使用できます。
パブリック アクセスを持つストレージと読み取り特権を持つ SAS URI: 他の制限レベルではデプロイが失敗するため、ストレージ アカウントはパブリック レベルのアクセス権を持ち、読み取り特権で SAS URI を使用する必要があります。 SAS トークンは、匿名アクセスを許可してストレージ アカウントに成果物を発行することでバイパスできます。
失敗したインストールの手動再試行: 現在、失敗したインストールを再試行する唯一の方法は、プロファイルからアプリケーションを削除してから追加することです。
VM あたり最大 25 個のアプリケーション: 1 つの仮想マシンに最大 25 個のアプリケーションをデプロイできます。
2 GB のアプリケーション サイズ: アプリケーション バージョン
mediaLink
の最大ファイル サイズは 2 GB です。defaultConfigurationLink
の最大ファイル サイズは 1 GB です。VM エージェントが必要: VM エージェントが VM 上に存在し、目標の状態を受け取ることができる必要があります。
VM ごとのアプリケーションの単一バージョン: 特定のアプリケーションの 1 つのバージョンのみを VM にデプロイできます。
現在サポートされていない移動操作: リソース グループ間での関連付けられた VM アプリケーションを持つ VM の移動は現在サポートされていません。
注
Azure Compute Gallery と VM アプリケーションについては、レプリケーション後に Storage SAS を削除できます。 ただし、後続の更新操作には有効な SAS が必要です。
VM 内のディレクトリをダウンロードする
アプリケーション パッケージと構成ファイルのダウンロード場所は次のとおりです。
- Linux:
/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<application name>/<application version>
- ウィンドウズ:
C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<application name>\<application version>
インストール コマンド、更新コマンド、削除コマンドは、アプリケーション パッケージと構成ファイルが現在のディレクトリにあると想定して記述する必要があります。
ファイルの名前付け
アプリケーション ファイルが VM にダウンロードされると、ファイルの名前は "MyVmApp" に変更され、ファイル拡張子は付けなくなります (たとえば、.exe、.msi)。 VM は、ファイルの元の名前と拡張子を認識しません。
この問題を解決するための代替手段をいくつか次に示します。
スクリプトを変更して、実行前にファイル名を変更するコマンドを含めることができます。
move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S
packageFileName
(および対応する configFileName
) プロパティを使用して、ファイル名の変更を指示することもできます。 たとえば、"MyApp.exe" に設定すると、次のようにインストール スクリプトが作成されます。
MyAppe.exe /S
ヒント
BLOB の名前が 'myapp' ではなく 'myApp.exe' である場合、スクリプトは packageFileName
プロパティを設定せずに動作します。
コマンド インタープリター
既定のコマンド インタープリターは次のとおりです。
- Linux:
/bin/bash
- ウィンドウズ:
cmd.exe
Chocolatey や PowerShell のような別のインタープリターがマシンにインストールされている場合は、実行可能ファイルを呼び出してコマンドを渡すことにより、それを使用できます。 たとえば、コマンドを cmd ではなく Windows の PowerShell で実行するには、powershell.exe -Command '<powershell commmand>'
を渡します。
更新の処理方法
VM または Virtual Machine Scale Sets でアプリケーションのバージョンを更新する場合、デプロイ時に指定した更新コマンドが使用されます。 更新されたバージョンに更新コマンドがない場合は、現在のバージョンが削除され、新しいバージョンがインストールされます。
更新コマンドは、古いバージョンの VM アプリケーションから更新される可能性があることを想定して記述する必要があります。
失敗をデプロイ エラーとして扱う
VM アプリケーション拡張機能は、インストール/更新/削除中に VM アプリが失敗したかどうかに関係なく、常に 成功 を返します。 VM アプリケーション拡張機能は、拡張機能または基になるインフラストラクチャに問題がある場合にのみ、拡張機能の状態をエラーとして報告します。 この動作は、[失敗をデプロイ エラーとして扱う] フラグによってトリガーされます。これは既定では $false
に設定されており、$true
に変更できます。 障害フラグは、PowerShell または CLI で構成できます。
Linux での VM アプリケーションのパッケージ化とインストール
VM アプリケーションを作成するには、アプリケーションを適切にインストール、更新、削除するためのアプリケーション パッケージとスクリプトが必要です。
Linux 用サード パーティ製アプリケーションは、いくつかの方法でパッケージ化できます。 最も一般的ないくつかのインストール コマンドの作成を処理する方法について説明します。
.tar および .gz ファイル
これらのファイルは圧縮されたアーカイブであり、目的の場所に展開できます。 特定の場所に展開する必要がある場合に備えて、元のパッケージのインストール手順を確認します。 .tar.gz ファイルにソース コードが含まれている場合は、ソースからインストールする方法について、パッケージの手順を参照してください。
Linux マシンに golang
をインストールするインストール コマンドの例:
sudo tar -C /usr/local -xzf go_linux
削除コマンドの例:
sudo rm -rf /usr/local/go
インターネット アクセスが制限された VM に対して .deb
、.rpm
、およびその他のプラットフォーム固有のパッケージを使用してアプリケーション パッケージを作成する
プラットフォーム固有のパッケージ マネージャーごとに個別のパッケージをダウンロードできますが、通常、すべての依存関係が含まれているわけではありません。 これらのファイルについては、アプリケーション パッケージにすべての依存関係を含めるか、VM で使用可能なリポジトリを介してシステム パッケージ マネージャーが依存関係をダウンロードするように設定する必要があります。 インターネット アクセスが制限されている VM を使用している場合は、すべての依存関係を自分でパッケージ化する必要があります。
依存関係を把握するのは少し難しい作業です。 依存関係ツリー全体を表示できるサード パーティ製のツールがあります。
Ubuntu では、sudo apt show <package_name> | grep Depends
を実行して、sudo apt-get install <packge_name>
コマンドの実行時にインストールされるすべてのパッケージを表示できます。 次に、その出力を使用してすべての .deb
ファイルをダウンロードし、アプリケーション パッケージとして使用できるアーカイブを作成できます。
Ubuntu に PowerShell をインストールするための VM アプリケーション パッケージを作成するには、次の手順に従います。
- 次のコマンドを実行して、リポジトリで PowerShell をダウンロードし、新しい Ubuntu VM 上のパッケージの依存関係を識別できるようにします。
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
- [Depends] 行の出力を確認します。ここには、次のパッケージが一覧表示されています。
Depends: libc6, lib32gcc-s1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
-
sudo apt-get download <package_name>
を使用してこれらの各ファイルをダウンロードし、すべてのファイルを含む tar 圧縮アーカイブを作成します。
- Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Ubuntu 20.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- Ubuntu 22.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download lib32gcc-s1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
- この tar アーカイブがアプリケーション パッケージ ファイルになります。
- この場合のインストール コマンドは次のとおりです。
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
- 削除コマンドは次のとおりです。
sudo apt remove powershell
すべての依存関係を明示的に削除するのではなく、sudo apt autoremove
を使用してください。 依存関係が重複する他のアプリケーションがインストールされている可能性があります。その場合、明示的な削除コマンドは失敗します。
依存関係を自分で解決したくない場合に apt
でリポジトリに接続できるときは、1 つの .deb
ファイルを使用してアプリケーションをインストールし、依存関係については apt
に処理させることができます。
インストール コマンドの例:
dpkg -i <package_name> || apt --fix-broken install -y
Windows での VM アプリケーションの作成
Windows のサード パーティ製アプリケーションのほとんどは、.exe または .msi のインストーラーとして入手できます。 一部は、展開および実行 ZIP ファイルとしても入手できます。 それぞれのベスト プラクティスを見てみましょう。
.exe インストーラー
インストーラー実行可能ファイルは、通常、ユーザーが選択する必要があるユーザー インターフェイス (UI) を起動します。 インストーラーがサイレント モード パラメーターをサポートしている場合は、それをインストール文字列に含める必要があります。
また Cmd.exe は、実行可能ファイルの拡張子が .exe
であることを想定しているため、ファイルの名前を .exe
拡張子に変更する必要があります。
実行可能ファイルとして付属する myApp.exe
用の VM アプリケーション パッケージを作成する場合、VM アプリケーションは "myApp" と呼ばれるので、アプリケーション パッケージが現在のディレクトリにあると仮定してコマンドを記述します。
"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"
インストーラーの実行可能ファイルでアンインストール パラメーターがサポートされていない場合は、テスト マシンのレジストリを調べてアンインストーラーが配置されている場所を見つけることができることもあります。
レジストリで、アンインストール文字列は Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString
に格納されているため、その内容を削除コマンドとして使用します。
'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'
.msi インストーラー
.msi
インストーラーをコマンド ラインで実行するには、アプリケーションをインストールまたは削除するコマンドで msiexec
を使用する必要があります。 通常、msiexec
は独自の個別のプロセスとして実行され、cmd
はその完了を待たないため、複数の VM アプリケーションをインストールするときに問題が発生する可能性があります。
start
コマンドを msiexec
と一緒に使用すると、コマンドから制御が返される前にインストールが完了するようにすることができます。 次に例を示します。
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
削除コマンドの例:
start /wait %windir%\\system32\\msiexec.exe /x myapp /quiet /forcerestart /log myapp_uninstall.log
通常、start
コマンドはバッチ スクリプト内で呼び出されます。
/wait
パラメーターと共に使用すると、呼び出されたプロセスが終了するまで、呼び出し元のスクリプトは一時停止されます。 完了すると、バッチ スクリプトは次のように errorlevel
コマンドによって設定された start
変数を確認して終了します。
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...
ZIP 形式のファイル
.zip またはその他の ZIP 形式のファイルの場合は、アプリケーション パッケージの名前を変更して、内容を目的の場所に解凍します。
インストール コマンドの例:
rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"
削除コマンドの例:
rmdir /S /Q C:\\myapp
VM アプリケーションのトラブルシューティング
特定の VM アプリケーションが VM インスタンスに正常に追加されたかどうかを確認するには、VM アプリケーション拡張機能のメッセージを確認します。
VM 拡張機能の状態を取得する方法の詳細については、Linux 用の仮想マシン拡張機能とその機能と Windows用 の仮想マシン拡張機能とその機能に関するページを参照してください。
VM 拡張機能の状態を取得するには、Get-AzVM を使用します。
Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10
スケール セット拡張機能の状態を取得するには、Get-AzVMSS を使用します。
$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary = New-Object System.Collections.ArrayList
$result | ForEach-Object {
$res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
$resultSummary.Add($res) | Out-Null
}
$resultSummary | convertto-json -depth 5
エラー メッセージ
メッセージ | 説明 |
---|---|
Current VM Application Version {name} was deprecated at {date}. (現在の VM アプリケーション バージョン {名前} は {日付} 付けで非推奨になりました。) | 既に非推奨になっている VM アプリケーション バージョンをデプロイしようとしました。 特定のバージョンを指定する代わりに、latest を使用してください。 |
Current VM Application Version {name} supports OS {OS}, while current OSDisk's OS is {OS}. (現在の VM アプリケーション バージョン {名前} は OS {OS} をサポートしていますが、現在の OSDisk の OS は {OS} です。) | Linux アプリケーションを Windows インスタンスに (またはその逆に) デプロイしようとしました。 |
The maximum number of VM applications (max=5, current={count}) has been exceeded. (VM アプリケーションの最大数 (最大 = 5、現在 = {数}) を超えました。) Use fewer applications and retry the request. (使用するアプリケーションの数を減らしてから要求を再試行してください。) | 現時点では、VM またはスケール セットごとに 5 つの VM アプリケーションのみをサポートしています。 |
同じ packageReferenceId で複数の VM Application が指定されました。 | 同じアプリケーションが複数回指定されました。 |
Subscription not authorized to access this image. (サブスクリプションにこのイメージへのアクセスが許可されていません。) | このサブスクリプションには、このアプリケーション バージョンへのアクセス権がありません。 |
引数内のストレージ アカウントが存在しません。 | このサブスクリプションにはアプリケーションがありません。 |
プラットフォーム イメージ { イメージ} は使用できません。 Verify that all fields in the storage profile are correct. (ストレージ プロファイルのすべてのフィールドが適切なことを確認してください。) ストレージ プロファイルの詳細については、「 https://aka.ms/storageprofile」を参照してください。 | アプリケーションが存在しません。 |
The gallery image {image} isn't available in {region} region. ({リージョン} リージョンではギャラリー イメージ {イメージ} を使用できません。) Contact image owner to replicate to this region, or change your requested region. (イメージ所有者に連絡して、このリージョンにレプリケートするか、要求されたリージョンを変更するようにしてください。) | ギャラリー アプリケーション バージョンは存在しますが、このリージョンにレプリケートされていません。 |
The SAS isn't valid for source uri {uri}. (SAS がソース uri {uri} に対して無効です。) | url (mediaLink または defaultConfigurationLink) に関する情報を取得しようとしたときに、ストレージから Forbidden エラーを受け取りました。 |
ソース uri {uri} で参照されている BLOB が存在しません。 | mediaLink プロパティまたは defaultConfigurationLink プロパティに指定された BLOB が存在しません。 |
The gallery application version url {url} can't be accessed due to the following error: remote name not found. (次のエラーにより、ギャラリー アプリケーション バージョン url {url} にアクセスできません: リモート名が見つかりません。) Ensure that the blob exists and that it's either publicly accessible or is a SAS url with read privileges. (BLOB が存在し、パブリックにアクセスできること、または読み取り権限のある SAS url であることを確認してください。) | 最も可能性の高いケースは、読み取り権限のある SAS uri が指定されていないことです。 |
The gallery application version url {url} can't be accessed due to the following error: {error description}. (次のエラーにより、ギャラリー アプリケーション バージョン url {url} にアクセスできません: {エラー説明}。) Ensure that the blob exists and that it's either publicly accessible or is a SAS url with read privileges. (BLOB が存在し、パブリックにアクセスできること、または読み取り権限のある SAS url であることを確認してください。) | 指定されたストレージ BLOB に問題がありました。 詳細については、エラーの説明を参照してください。 |
Operation {operationName} isn't allowed on {application} since it's marked for deletion. (操作 {operationName} は、削除対象としてマークされているため、{アプリケーション} では許可されていません。) 削除操作のみを再試行できます (または、進行中の操作が完了するまで待ちます)。 | 現在削除中のアプリケーションを更新しようとしています。 |
The value {value} of parameter 'galleryApplicationVersion.properties.publishingProfile.replicaCount' is out of range. (パラメーター 'galleryApplicationVersion.properties.publishingProfile.replicaCount' の値 {値} が範囲外です。) The value must be between one and three, inclusive. (値には、1 から 3 までの値 (両端を含む) を指定する必要があります。) | VM Application バージョンで許可されるレプリカは、1 つから 3 つだけです。 |
Changing property 'galleryApplicationVersion.properties.publishingProfile.manageActions.install' isn't allowed. (プロパティ 'galleryApplicationVersion.properties.publishingProfile.manageActions.install' の変更は許可されていません。) (または更新、削除) | 既存の VmApplication の管理アクションを変更することはできません。 新しい VmApplication バージョンを作成する必要があります。 |
Changing property ' galleryApplicationVersion.properties.publishingProfile.settings.packageFileName ' isn't allowed. (プロパティ 'galleryApplicationVersion.properties.publishingProfile.settings.packageFileName' の変更は許可されていません。) (または configFileName) | パッケージ ファイル名や構成ファイル名などの設定を変更することはできません。 新しい VmApplication バージョンを作成する必要があります。 |
The blob referenced by source uri {uri} is too large: size = {size}. (ソース uri {uri} によって参照される BLOB が大きすぎます: サイズ = {サイズ}。) The maximum blob size allowed is '1 GB'. (許可される最大 BLOB サイズは '1 GB' です。) | mediaLink または defaultConfigurationLink によって参照される BLOB の最大サイズは、現在 1 GB です。 |
The blob referenced by source uri {uri} is empty. (ソース uri {uri} で参照されている BLOB が空です。) | 空の BLOB が参照されました。 |
{type} blob type isn't supported for {operation} operation. ({type} BLOB の種類は、{操作} 操作ではサポートされていません。) Only page blobs and block blobs are supported. (サポートされているのは、ページ BLOB とブロック BLOB のみです。) | VmApplications では、ページ BLOB とブロック BLOB のみがサポートされます。 |
The SAS isn't valid for source uri {uri}. (SAS がソース uri {uri} に対して無効です。) | mediaLink または defaultConfigurationLink に指定された SAS uri が有効な SAS uri ではありません。 |
Can't specify {region} in target regions because the subscription is missing required feature {featureName}. (サブスクリプションに必要な機能 {featureName} がないため、ターゲット リージョンで {リージョン} を指定できません。) Either register your subscription with the required feature or remove the region from the target region list. (サブスクリプションを必要な機能に登録するか、ターゲット リージョンの一覧からリージョンを削除してください。) | 特定の制限されたリージョンで VmApplications を使用するには、そのサブスクリプションに対して機能フラグを登録する必要があります。 |
Gallery image version publishing profile regions {regions} must contain the ___location of image version {___location}. (ギャラリー イメージ バージョンの公開プロファイル リージョン {リージョン} には、イメージ バージョンの場所 {場所} が含まれている必要があります。) | レプリケーション用のリージョンの一覧には、アプリケーション バージョンがある場所が含まれている必要があります。 |
ターゲットの公開リージョンで重複するリージョンは許可されません。 | 公開リージョンの重複は許可されません。 |
Gallery application version resources currently don't support encryption. (ギャラリー アプリケーション バージョンのリソースでは、現在、暗号化はサポートされていません。) | ターゲット リージョンの暗号化プロパティは、VM アプリケーションではサポートされていません |
エンティティ名が要求 URL 内の名前と一致しません。 | 要求 URL に指定されたギャラリー アプリケーション バージョンが、要求本文で指定されたバージョンと一致しません。 |
The gallery application version name is invalid. (ギャラリー アプリケーション バージョン名が無効です。) アプリケーションのバージョン名は Major(int32) に従う必要があります。 Minor(int32). Patch(int32) format, where int is between 0 and 2,147,483,647 (inclusive). (アプリケーションのバージョン名では、Major(int32).Minor(int32).Patch(int32) という形式に従う必要があります。ここで int は 0 から 2,147,483,647 までの値 (両端を含む) です。たとえば、1.0.0、2018.12.1 などです。) たとえば、1.0.0、2018.12.1 などです。 |
ギャラリー アプリケーション バージョンは、指定された形式に従う必要があります。 |
次の手順
- VM アプリケーション パッケージを作成してデプロイする方法について学習します。
- Azure VM アプリケーションを管理および削除する方法について説明します。