Skip to content

Instantly share code, notes, and snippets.

@m-moris
Created July 22, 2015 09:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save m-moris/358281dda47b33c543bf to your computer and use it in GitHub Desktop.
Save m-moris/358281dda47b33c543bf to your computer and use it in GitHub Desktop.
$userName = "someusername"
$password = "somepassword"
$secPassword = ConvertTo-SecureString $password -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential( $userName,$secPassword )
# or
# $creds = Get-Credential
$rg = "test-rg"
$location = "japanwest"
$storage = "somestorage"
$domain = "somedomain"
$vmSize = "Standard_A1"
$vnetName = "myVnet"
$subnetName = "Subnet-1"
$vnetPrefix = "10.0.0.0/8"
$subnetPrefix = "10.0.0.0/24"
$privateIpAddressPrefix = "10.0.0.{0}"
$publicIpName = "myPublicIP"
$vmNamePrefix = "myUbuntu{0}"
$nicNamePrefix = "myNic{0}"
$loadBalancerName = "myLoadBalancer"
$avsetName = "myAvSet"
$unitNum = 3
$VerbosePreference = "continue"
# リソースグループの作成
Write-Verbose "Createing resource group $rg"
New-AzureResourceGroup -Name $rg -Location $location
# 仮想ネットワーク&サブネットの作成
Write-Verbose "Creating virtual network and subnets."
$vnet = New-AzureVirtualNetwork -ResourceGroupName $rg -Location $location `
-Name $vnetName -AddressPrefix $vnetPrefix
$vnet = $vnet | Add-AzureVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix $subnetPrefix |
Set-AzureVirtualNetwork
$vnet = Get-AzureVirtualNetwork -ResourceGroupName $rg -Name $vnetName
$subnet = Get-AzureVirtualNetworkSubnetConfig -Name $subnet1Name -VirtualNetwork $vnet
# アベイラビリティーセットの作成
Write-Verbose "Creating availability set."
$avset = New-AzureAvailabilitySet -ResourceGroupName $rg -Name $avsetName -Location $location
# パブリックIPアドレスの作成
Write-Verbose "Creating public ip address."
$publicIpAddress = New-AzurePublicIpAddress -ResourceGroupName $rg -Name $publicIpName -Location $location `
-AllocationMethod Dynamic -DomainNameLabel $domain
# ロードバランサーの設定
Write-Verbose "Creating load balancer config."
$frontendIpConfig = New-AzureLoadBalancerFrontendIpConfig -Name "FrontEndIP" -PublicIpAddress $publicIpAddress
$backendPoolConfig = New-AzureLoadBalancerBackendAddressPoolConfig -Name "BackEndPool"
$probeConfig = New-AzureLoadBalancerProbeConfig -Name "HttpProbe" -RequestPath "index.html" `
-Protocol Http -IntervalInSeconds 5 -ProbeCount 3 -Port 80
$loadBalancerRuleConfig = New-AzureLoadBalancerRuleConfig -Name "Http" -FrontendIpConfiguration $frontendIpConfig `
-BackendAddressPool $backendPoolConfig -Probe $probeConfig -Protocol Tcp -FrontendPort 80 -BackendPort 80
$inboundNatRuleConfig = @()
for($i=0; $i -lt $unitNum; $i++) {
Write-Verbose "Creating NAT Rules $i"
$inboundNatRuleConfig += New-AzureLoadBalancerInboundNatRuleConfig -Name ("SSH" + $i) -FrontendIpConfiguration $frontendIpConfig `
-Protocol Tcp -FrontendPort (60000 + $i) -BackendPort 22
}
Write-Verbose "Creating load balancer."
$loadBalancer = New-AzureLoadBalancer -ResourceGroupName $rg -Name $loadBalancerName -Location $location `
-FrontendIpConfiguration $frontendIpConfig -InboundNatRule $inboundNatRuleConfig -LoadBalancingRule $loadBalancerRuleConfig `
-BackendAddressPool $backendPoolConfig -Probe $probeConfig
# ストレージアカウント LRSで作成
Write-Verbose "Creating storage account."
New-AzureStorageAccount -ResourceGroupName $rg -Location $location -Name $storage -Type Standard_LRS
# VMの作成
for($i=0; $i -lt $unitNum; $i++) {
$osDisk = "https://{0}.blob.core.windows.net/vhds/OsDisk{1}.vhd" -f $storage, $i
$nicName = $nicNamePrefix -f $i
$vmName = $vmNamePrefix -f $i
$privateIpAddress = $privateIpAddressPrefix -f ($i+4)
Write-Verbose "Creating VM $vmName"
# ネットワークインタフェースの作成
$nic = New-AzureNetworkInterface -ResourceGroupName $rg -Location $location `
-Name $nicName -PrivateIpAddress $privateIpAddress -Subnet $subnet `
-LoadBalancerInboundNatRule $loadBalancer.InboundNatRules[$i] `
-LoadBalancerBackendAddressPool $loadBalancer.BackendAddressPools[0]
$config = `
New-AzureVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avset.Id |
Set-AzureVMOperatingSystem -Linux -ComputerName $vmName -Credential $creds |
Set-AzureVMSourceImage -PublisherName canonical -Offer UbuntuServer -Skus 14.04.2-LTS -Version 14.04.201506100 |
Set-AzureVMOSDisk -Name "ubuntuOsDisk" -CreateOption fromImage -Caching ReadWrite -VhdUri $osDisk |
Add-AzureVMNetworkInterface -Id $nic.Id
New-AzureVM -ResourceGroupName $rg -Location $location -VM $config
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment