この記事では、Azure portal または Azure PowerShell を使用して、Azure DevTest Labs 仮想マシン (VM) に 成果物 を追加する方法について説明します。 成果物は、ラボの VM に追加できるツール、アクション、またはソフトウェアです。 たとえば、成果物では、Windows PowerShell スクリプトや Bash コマンドの実行、ツールまたはアプリケーションのインストール、ドメインへの参加などの他のアクションを実行できます。
DevTest Labs アーティファクトは、 パブリック DevTest Labs Git リポジトリ またはプライベート Git リポジトリから取得できます。 ラボ ユーザーは 、独自のカスタム 成果物を作成 してリポジトリに格納し、パラメーターを使用して独自のニーズに合わせて既存の成果物をカスタマイズできます。
ラボ管理者は、すべてのラボ ユーザーがそれらにアクセスできるように、 ラボにアーティファクト リポジトリを追加 できます。 ラボ管理者は、作成時 にすべてのラボ VM にインストールする必須の成果物を指定 することもできます。 ラボ ユーザーは、VM 作成時に必須の成果物を変更または削除することはできませんが、VM の作成時または作成後に他の利用可能な成果物を追加および構成できます。
前提条件
- DevTest Labs のラボへのユーザー アクセス。
- DevTest Labs のラボへのユーザー アクセス。
- Azure PowerShell。 次のいずれかを実行できます。
VM に成果物を追加する
Azure portal を使用して、VM の作成時に成果物を追加したり、既存のラボ VM に成果物を追加したりできます。
VM の作成時に成果物を追加する
ラボのホーム ページで、[追加] を選択 します。
[ベースの選択] ページで、目的の VM の種類を選びます。
[ラボ リソースの作成] 画面で、「Azure DevTest Labs でラボ VM を作成する」の手順に従って、[基本設定] タブに入力します。
[ 基本設定] タブの下部にある [成果物の 追加と削除] を選択します。
[成果物の追加] ページで、VM に追加する各成果物の横にある矢印を選びます。
[成果物の追加] の各ペインで、必須と省略可能のパラメーターの値を入力して、[OK] を選びます。 成果物は、[成果物の追加] ページの [選択した成果物] の下に表示され、構成された成果物の更新の数が表示されます。
既定では、成果物は追加した順序でインストールされます。 順序を並べ替えるには、選択した成果物の一覧の成果物の横にある省略記号 ... を選択し、[上へ移動]、[下へ移動]、[上へ移動]、または [下へ移動] を選択します。
アーティファクトの追加、配置、構成が完了したら、[成果物の追加] ページで [OK] を選択します。
[ラボ リソースの作成] 画面の [成果物] セクションには、追加された成果物の数が表示されます。 VM を作成する前に成果物を追加、編集、再配置、または削除するには、もう一度 [ 成果物の追加と削除 ] を選択します。
必要に応じて 、詳細設定 または タグを構成し、画面の下部にある [作成 と 作成 ] をもう一度選択して、成果物を追加した VM を作成します。
VM を作成すると、インストールされた成果物が VM の [成果物 ] ページに表示されます。 各成果物のインストールに関する詳細を表示するには、成果物名を選択します。
既存の VM に成果物を追加する
ラボのホーム ページで、[ 仮想マシン ] の一覧から VM を選択します。
VM ページで、上部のメニュー バーまたは左側のナビゲーションの [操作] で [成果物] を選択します。
[アーティファクト] ページ で 、[ アーティファクトの適用] を選択します。
[ 成果物の追加 ] ページで、新しい VM の場合と同じ方法で成果物を選択して構成します。
アーティファクトの追加が完了したら、[インストール] を選択 します。 成果物はすぐに VM にインストールされます。
必要に応じて、 Connect-AzAccount コマンドレットを使用して Azure アカウントにサインインします。 複数の Azure サブスクリプションがある場合は、 Set-AzContext -SubscriptionId "<SubscriptionId>"
を使用し、使用するサブスクリプション ID を指定します。
Invoke-AzResourceAction コマンドレットを使用して、次の PowerShell スクリプトを実行してアーティファクトを VM に適用します。 プロンプトが表示されたときにスクリプトが呼び出す情報を指定します。
param (
[Parameter(Mandatory=$true, HelpMessage="The ID of the subscription that contains the lab")]
[string] $SubscriptionId,
[Parameter(Mandatory=$true, HelpMessage="The name of the lab that has the VM")]
[string] $DevTestLabName,
[Parameter(Mandatory=$true, HelpMessage="The name of the VM")]
[string] $VirtualMachineName,
[Parameter(Mandatory=$true, HelpMessage="The repository where the artifact is stored")]
[string] $RepositoryName,
[Parameter(Mandatory=$true, HelpMessage="The artifact to apply to the VM")]
[string] $ArtifactName,
[Parameter(ValueFromRemainingArguments=$true)]
$Params
)
# Set the appropriate subscription
Set-AzContext -SubscriptionId $SubscriptionId | Out-Null
# Get the lab resource group name
$resourceGroupName = (Get-AzResource -ResourceType 'Microsoft.DevTestLab/labs' | Where-Object { $_.Name -eq $DevTestLabName}).ResourceGroupName
if ($resourceGroupName -eq $null) { throw "Unable to find lab $DevTestLabName in subscription $SubscriptionId." }
# Get the internal repository name
$repository = Get-AzResource -ResourceGroupName $resourceGroupName `
-ResourceType 'Microsoft.DevTestLab/labs/artifactsources' `
-ResourceName $DevTestLabName `
-ApiVersion 2016-05-15 `
| Where-Object { $RepositoryName -in ($_.Name, $_.Properties.displayName) } `
| Select-Object -First 1
if ($repository -eq $null) { "Unable to find repository $RepositoryName in lab $DevTestLabName." }
# Get the internal artifact name
$template = Get-AzResource -ResourceGroupName $resourceGroupName `
-ResourceType "Microsoft.DevTestLab/labs/artifactSources/artifacts" `
-ResourceName "$DevTestLabName/$($repository.Name)" `
-ApiVersion 2016-05-15 `
| Where-Object { $ArtifactName -in ($_.Name, $_.Properties.title) } `
| Select-Object -First 1
if ($template -eq $null) { throw "Unable to find template $ArtifactName in lab $DevTestLabName." }
# Find the VM in Azure
$FullVMId = "/subscriptions/$SubscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DevTestLab/labs/$DevTestLabName/virtualmachines/$virtualMachineName"
$virtualMachine = Get-AzResource -ResourceId $FullVMId
# Generate the artifact id
$FullArtifactId = "/subscriptions/$SubscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DevTestLab/labs/$DevTestLabName/artifactSources/$($repository.Name)/artifacts/$($template.Name)"
# Handle the input parameters to pass through
$artifactParameters = @()
# Fill the artifact parameter with the additional -param_ data and strip off the -param_
$Params | ForEach-Object {
if ($_ -match '^-param_(.*)') {
$name = $_ -replace '^-param_'
} elseif ( $name ) {
$artifactParameters += @{ "name" = "$name"; "value" = "$_" }
$name = $null #reset name variable
}
}
# Create a structure to pass the artifact data to the action
$prop = @{
artifacts = @(
@{
artifactId = $FullArtifactId
parameters = $artifactParameters
}
)
}
# Apply the artifact
if ($virtualMachine -ne $null) {
# Apply the artifact by name to the virtual machine
$status = Invoke-AzResourceAction -Parameters $prop -ResourceId $virtualMachine.ResourceId -Action "applyArtifacts" -ApiVersion 2016-05-15 -Force
if ($status.Status -eq 'Succeeded') {
Write-Output "##[section] Successfully applied artifact: $ArtifactName to $VirtualMachineName"
} else {
Write-Error "##[error]Failed to apply artifact: $ArtifactName to $VirtualMachineName"
}
} else {
Write-Error "##[error]$VirtualMachine was not found in the DevTest Lab, unable to apply the artifact"
}
関連コンテンツ