powershellで仮想マシンを作成する
azure関連の作業を自動化する場合、仮想ホストの作成は避けて通れない道です。システム自体が複雑なため、1つか2つの簡単なコマンドでバーチャルホストを作成することは困難です。そこで、PowerShellを使ったazure上のバーチャルホスト(Ubuntuサーバー)の作成をドキュメント化した記事を作成しました。
バーチャルホスト バーチャルホストは、ネットワークカード、パブリックIPアドレス、仮想ネットワーク、ネットワークセキュリティグループ、ストレージなど、使用可能なサービスを提供するために他の多くの基礎的なコンポーネントと関連付ける必要があります。次の図は、新しい仮想マシンを作成するために必要な他のコンポーネントを含んでいます。
つまり、仮想マシンを作成する際に、コンポーネントを1つ1つ作成していくのです。
変数の定義
このスクリプトを将来も再利用できるように、使用するすべての変数をまとめておき、スクリプトのパラメータを使って簡単に修正または初期化できるようにします。
$rgName = "vmpool"
$rgLocation = "East Asia"
$subnetConfigName = $rgName + "subnet"
$vnetName = $rgName + "vnet"
$vmName = "vmxman"
$pipName = $vmName + "pip"
$nsgRule22Name = "nsgRule22"
$nsgName = $rgName + "nsg"
$interfaceName = $vmName + "nic"
$storageName = $rgName + "storage"
$storageType = "Standard_GRS"
$oSDiskName = $vmName + "OSDisk"
$vmSize = "Standard_D1"
$vmVersion = "16.04-LTS"
$userName = "nick"
$userPassword = "123456"
怖がらせてしまったかな?そうなんです! それだけ変数が必要なんだから、ここでは説明しないで、後で1つずつ使おうよ。
仮想マシンにログインするためのクレデンシャルを作成する
このスクリプトで作成した仮想マシンは、デフォルトでユーザーを作成しますので、ユーザー名とログインパスワードを指定する必要があります(今回作成したユーザーは公開鍵認証でログインしますので、このパスワードは実際には使用されません)。ユーザー名とパスワードでクレデンシャルオブジェクトを作成する場合。
$securePassword = ConvertTo-SecureString $userPassword -AsPlainText -Force
$userCred = New-Object System.Management.Automation.PSCredential ($userName, $securePassword)
リソースグループの作成
仮想マシンとその関連コンポーネントがすべて同じResource Groupに所属する新しいResource Groupを作成します。
New-AzureRmResourceGroup -Name $rgName -Location $rgLocation
仮想ネットワークの作成
次に仮想ネットワークで作成します。まず、サブネットの設定を作成します。
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name $subnetConfigName -AddressPrefix 192.168.1.0/24
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $rgName -Location $rgLocation `
-Name $vnetName -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig
$pip = New-AzureRmPublicIpAddress -ResourceGroupName $rgName -Location $rgLocation `
-AllocationMethod Static -IdleTimeoutInMinutes 4 `
-Name $pipName
22番ポートへのアクセスを許可するルールを最初に設定する必要があります。
$nsgRule22 = New-AzureRmNetworkSecurityRuleConfig -Name $nsgRule22Name -Protocol Tcp `
-Direction Inbound -Priority 200 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
-DestinationPortRange 22 -Access Allow
$nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $rgName -Location $rgLocation `
-Name $nsgName -SecurityRules $nsgRule22
ホストにはまだネットワークカードがないので、ホスト用の仮想ネットワークカードを作成します。
$nic = New-AzureRmNetworkInterface -Name $interfaceName -ResourceGroupName $rgName -Location $rgLocation `
-SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
仮想マシンのディスクファイルはazureのストレージにblobとして格納されるので、ディスクファイルを格納するStorageAccountを作成する必要があります。
$storageAccount = New-AzureRmStorageAccount -ResourceGroupName $rgName -Name $storageName -Type $storageType -Location $rgLocation
以下は、ディスクファイルの場所と名前を定義しています。
$oSDiskUri = $storageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $oSDiskName + ".vhd"
仮想マシンの作成に関連する以下の設定です。
$vmConfig = New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize | `
Set-AzureRmVMOperatingSystem -Linux -ComputerName $vmName -Credential $userCred -DisablePasswordAuthentication | `
Set-AzureRmVMSourceImage -PublisherName Canonical -Offer UbuntuServer -Skus $vmVersion -Version latest |`
Add-AzureRmVMNetworkInterface -Id $nic.Id | `
Set-AzureRmVMOSDisk -VhdUri $oSDiskUri -CreateOption FromImage
$sshPublicKey = "nick's ssh public key"
Add-AzureRmVMSshPublicKey -VM $vmconfig -KeyData $sshPublicKey -Path "/home/$userName/.ssh/authorized_keys"
New-AzureRmVM -ResourceGroupName $rgName -Location $rgLocation -VM $vmConfig
azure上でアクションを実行するには、まずユーザーがログインする必要があります。そこで、PowerShellスクリプトでどのようにそれを行うのですか?
の作者は
Azureの基本。PowerShellで自動ログイン
記事 "Azureの基礎知識 に詳しい説明があります。PowerShellでログインを自動化する" に詳しい説明があります。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PowerShell スクリプト ランダムパスワードジェネレータ (ps random password generator)
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
このシステムでのスクリプトの実行を無効にするPowerShellソリューション
-
PowershellによるWindowsログのクエリ方法
-
PowerShell 3.0 Hyper-V 3.0 の管理
-
PowerShellにおける関数のオーバーロードの例
-
Powershellの相互排他的パラメータの使用例
-
サーバーの接続状態を監視するためのPowershellの実装
-
Powershellは2つのフォルダの差分を比較する
-
PowerShellスクリプトファイルをcmdで直接実行する方法