Created
April 23, 2018 05:45
-
-
Save mtsukamoto/e24f8fc3f963a801e014554871b01c7f to your computer and use it in GitHub Desktop.
Powershellから、仮想マシンサイズや仮想マシンイメージを指定して、仮想マシンを作成する手順のメモ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Memo_Create_Azure-VM.ps1 | |
# ---- | |
# Powershellから、仮想マシンサイズや仮想マシンイメージを指定して、 | |
# 仮想マシンを作成する手順のメモ | |
# ---- 事前準備(PowershellでAzureを操作する時の共通作業)---- | |
# Azureにログインします(Azure Browser Shellでは、アクセス時にログインしているので不要です)。 | |
# Login-AzureRmAccountコマンドレットを使用します。 | |
Login-AzureRmAccount | |
# 既存のサブスクリプション名を確認します。 | |
# 使用コマンドレット:Get-AzureRmSubscription | |
$subscriptions = Get-AzureRmSubscription | |
$subscriptions | Select Name | |
# 使用サブスクリプションを変数に保持しておき、また作業コンテキストをこのサブスクリプションに切り替えます。 | |
# 使用コマンドレット:Set-AzureRmContext | |
$subscription = ($subscriptions | ?{$_.Name -eq "Microsoft Azure"}) # 前行の表示にあわせて検索文字列を変更 | |
Set-AzureRmContext -Subscription $subscription | |
# 以下は必須ではないけど、後の引数指定で使いまわせるのでやっておくと便利 | |
# ロケーションを取得し、作業対象ロケーションを変数に格納しておきます。 | |
# 使用コマンドレット:Get-AzureRmLocation | |
$locations = Get-AzureRmLocation | |
$locations.location | ?{$_ -match "japan"} # `japan`や`us`などで絞り込み | |
$location = ($locations | ?{$_.location -eq "japaneast"}) | |
# リソースグループを取得し、作業対象リソースグループを変数に格納しておきます。 | |
# 使用コマンドレット:Get-AzureRmResourceGroup | |
# https://docs.microsoft.com/en-us/powershell/module/azurerm.resources/get-azurermresourcegroup | |
$rgs = Get-AzureRmResourceGroup | |
$rgs.ResourceGroupName | |
$rg = ($rgs | ?{$_.ResourceGroupName -eq "my-rg01"}) | |
# ---- 仮想マシンサイズの選定 ---- | |
# 使用できる仮想マシンサイズを取得します。 | |
# 使用コマンドレット:Get-AzureRmVMSize | |
# https://docs.microsoft.com/ja-jp/powershell/module/azurerm.compute/get-azurermvmsize | |
$sizes = Get-AzureRmVMSize -Location $location.Location | |
# 仮想マシンサイズを選定します。件数が多いので、指定列、列順での表示や、`?`(where-object)での絞り込み等を活用します。 | |
$props = @("Name","NumberOfCores","MemoryInMB","OSDiskSizeInMB","ResourceDiskSizeInMB","MaxDataDiskCount") # 表示列指定の簡略化のため | |
$sizes[0..2] | Format-Table -Property $props | |
$sizes | ?{($_.Name -match "_D") -and ($_.NumberOfCores -eq 2) -and ($_.MemoryInMB -ge 8192)} | Format-Table -Property $props | |
# 使用する仮想マシンサイズを、変数に保持しておきます。 | |
$size = ($sizes | ?{$_.Name -eq "Standard_D2_v3"}) | |
# ---- 仮想マシンイメージの選定 ---- | |
# https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/cli-ps-findimage#navigate-the-images | |
# 使用する仮想マシンイメージを決定します。 | |
# 発行元、イメージプラン、SKU、バージョンの順で選定していき、それぞれ変数に格納しておきます。 | |
# マーケットプレイスから、仮想マシン提供元を取得し、選定します。 | |
# 使用コマンドレット:Get-AzureRmVMImagePublisher | |
# https://docs.microsoft.com/ja-jp/powershell/module/azurerm.compute/get-azurermvmimagepublisher | |
$publishers = Get-AzureRmVMImagePublisher -Location $location.Location | |
$publishers | Select PublisherName | ? {$_ -match "MicrosoftWindows"} # 絞り込み | |
$publisher = ($publishers | ?{$_.PublisherName -eq "MicrosoftWindowsServer"}) | |
# この提供元が登録しているイメージプランを取得し、選定します。 | |
# 使用コマンドレット:Get-AzureRmVMImageOffer | |
# https://docs.microsoft.com/ja-jp/powershell/module/azurerm.compute/get-azurermvmimageoffer | |
$offers = Get-AzureRmVMImageOffer -Location $location.Location -PublisherName $publisher.PublisherName | |
$offers | Select Offer | |
$offer = ($offers | ?{ $_.Offer -eq "WindowsServer" }) | |
# このイメージプランで登録されているSKUを取得し、選定します。 | |
# 使用コマンドレット:Get-AzureRmVMImageSku | |
# https://docs.microsoft.com/ja-jp/powershell/module/azurerm.compute/get-azurermvmimagesku | |
$skus = Get-AzureRmVMImageSku -Location $location.Location -PublisherName $publisher.PublisherName -Offer $offer.Offer | |
$skus | Select Skus | |
$sku = ($skus | ?{ $_.Skus -eq "2016-Datacenter" }) | |
# このSKUで使用できるバージョンを取得し、選定します。 | |
# 使用コマンドレット:Get-AzureRmVMImage | |
# https://docs.microsoft.com/ja-jp/powershell/module/azurerm.compute/get-azurermvmimage | |
$versions = Get-AzureRmVMImage -Location $location.Location -PublisherName $publisher.PublisherName -Offer $offer.Offer -Skus $sku.Skus | |
$versions | Select Version | |
$version = ($versions | ?{ $_.Version -eq "2016.127.20180315"}) | |
# $version = $versions[-1] # 最新版であればこれでもいいはず | |
# 仮想マシンイメージのURNを作成します。`$verName`は、最新版を使うときは前述の通り文字列`"latest"`としてください。 | |
$image = @($version.PublisherName, $version.Offer, $version.Skus, $version.Version) -join ":" | |
# ---- 仮想マシンイメージの契約プランの確認 ---- | |
# https://docs.microsoft.com/ja-jp/azure/virtual-machines/windows/cli-ps-findimage#deploy-an-image-with-marketplace-terms | |
# 契約プランの有無を確認します。 | |
# 何も表示されなければ、契約プランは確認不要です。 | |
$image.PurchasePlan | |
# 表示されたときは、契約プランを承諾しているか確認していきます。 | |
# サンプルとして、以下は契約プランの指定されている仮想マシンイメージです。 | |
# $image = Get-AzureRMVMImage -Location "westus" -Publisher "microsoft-ads" -Offer "windows-data-science-vm" -Skus "windows2016" -Version "0.2.02" | |
# 契約プランの情報を取得、表示します。 | |
# 使用コマンドレット:Get-AzureRmMarketplaceTerms | |
# https://docs.microsoft.com/ja-jp/powershell/module/azurerm.marketplaceordering/get-azurermmarketplaceterms | |
$plan = $image.PurchasePlan | |
$terms = Get-AzureRmMarketplaceTerms -Publisher $plan.Publisher -Product $plan.Product -Name $plan.Name | |
$terms | |
# `Accepted`行の値が`True`ではないときは、未承諾のためこのイメージは使用できません。 | |
# 必要であれば、承諾を行います。 | |
# 使用コマンドレット:Set-AzureRmMarketplaceTerms | |
# https://docs.microsoft.com/ja-jp/powershell/module/azurerm.marketplaceordering/set-azurermmarketplaceterms | |
Set-AzureRmMarketplaceTerms -Publisher $terms.Publisher -Product $terms.Product -Name $terms.Plan -Terms $terms -Accept | |
# ---- ネットワークインターフェースカードの作成 ---- | |
# VNetを取得し、接続先を選定します | |
# 使用コマンドレット:Get-AzureRmVirtualNetwork | |
# https://docs.microsoft.com/ja-jp/powershell/module/AzureRM.Network/Get-AzureRmVirtualNetwork | |
$vnets = Get-AzureRmVirtualNetwork -ResourceGroupName $rg.ResourceGroupName | |
# $vnets = Get-AzureRmVirtualNetwork -ResourceGroupName "my-rg02" # 別のリソースグループのネットワークに接続する場合は直指定 | |
$vnets | Select Name | |
$vnet = ($vnets | ?{ $_.Name -eq "my-vnet01"}) | |
# サブネットを取得し、接続先を選定します | |
$subnets = $vnet.Subnets | |
$subnets | Select Name,AddressPrefix | |
$subnet = ($subnets | ?{ $_.Name -eq "default" }) | |
# パブリックIPを取得し、割当対象を選定します。 | |
$pips = Get-AzureRmPublicIpAddress | |
$pips | ?{ $_.Location -eq $location.Location } | Select Name,ResourceGroupName,IpAddress | |
$pip = ($pips | ?{ $_.Name -eq "my-pip01" }) | |
# $pip = $null # パブリックIPを割り当てないときは$null | |
# ネットワークセキュリティグループを取得し、割当対象を選定します。 | |
$nsgs = Get-AzureRmNetworkSecurityGroup -ResourceGroupName $rg.ResourceGroupName | |
$nsgs | Select Name | |
$nsg = ($nsgs | ?{ $_.Name -eq "my-nsg01") | |
# $nsg = $null # ネットワークセキュリティグループを割り当てないときは$null | |
# NICを作成します。 | |
$nicName = "my-nic01" | |
$nic = New-AzureRmNetworkInterface -Name $nicName -ResourceGroupName $rg.ResourceGroupName -Location $location.Location -SubnetId $subnet.Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id | |
# ---- 仮想マシンの作成 ---- | |
# https://docs.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-windows-powershell-sample-create-vm | |
# 仮想マシン名とホスト名 | |
$vmName = "my-vm01" | |
$hostname = $vmname | |
# ゲストOSの管理者アカウントに設定する認証情報を生成します。 | |
# プロンプトが表示されるので、ユーザー名とパスワードを指定します。 | |
# 使用コマンドレット:Get-Credential | |
# https://docs.microsoft.com/ja-jp/powershell/module/Microsoft.PowerShell.Security/Get-Credential | |
$cred = Get-Credential -Message "ゲストOSに設定する管理者情報" # `-Message`引数は省略可 | |
# 仮想マシン情報の生成 | |
# 使用コマンドレット:New-AzureRmVMConfig | |
# https://docs.microsoft.com/en-us/powershell/module/azurerm.compute/new-azurermvmconfig | |
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $size.Name | |
# OS情報の設定 | |
# 使用コマンドレット:Set-AzureRmVMOperatingSystem | |
# https://docs.microsoft.com/en-us/powershell/module/azurerm.compute/set-azurermvmoperatingsystem | |
$vmConfig | Set-AzureRmVMOperatingSystem -Windows -ComputerName $hostname -Credential $cred | |
# 使用イメージの設定 | |
# 使用コマンドレット:Set-AzureRmVMSourceImage | |
# https://docs.microsoft.com/en-us/powershell/module/azurerm.compute/set-azurermvmsourceimage | |
$vmConfig | Set-AzureRmVMSourceImage -PublisherName $version.PublisherName -Offer $version.Offer -Skus $version.Skus -Version $version.Version | |
# NICの設定(NICが1つの場合) | |
# 使用コマンドレット:Add-AzureRmVMNetworkInterface | |
# https://docs.microsoft.com/en-us/powershell/module/azurerm.compute/add-azurermvmnetworkinterface | |
$vmConfig | Add-AzureRmVMNetworkInterface -Id $nic.Id | |
# NICの設定(NICが2つ以上の場合) | |
#$vmConfig | Add-AzureRmVMNetworkInterface -Id $nic1.Id -Primary | |
#$vmConfig | Add-AzureRmVMNetworkInterface -Id $nic2.Id | |
# 仮想マシンの作成 | |
# 使用コマンドレット:New-AzureRmVM | |
# https://docs.microsoft.com/en-us/powershell/module/azurerm.compute/new-azurermvm | |
$job = New-AzureRmVM -ResourceGroupName $rg.ResourceGroupName -Location $location.Location -VM $vmConfig -AsJob | |
# ---- ジョブの確認 ---- | |
# ジョブの確認 | |
# 使用コマンドレット:Get-Job | |
# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-job | |
Get-Job -Id $job.Id | select Command,PSBeginTime,State,Error |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment