SlideShare a Scribd company logo
Развертывания и настройка окружений,
автоматизация и шаблонизация,
инструменты и сценарии,
Azure PowerShell
Provisioning в
Microsoft Azure
Eugene Ilagin https://github.com/ilagin/
• Что такое Provisioning?
• Зачем это знать и где применять?
• Ручная настройка окружения или
автоматическая?
• Provisioning как элемент Continuous
Delivery.
Введение
Hands-on пример
API Server Web Server
Database Server Replication Server
Web API Web App
Replicated
Database
Database
Transactional Replication
• Миграция web-
приложения с on-
premises на IaaS
• Набор скриптов,
позволяющий
сделать все в один
клик
• Azure PowerShell – open source модуль для
Windows PowerShell
• Azure Account. Subscription
• Способы подключения к Azure подписке
• Azure AD
• Сертификат
https://github.com/Azure/azure-powershell/releases
Установка Azure PowerShell и
подключение подписки
Создание Storage Account
Шаг 1.
$commonLocation = "North Europe"
$storageAccountName = "ilagin"
$subscriptionName = Get-AzureSubscription | Select SubscriptionName
New-AzureStorageAccount -StorageAccountName $storageAccountName -Label
"TestStorage" -Location $commonLocation
Select-AzureSubscription $subscriptionName.SubscriptionName.ToString()
Set-AzureSubscription -SubscriptionName
$subscriptionName.SubscriptionName.ToString() -CurrentStorageAccount
$storageAccountName
• Объединение виртуальных машин в LAN
• Доступ к ресурсам в пределах LAN
• Организация VPN
• Создание VNet перед созданием VM
Шаг 2. Создание Виртуальной Сети
Provisioning in Microsoft Azure
<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
<VirtualNetworkConfiguration>
<Dns />
<VirtualNetworkSites>
<VirtualNetworkSite name="MyVirtualNetwork" Location="North Europe">
<AddressSpace>
<AddressPrefix> 10.0.0.1/26</AddressPrefix>
</AddressSpace>
<Subnets>
<Subnet name="Subnet1">
<AddressPrefix> 10.0.0.1/26</AddressPrefix>
</Subnet>
</Subnets>
</VirtualNetworkSite>
</VirtualNetworkSites>
</VirtualNetworkConfiguration>
</NetworkConfiguration>
Set-AzureVNetConfig -ConfigurationPath
"D:NetworkConfig.netcfg"
• Доступные образы: Get-AzureVMImage.
• Vmdepot.com
• Выбор конфигурации. A0-A11. D1- D14.
• VM с MS SQL стоят дороже.
• Операции создания и provisioning’a
занимают относительно длительное время
Шаг 3.
Создание Виртуальных Машин
$commonLocation = "North Europe"
$webServerImageName = "bd507d3a70934695bc2128e3e5a255ba__RightImage-Windows-
2012-x64-iis8-v14.2"
$dbServerImageName = "fb83b3509582419d99629ce476bcb5c8__SQL-Server-2012-SP2-
11.0.5569.0-Ent-ENU-Win2012-cy15su02"
$virtualNetworkName = "MyVirtualNetwork"
$subnetName = "Subnet1"
$vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest")
$pwd = "Super Secure Password1"
$instanceSize = "Large"
$userName = "eugene"
$vm0 = New-AzureVMConfig -Name $vmNames[0] -InstanceSize $instanceSize -Image
$webServerImageName
$vm0 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName -Password
$pwd | Set-AzureSubnet $subnetName
$vm0 | New-AzureVM -ServiceName $vmNames[0] -VNetName $virtualNetworkName –
Location $commonLocation
$vm1 = New-AzureVMConfig -Name $vmNames[1] -InstanceSize $instanceSize -
Image $webServerImageName
$vm1 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName -
Password $pwd | Set-AzureSubnet $subnetName
$vm1 | New-AzureVM -ServiceName $vmNames[1] -VNetName $virtualNetworkName
–Location $commonLocation
$vm2 = New-AzureVMConfig -Name $vmNames[2] -InstanceSize $instanceSize -
Image $dbServerImageName
$vm2 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName -
Password $pwd | Set-AzureSubnet $subnetName
$vm2 | New-AzureVM -ServiceName $vmNames[2] -VNetName $virtualNetworkName
–Location $commonLocation
$vm3 = New-AzureVMConfig -Name $vmNames[3] -InstanceSize $instanceSize -
Image $dbServerImageName
$vm3 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName -
Password $pwd | Set-AzureSubnet $subnetName
$vm3 | New-AzureVM -ServiceName $vmNames[3] -VNetName $virtualNetworkName
–Location $commonLocation
• Потеря IP адреса после выключения
• Зависимость ресурсов от IP адреса
Шаг 4. Присвоение статических IP
$vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest",
"ilgfourtest")
$staticIPs = @("10.0.0.4", "10.0.0.5", "10.0.0.6", "10.0.0.7")
for($i=0; $i -le 3; $i++)
{
Get-AzureVM -ServiceName $vmNames[$i] -Name $vmNames[$i] |
Set-AzureStaticVNetIP -IPAddress $staticIPs[$i] | Update-AzureVM
}
Шаг 5.
Добавление Endpoint’ов к
виртуальным машинам
• Что такое endpoint?
• 2 endpoint’а по умолчанию: RDP, PowerShell
• HTTP(80), SQL(1433) и другие - закрыты
$webVmNames = @("ilgonetest", "ilgtwotest")
foreach($vm in $webVmNames)
{
Get-AzureVM -ServiceName $vm -Name $vm | Add-AzureEndpoint -Name
"HttpIn" -Protocol "tcp" -PublicPort 80 -LocalPort 80 | Update-AzureVM
}
Шаг 6.
Отключение Windows Firewall
$vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest")
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object
System.Management.Automation.PSCredential($userName, $securePassword)
foreach($vm in $vmNames)
{
$uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -
SkipCNCheck:$true -SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential
$credential -SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {Get-
NetFirewallProfile | Set-NetFirewallProfile –Enabled False}
$session | Remove-PSSession
}
• Обзор доступных вариантов
• VHD – Virtual Hard Drive
• Azure Blob Storage
Шаг 7. Загрузка файлов на VM
$vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest")
$volumePath = "D:FileStorage.vhd"
$folderToCopy = "D:PRJ"
$azureStoragePaths =
("http://ilagin.blob.core.windows.net/vhdstore/FileStorage0.vhd",
"http://ilagin.blob.core.windows.net/vhdstore/FileStorage1.vhd",
"http://ilagin.blob.core.windows.net/vhdstore/FileStorage2.vhd",
"http://ilagin.blob.core.windows.net/vhdstore/FileStorage3.vhd")
$volume = new-vhd -Path $volumePath -SizeBytes 40MB | `
Mount-VHD -PassThru | `
Initialize-Disk -PartitionStyle mbr -Confirm:$false -PassThru | `
New-Partition -UseMaximumSize -AssignDriveLetter -MbrType IFS | `
Format-Volume -NewFileSystemLabel "VHD" -Confirm:$false
Copy-Item $folderToCopy "$($volume.DriveLetter):" -Recurse
Dismount-VHD $volumePath
for($i=0; $i -le 3; $i++)
{
Add-AzureVhd -Destination $azureStoragePaths[$i] -
LocalFilePath $volumePath
Get-AzureVM $vmNames[$i] $vmNames[$i] | Add-AzureDataDisk
-ImportFrom -MediaLocation $azureStoragePaths[$i] -DiskLabel "EXT"
-LUN 0 | Update-AzureVM
}
Шаг 8.
Удаленное конфигурирование IIS
$webVmNames = @("ilgonetest", "ilgtwotest")
$webPaths = @("E:PRJAPI", "E:PRJWeb")
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object
System.Management.Automation.PSCredential($userName, $securePassword)
$i = 0
foreach($vm in $webVmNames)
{
$uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -
SkipCNCheck:$true -SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential -
SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
param($path, $user, $password)
Set-ExecutionPolicy RemoteSigned
Import-Module WebAdministration
if (!(Test-Path $path))
{
$path = $path.Replace("E:", "F:")
}
Remove-Item IIS:AppPoolsAdminAppPool -Force -Recurse
$appPool = New-WebAppPool -Name "AdminAppPool"
$appPool.processModel.userName = $user
$appPool.processModel.password = $password
$appPool.processModel.identityType = "SpecificUser"
$appPool | Set-Item
}
Remove-Item IIS:Sites"Default Web Site" -Force -Recurse
Remove-Item IIS:SitesAzureProvisioning -Force -Recurse
New-Item IIS:SitesAzureProvisioning -physicalPath $path -
bindings @{protocol="http";bindingInformation=":80:"}
Set-ItemProperty IIS:SitesAzureProvisioning -name
applicationPool -value AdminAppPool
} -Args $webPaths[$i], $userName, $pwd
$session | Remove-PSSession
$i++
}
Шаг 9.
Добавление Windows пользователей
$sqlVmNames = @("ilgthreetest", "ilgfourtest")
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($userName,
$securePassword)
$newUserName = "Replication"
foreach($vm in $sqlVmNames)
{
$uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -
SkipCNCheck:$true -SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential -
SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
param($vmName, $userToCreate, $userPassword)
$Computer = [ADSI]("WinNT://" + $vmName)
$LocalAdmin = $Computer.Create("User", $userToCreate)
$LocalAdmin.SetPassword($userPassword)
$LocalAdmin.SetInfo()
$LocalAdmin.FullName = "Azure Provisioning Demo"
$LocalAdmin.SetInfo()
$LocalAdmin.UserFlags = 64 + 65536 #
ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD
$LocalAdmin.SetInfo()
$objOU = [ADSI]("WinNT://" + $vmName +
"/Administrators,group")
$objOU.add("WinNT://" + $vmName +"/" + $userToCreate)
} -Args $vm, $newUserName, $pwd
$session | Remove-PSSession
}
Шаг 10.
Добавление SQL пользователей
$sqlVmNames = @("ilgthreetest", "ilgfourtest")
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($userName,
$securePassword)
$newUserName = "Replication"
foreach($vm in $sqlVmNames)
{
$uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true -
SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential -
SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
param($vmName, $userName, $userPassword)
Set-ExecutionPolicy RemoteSigned
Import-Module SQLPS -DisableNameChecking
$SQLInstanceName = "(local)"
$Server = New-Object -TypeName
Microsoft.SqlServer.Management.Smo.Server -ArgumentList $SQLInstanceName
if ($Server.Logins.Contains($userName))
{
$Server.Logins[$userName].Drop()
}
$Login = New-Object -TypeName
Microsoft.SqlServer.Management.Smo.Login -ArgumentList $Server, $userName
$Login.LoginType =
[Microsoft.SqlServer.Management.Smo.LoginType]::SqlLogin
$Login.PasswordExpirationEnabled = $false
$Login.Create($userPassword)
$Login.AddToRole("sysadmin")
$Login.Alter()
$replicationWindowsUser = $vmName + "Replication"
if ($Server.Logins.Contains($replicationWindowsUser))
{
$Server.Logins[$replicationWindowsUser].Drop()
}
$Login = New-Object -TypeName
Microsoft.SqlServer.Management.Smo.Login -ArgumentList $Server,
$replicationWindowsUser
$Login.LoginType =
[Microsoft.SqlServer.Management.Smo.LoginType]::WindowsUser
$Login.PasswordExpirationEnabled = $false
$Login.Create($userPassword)
$Login.AddToRole("sysadmin")
$Login.Alter()
} -Args $vm, $newUserName, $pwd
$session | Remove-PSSession
}
Шаг 11.
Изменение режима проверки
подлинности SQL сервера.
Включение SQL Server Agent.
$sqlVmNames = @("ilgthreetest", "ilgfourtest")
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object
System.Management.Automation.PSCredential($userName, $securePassword)
$newUserName = "Replication"
foreach($vm in $sqlVmNames)
{
$uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -
SkipCNCheck:$true -SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential
-SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
param($vmName)
Set-ExecutionPolicy RemoteSigned
Import-Module SQLPS -DisableNameChecking
$sqlServer = new-object
('Microsoft.SqlServer.Management.Smo.Server') '(local)'
$sqlServer.Settings.LoginMode =
[Microsoft.SqlServer.Management.SMO.ServerLoginMode]::Mixed
$sqlServer.Alter()
CD SQLSERVER:SQL$vmName
$Wmi = (get-item .).ManagedComputer
$sqlInstance = $Wmi.Services['MSSQLSERVER']
$sqlInstance.Stop()
Start-Sleep -s 10
$sqlInstance.Start()
$agent = $Wmi.Services['SQLSERVERAGENT']
$agent.Start()
} -Args $vm
$session | Remove-PSSession
}
Шаг 12.
Восстановление бэкапа базы
$sqlVmNames = @("ilgthreetest", "ilgfourtest")
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object
System.Management.Automation.PSCredential($userName, $securePassword)
foreach($vm in $sqlVmNames)
{
$uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -
SkipCNCheck:$true -SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential
$credential -SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
Set-ExecutionPolicy RemoteSigned
Import-Module SQLPS -DisableNameChecking
$srv = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object
Microsoft.SqlServer.Management.Smo.Database($srv, "AzureProvisioning")
$db.Create()
$backupFilePath = "E:PRJdb.bak"
if (!(Test-Path $backupFilePath))
{
$backupFilePath = "F:PRJdb.bak"
}
Restore-SqlDatabase -ServerInstance "(local)" -Database
AzureProvisioning -BackupFile $backupFilePath -ReplaceDatabase
}
$session | Remove-PSSession
}
Шаг 13.1
Создание репликации.
Конфигурация publisher’а
$distributorVm = "ilgthreetest"
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object
System.Management.Automation.PSCredential($userName,
$securePassword)
$uri = Get-AzureWinRMUri -ServiceName $distributorVm -Name
$distributorVm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -
SkipCNCheck:$true -SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential
-SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
Set-ExecutionPolicy RemoteSigned
Import-Module SQLPS -DisableNameChecking
$publicationFilePath = "E:PRJpublication.sql"
if (!(Test-Path $publicationFilePath))
{
$publicationFilePath = "F:PRJpublication.sql"
}
Invoke-SqlCmd -InputFile $publicationFilePath -
ServerInstance "(local)"
}
$session | Remove-PSSession
Шаг 13.2
Создание репликации.
Копирование базы
$sqlSubscriberVM = "ilgfourtest"
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($userName,
$securePassword)
$uri = Get-AzureWinRMUri -ServiceName $sqlSubscriberVM -Name $sqlSubscriberVM
$sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true -
SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential -
SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
$pathToShare = "E:PRJ"
if (!(Test-Path $pathToShare))
{
$pathToShare = $pathToShare.Replace("E:", "F:")
}
$netSharePath = "PRJ=" + $pathToShare
net user guest /active:yes
net share $netSharePath "/GRANT:Everyone,FULL"
}
$session | Remove-PSSession
$session | Remove-PSSession
$sqlPublisherVM = "ilgthreetest"
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object
System.Management.Automation.PSCredential($userName, $securePassword)
$uri = Get-AzureWinRMUri -ServiceName $sqlPublisherVM -Name
$sqlPublisherVM
$sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true
-SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential -
SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
Set-ExecutionPolicy RemoteSigned
Import-Module SQLPS -DisableNameChecking
$path = "E:PRJ"
if (!(Test-Path $path))
{
$path = $path.Replace("E:", "F:")
}
$backupPath = $path + "new.bak"
Backup-SqlDatabase -ServerInstance '(local)' -Database
"AzureProvisioning" -BackupFile $backupPath
$pass="Super Secure Password1"|ConvertTo-SecureString -
AsPlainText -Force
$cred = New-Object
System.Management.Automation.PsCredential("ILGFOURTESTeugene",$pass)
New-PSDrive -Name R -Root "10.0.0.7PRJ" -PSProvider
FileSystem -Credential $cred
Copy-Item $backupPath "R:"
}
$session | Remove-PSSession
Шаг 13.3
Создание репликации.
Восстановление базы
publisher’а
$uri = Get-AzureWinRMUri -ServiceName $sqlSubscriberVM -Name
$sqlSubscriberVM
$sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true
-SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential -
SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
Set-ExecutionPolicy RemoteSigned
Import-Module SQLPS -DisableNameChecking
$srv = new-Object
Microsoft.SqlServer.Management.Smo.Server("(local)")
$db = New-Object Microsoft.SqlServer.Management.Smo.Database($srv,
"AzureProvisioning")
$db.Create()
$backupPath = "E:PRJnew.bak"
if (!(Test-Path $backupPath))
{
$backupPath = $backupPath.Replace("E:", "F:")
}
Restore-SqlDatabase -ServerInstance "(local)" -Database
AzureProvisioning -BackupFile $backupPath -ReplaceDatabase
}
Шаг 13.3
Создание репликации.
Настройка подписки
$session | Remove-PSSession
$distributorVm = "ilgthreetest"
$userName = "eugene"
$pwd = "Super Secure Password1"
$securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($userName,
$securePassword)
$uri = Get-AzureWinRMUri -ServiceName $distributorVm -Name $distributorVm
$sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true -
SkipRevocationCheck:$true
$session = New-PSSession -ConnectionUri $uri -Credential $credential -
SessionOption $sessionOption
Invoke-Command -Session $session -ScriptBlock {
Set-ExecutionPolicy RemoteSigned
Import-Module SQLPS -DisableNameChecking
$supscriptionFilePath = "E:PRJsubscription.sql"
if (!(Test-Path $supscriptionFilePath))
{
$supscriptionFilePath = $supscriptionFilePath.Replace("E:", "F:")
}
Invoke-SqlCmd -InputFile $supscriptionFilePath -ServerInstance "(local)"
}
$session | Remove-PSSession
Шаг 14.
Опциональный
Удаление окружения
$vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest")
$storageAccountName = "ilagin"
foreach($vm in $vmNames)
{
Remove-AzureDeployment -ServiceName $vm -Slot Production -DeleteVHD
-Force
Remove-AzureService -ServiceName $vm -Force
}
Remove-AzureVNetConfig
Start-Sleep -s 30
Remove-AzureStorageAccount -StorageAccountName $storageAccountName
Заключение
Provisioning в один клик.
Fun или необходимость?
Спасибо за внимание!
eugene.ilagin@gmail.com
https://github.com/ilagin/AzureProvisioning

More Related Content

What's hot (20)

PPTX
CCI2018 - Automatizzare la creazione di risorse con ARM template e PowerShell
walk2talk srl
 
PDF
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
DK Lee
 
PDF
Nodejs first class
Fin Chen
 
PPTX
How to scheduled jobs in a cloudera cluster without oozie
Tiago Simões
 
PPT
WordPress Plugins: ur doin it wrong
Will Norris
 
PDF
WebGUI Developers Workshop
Plain Black Corporation
 
PDF
Dandelion 0.10.0
Thibault DUCHATEAU
 
DOCX
Deploying to azure web sites
Giant Penguin
 
PDF
Automated Java Deployments With Rpm
Martin Jackson
 
PDF
Czym jest webpack i dlaczego chcesz go używać?
Marcin Gajda
 
PDF
Building Real-Time Applications with Android and WebSockets
Sergi Almar i Graupera
 
PDF
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
Sungchul Park
 
ODP
Puppet and Apache CloudStack
Puppet
 
PPTX
ARGUS - THE OMNISCIENT CI
Cosmin Poieana
 
PDF
CRESTCon Asia 2018 - Config Password Encryption Gone Wrong
Keith Lee
 
PPT
Ant
Manav Prasad
 
PPTX
Moving a Windows environment to the cloud - DevOps Galway Meetup
Giulio Vian
 
PDF
Scala Frustrations
takezoe
 
PPTX
Sherlock Homepage - A detective story about running large web services (VISUG...
Maarten Balliauw
 
PPTX
Faster Java EE Builds with Gradle
Ryan Cuprak
 
CCI2018 - Automatizzare la creazione di risorse con ARM template e PowerShell
walk2talk srl
 
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
DK Lee
 
Nodejs first class
Fin Chen
 
How to scheduled jobs in a cloudera cluster without oozie
Tiago Simões
 
WordPress Plugins: ur doin it wrong
Will Norris
 
WebGUI Developers Workshop
Plain Black Corporation
 
Dandelion 0.10.0
Thibault DUCHATEAU
 
Deploying to azure web sites
Giant Penguin
 
Automated Java Deployments With Rpm
Martin Jackson
 
Czym jest webpack i dlaczego chcesz go używać?
Marcin Gajda
 
Building Real-Time Applications with Android and WebSockets
Sergi Almar i Graupera
 
스프링 코어 강의 2부 - Java 구성을 활용한 스프링 코어 사용
Sungchul Park
 
Puppet and Apache CloudStack
Puppet
 
ARGUS - THE OMNISCIENT CI
Cosmin Poieana
 
CRESTCon Asia 2018 - Config Password Encryption Gone Wrong
Keith Lee
 
Moving a Windows environment to the cloud - DevOps Galway Meetup
Giulio Vian
 
Scala Frustrations
takezoe
 
Sherlock Homepage - A detective story about running large web services (VISUG...
Maarten Balliauw
 
Faster Java EE Builds with Gradle
Ryan Cuprak
 

Viewers also liked (15)

PDF
Bridging the Gap in Corporate Succession Planning
Wendy Thomson
 
PPTX
Azure provisioning at your control
Govind Kanshi
 
PPT
Reinventing Your Business By Reinventing Your Talent
matt_stencil
 
PPT
Parallels Automation Executive Summary Apr2010
acallaly
 
PPT
Ensim Unify Bpos Exchange2010 Provisioning
Marcel Kardol
 
PPTX
Strategies to automate deployment and provisioning of Microsoft Azure.
HARMAN Services
 
PDF
OneBill Software for Telecom Industry
johndemello07
 
PDF
Collaborative Leadership in the Borderless Workplace
TMA World
 
PDF
The leadership lessons of stevejobs by HBR
vrkraam
 
PDF
SURE! Subscription Billing & Relationship Management for IaaS providers
SURE!
 
PDF
Scaling Sales & Billing Operations in the Subscription Economy (Accelerate East)
Zuora, Inc.
 
PDF
Putting Succession Planning into Practice – Talent Assessment and Development
The HR Observer
 
PPTX
Migration from ISV toward SaaS
Ruud Ramakers
 
PDF
8 Archetypes of Leadership
Thane Ritchie
 
PDF
The Operations Perspective: Scaling Operations in the Subscription Economy
Zuora, Inc.
 
Bridging the Gap in Corporate Succession Planning
Wendy Thomson
 
Azure provisioning at your control
Govind Kanshi
 
Reinventing Your Business By Reinventing Your Talent
matt_stencil
 
Parallels Automation Executive Summary Apr2010
acallaly
 
Ensim Unify Bpos Exchange2010 Provisioning
Marcel Kardol
 
Strategies to automate deployment and provisioning of Microsoft Azure.
HARMAN Services
 
OneBill Software for Telecom Industry
johndemello07
 
Collaborative Leadership in the Borderless Workplace
TMA World
 
The leadership lessons of stevejobs by HBR
vrkraam
 
SURE! Subscription Billing & Relationship Management for IaaS providers
SURE!
 
Scaling Sales & Billing Operations in the Subscription Economy (Accelerate East)
Zuora, Inc.
 
Putting Succession Planning into Practice – Talent Assessment and Development
The HR Observer
 
Migration from ISV toward SaaS
Ruud Ramakers
 
8 Archetypes of Leadership
Thane Ritchie
 
The Operations Perspective: Scaling Operations in the Subscription Economy
Zuora, Inc.
 
Ad

Similar to Provisioning in Microsoft Azure (20)

PDF
Deploying SharePoint @ Cloud
Juan Andrés Valenzuela
 
PPTX
Enrique lima azure-it-pro-ps
Enrique Lima
 
PPTX
Automating Azure VMs with PowerShell
Alexander Feschenko
 
PPTX
Automating Your Azure Environment
Michael Collier
 
PPTX
Windows azure overview for SharePoint Pros
Usama Wahab Khan Cloud, Data and AI
 
PPTX
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...
SPS Paris
 
PPTX
NIC - Windows Azure Pack - Level 300
Kristian Nese
 
PDF
Charla - SharePoint en la Nube (17Jul2013)
Juan Andrés Valenzuela
 
PPTX
IaaS azure_vs_amazon
Udaiappa Ramachandran
 
PPTX
Windows Azure Virtual Machines
Karthikeyan Anbarasan (AK)
 
PDF
Adelaide Global Azure Bootcamp 2018 - Azure 101
Balabiju
 
PDF
Microsoft azure infographic 2015 2.5
Kesavan Munuswamy
 
PPTX
Azure Day Reloaded 2019 - ARM Template workshop
Marco Obinu
 
PPTX
ECS19 - Mustafa Toroman, Sasa Kranjac - SOUP TO NUTS: MICROSOFT AZURE POWERCLASS
European Collaboration Summit
 
PPTX
Azure Virtual Desktop Overview.pptx
ceyhan1
 
PDF
Spca2014 share point azure_the_best_of_friends_moneypenny
NCCOMMS
 
PPTX
Don't be afraid of moving infrastructure into Azure!
Ryan Dennis
 
PPTX
6 Ways to Get More From Your Azure
C/D/H Technology Consultants
 
PPTX
Windows Azure for Developers - Service Management
Michael Collier
 
PPTX
6 Ways to Get More From Your Azure
Holly Plude
 
Deploying SharePoint @ Cloud
Juan Andrés Valenzuela
 
Enrique lima azure-it-pro-ps
Enrique Lima
 
Automating Azure VMs with PowerShell
Alexander Feschenko
 
Automating Your Azure Environment
Michael Collier
 
Windows azure overview for SharePoint Pros
Usama Wahab Khan Cloud, Data and AI
 
D2 - Automate Custom Solutions Deployment on Office 365 and Azure - Paolo Pia...
SPS Paris
 
NIC - Windows Azure Pack - Level 300
Kristian Nese
 
Charla - SharePoint en la Nube (17Jul2013)
Juan Andrés Valenzuela
 
IaaS azure_vs_amazon
Udaiappa Ramachandran
 
Windows Azure Virtual Machines
Karthikeyan Anbarasan (AK)
 
Adelaide Global Azure Bootcamp 2018 - Azure 101
Balabiju
 
Microsoft azure infographic 2015 2.5
Kesavan Munuswamy
 
Azure Day Reloaded 2019 - ARM Template workshop
Marco Obinu
 
ECS19 - Mustafa Toroman, Sasa Kranjac - SOUP TO NUTS: MICROSOFT AZURE POWERCLASS
European Collaboration Summit
 
Azure Virtual Desktop Overview.pptx
ceyhan1
 
Spca2014 share point azure_the_best_of_friends_moneypenny
NCCOMMS
 
Don't be afraid of moving infrastructure into Azure!
Ryan Dennis
 
6 Ways to Get More From Your Azure
C/D/H Technology Consultants
 
Windows Azure for Developers - Service Management
Michael Collier
 
6 Ways to Get More From Your Azure
Holly Plude
 
Ad

Recently uploaded (20)

PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PPTX
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PDF
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
MiniTool Partition Wizard Free Crack + Full Free Download 2025
bashirkhan333g
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Home Care Tools: Benefits, features and more
Third Rock Techkno
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
IDM Crack with Internet Download Manager 6.42 Build 43 with Patch Latest 2025
bashirkhan333g
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Comprehensive Risk Assessment Module for Smarter Risk Management
EHA Soft Solutions
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
유니티에서 Burst Compiler+ThreadedJobs+SIMD 적용사례
Seongdae Kim
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 

Provisioning in Microsoft Azure

  • 1. Развертывания и настройка окружений, автоматизация и шаблонизация, инструменты и сценарии, Azure PowerShell Provisioning в Microsoft Azure Eugene Ilagin https://github.com/ilagin/
  • 2. • Что такое Provisioning? • Зачем это знать и где применять? • Ручная настройка окружения или автоматическая? • Provisioning как элемент Continuous Delivery. Введение
  • 3. Hands-on пример API Server Web Server Database Server Replication Server Web API Web App Replicated Database Database Transactional Replication • Миграция web- приложения с on- premises на IaaS • Набор скриптов, позволяющий сделать все в один клик
  • 4. • Azure PowerShell – open source модуль для Windows PowerShell • Azure Account. Subscription • Способы подключения к Azure подписке • Azure AD • Сертификат https://github.com/Azure/azure-powershell/releases Установка Azure PowerShell и подключение подписки
  • 6. $commonLocation = "North Europe" $storageAccountName = "ilagin" $subscriptionName = Get-AzureSubscription | Select SubscriptionName New-AzureStorageAccount -StorageAccountName $storageAccountName -Label "TestStorage" -Location $commonLocation Select-AzureSubscription $subscriptionName.SubscriptionName.ToString() Set-AzureSubscription -SubscriptionName $subscriptionName.SubscriptionName.ToString() -CurrentStorageAccount $storageAccountName
  • 7. • Объединение виртуальных машин в LAN • Доступ к ресурсам в пределах LAN • Организация VPN • Создание VNet перед созданием VM Шаг 2. Создание Виртуальной Сети
  • 9. <NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration"> <VirtualNetworkConfiguration> <Dns /> <VirtualNetworkSites> <VirtualNetworkSite name="MyVirtualNetwork" Location="North Europe"> <AddressSpace> <AddressPrefix> 10.0.0.1/26</AddressPrefix> </AddressSpace> <Subnets> <Subnet name="Subnet1"> <AddressPrefix> 10.0.0.1/26</AddressPrefix> </Subnet> </Subnets> </VirtualNetworkSite> </VirtualNetworkSites> </VirtualNetworkConfiguration> </NetworkConfiguration>
  • 11. • Доступные образы: Get-AzureVMImage. • Vmdepot.com • Выбор конфигурации. A0-A11. D1- D14. • VM с MS SQL стоят дороже. • Операции создания и provisioning’a занимают относительно длительное время Шаг 3. Создание Виртуальных Машин
  • 12. $commonLocation = "North Europe" $webServerImageName = "bd507d3a70934695bc2128e3e5a255ba__RightImage-Windows- 2012-x64-iis8-v14.2" $dbServerImageName = "fb83b3509582419d99629ce476bcb5c8__SQL-Server-2012-SP2- 11.0.5569.0-Ent-ENU-Win2012-cy15su02" $virtualNetworkName = "MyVirtualNetwork" $subnetName = "Subnet1" $vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest") $pwd = "Super Secure Password1" $instanceSize = "Large" $userName = "eugene" $vm0 = New-AzureVMConfig -Name $vmNames[0] -InstanceSize $instanceSize -Image $webServerImageName $vm0 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName -Password $pwd | Set-AzureSubnet $subnetName $vm0 | New-AzureVM -ServiceName $vmNames[0] -VNetName $virtualNetworkName – Location $commonLocation
  • 13. $vm1 = New-AzureVMConfig -Name $vmNames[1] -InstanceSize $instanceSize - Image $webServerImageName $vm1 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName - Password $pwd | Set-AzureSubnet $subnetName $vm1 | New-AzureVM -ServiceName $vmNames[1] -VNetName $virtualNetworkName –Location $commonLocation $vm2 = New-AzureVMConfig -Name $vmNames[2] -InstanceSize $instanceSize - Image $dbServerImageName $vm2 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName - Password $pwd | Set-AzureSubnet $subnetName $vm2 | New-AzureVM -ServiceName $vmNames[2] -VNetName $virtualNetworkName –Location $commonLocation $vm3 = New-AzureVMConfig -Name $vmNames[3] -InstanceSize $instanceSize - Image $dbServerImageName $vm3 | Add-AzureProvisioningConfig -Windows -AdminUserName $userName - Password $pwd | Set-AzureSubnet $subnetName $vm3 | New-AzureVM -ServiceName $vmNames[3] -VNetName $virtualNetworkName –Location $commonLocation
  • 14. • Потеря IP адреса после выключения • Зависимость ресурсов от IP адреса Шаг 4. Присвоение статических IP
  • 15. $vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest") $staticIPs = @("10.0.0.4", "10.0.0.5", "10.0.0.6", "10.0.0.7") for($i=0; $i -le 3; $i++) { Get-AzureVM -ServiceName $vmNames[$i] -Name $vmNames[$i] | Set-AzureStaticVNetIP -IPAddress $staticIPs[$i] | Update-AzureVM }
  • 16. Шаг 5. Добавление Endpoint’ов к виртуальным машинам • Что такое endpoint? • 2 endpoint’а по умолчанию: RDP, PowerShell • HTTP(80), SQL(1433) и другие - закрыты
  • 17. $webVmNames = @("ilgonetest", "ilgtwotest") foreach($vm in $webVmNames) { Get-AzureVM -ServiceName $vm -Name $vm | Add-AzureEndpoint -Name "HttpIn" -Protocol "tcp" -PublicPort 80 -LocalPort 80 | Update-AzureVM }
  • 19. $vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest") $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) foreach($vm in $vmNames) { $uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm $sessionOption = New-PSSessionOption -SkipCACheck:$true - SkipCNCheck:$true -SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential -SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock {Get- NetFirewallProfile | Set-NetFirewallProfile –Enabled False} $session | Remove-PSSession }
  • 20. • Обзор доступных вариантов • VHD – Virtual Hard Drive • Azure Blob Storage Шаг 7. Загрузка файлов на VM
  • 21. $vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest") $volumePath = "D:FileStorage.vhd" $folderToCopy = "D:PRJ" $azureStoragePaths = ("http://ilagin.blob.core.windows.net/vhdstore/FileStorage0.vhd", "http://ilagin.blob.core.windows.net/vhdstore/FileStorage1.vhd", "http://ilagin.blob.core.windows.net/vhdstore/FileStorage2.vhd", "http://ilagin.blob.core.windows.net/vhdstore/FileStorage3.vhd") $volume = new-vhd -Path $volumePath -SizeBytes 40MB | ` Mount-VHD -PassThru | ` Initialize-Disk -PartitionStyle mbr -Confirm:$false -PassThru | ` New-Partition -UseMaximumSize -AssignDriveLetter -MbrType IFS | ` Format-Volume -NewFileSystemLabel "VHD" -Confirm:$false Copy-Item $folderToCopy "$($volume.DriveLetter):" -Recurse Dismount-VHD $volumePath
  • 22. for($i=0; $i -le 3; $i++) { Add-AzureVhd -Destination $azureStoragePaths[$i] - LocalFilePath $volumePath Get-AzureVM $vmNames[$i] $vmNames[$i] | Add-AzureDataDisk -ImportFrom -MediaLocation $azureStoragePaths[$i] -DiskLabel "EXT" -LUN 0 | Update-AzureVM }
  • 24. $webVmNames = @("ilgonetest", "ilgtwotest") $webPaths = @("E:PRJAPI", "E:PRJWeb") $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $i = 0 foreach($vm in $webVmNames) { $uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm $sessionOption = New-PSSessionOption -SkipCACheck:$true - SkipCNCheck:$true -SkipRevocationCheck:$true
  • 25. $session = New-PSSession -ConnectionUri $uri -Credential $credential - SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock { param($path, $user, $password) Set-ExecutionPolicy RemoteSigned Import-Module WebAdministration if (!(Test-Path $path)) { $path = $path.Replace("E:", "F:") } Remove-Item IIS:AppPoolsAdminAppPool -Force -Recurse $appPool = New-WebAppPool -Name "AdminAppPool" $appPool.processModel.userName = $user $appPool.processModel.password = $password $appPool.processModel.identityType = "SpecificUser" $appPool | Set-Item }
  • 26. Remove-Item IIS:Sites"Default Web Site" -Force -Recurse Remove-Item IIS:SitesAzureProvisioning -Force -Recurse New-Item IIS:SitesAzureProvisioning -physicalPath $path - bindings @{protocol="http";bindingInformation=":80:"} Set-ItemProperty IIS:SitesAzureProvisioning -name applicationPool -value AdminAppPool } -Args $webPaths[$i], $userName, $pwd $session | Remove-PSSession $i++ }
  • 27. Шаг 9. Добавление Windows пользователей
  • 28. $sqlVmNames = @("ilgthreetest", "ilgfourtest") $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $newUserName = "Replication" foreach($vm in $sqlVmNames) { $uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm $sessionOption = New-PSSessionOption -SkipCACheck:$true - SkipCNCheck:$true -SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential - SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock {
  • 29. param($vmName, $userToCreate, $userPassword) $Computer = [ADSI]("WinNT://" + $vmName) $LocalAdmin = $Computer.Create("User", $userToCreate) $LocalAdmin.SetPassword($userPassword) $LocalAdmin.SetInfo() $LocalAdmin.FullName = "Azure Provisioning Demo" $LocalAdmin.SetInfo() $LocalAdmin.UserFlags = 64 + 65536 # ADS_UF_PASSWD_CANT_CHANGE + ADS_UF_DONT_EXPIRE_PASSWD $LocalAdmin.SetInfo() $objOU = [ADSI]("WinNT://" + $vmName + "/Administrators,group") $objOU.add("WinNT://" + $vmName +"/" + $userToCreate) } -Args $vm, $newUserName, $pwd $session | Remove-PSSession }
  • 30. Шаг 10. Добавление SQL пользователей
  • 31. $sqlVmNames = @("ilgthreetest", "ilgfourtest") $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $newUserName = "Replication" foreach($vm in $sqlVmNames) { $uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm $sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true - SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential - SessionOption $sessionOption
  • 32. Invoke-Command -Session $session -ScriptBlock { param($vmName, $userName, $userPassword) Set-ExecutionPolicy RemoteSigned Import-Module SQLPS -DisableNameChecking $SQLInstanceName = "(local)" $Server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $SQLInstanceName if ($Server.Logins.Contains($userName)) { $Server.Logins[$userName].Drop() } $Login = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Login -ArgumentList $Server, $userName $Login.LoginType = [Microsoft.SqlServer.Management.Smo.LoginType]::SqlLogin $Login.PasswordExpirationEnabled = $false $Login.Create($userPassword) $Login.AddToRole("sysadmin") $Login.Alter()
  • 33. $replicationWindowsUser = $vmName + "Replication" if ($Server.Logins.Contains($replicationWindowsUser)) { $Server.Logins[$replicationWindowsUser].Drop() } $Login = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Login -ArgumentList $Server, $replicationWindowsUser $Login.LoginType = [Microsoft.SqlServer.Management.Smo.LoginType]::WindowsUser $Login.PasswordExpirationEnabled = $false $Login.Create($userPassword) $Login.AddToRole("sysadmin") $Login.Alter() } -Args $vm, $newUserName, $pwd $session | Remove-PSSession }
  • 34. Шаг 11. Изменение режима проверки подлинности SQL сервера. Включение SQL Server Agent.
  • 35. $sqlVmNames = @("ilgthreetest", "ilgfourtest") $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $newUserName = "Replication" foreach($vm in $sqlVmNames) { $uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm $sessionOption = New-PSSessionOption -SkipCACheck:$true - SkipCNCheck:$true -SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential -SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock { param($vmName)
  • 36. Set-ExecutionPolicy RemoteSigned Import-Module SQLPS -DisableNameChecking $sqlServer = new-object ('Microsoft.SqlServer.Management.Smo.Server') '(local)' $sqlServer.Settings.LoginMode = [Microsoft.SqlServer.Management.SMO.ServerLoginMode]::Mixed $sqlServer.Alter() CD SQLSERVER:SQL$vmName $Wmi = (get-item .).ManagedComputer $sqlInstance = $Wmi.Services['MSSQLSERVER'] $sqlInstance.Stop() Start-Sleep -s 10 $sqlInstance.Start() $agent = $Wmi.Services['SQLSERVERAGENT'] $agent.Start() } -Args $vm $session | Remove-PSSession }
  • 38. $sqlVmNames = @("ilgthreetest", "ilgfourtest") $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) foreach($vm in $sqlVmNames) { $uri = Get-AzureWinRMUri -ServiceName $vm -Name $vm $sessionOption = New-PSSessionOption -SkipCACheck:$true - SkipCNCheck:$true -SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential -SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock { Set-ExecutionPolicy RemoteSigned Import-Module SQLPS -DisableNameChecking
  • 39. $srv = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)") $db = New-Object Microsoft.SqlServer.Management.Smo.Database($srv, "AzureProvisioning") $db.Create() $backupFilePath = "E:PRJdb.bak" if (!(Test-Path $backupFilePath)) { $backupFilePath = "F:PRJdb.bak" } Restore-SqlDatabase -ServerInstance "(local)" -Database AzureProvisioning -BackupFile $backupFilePath -ReplaceDatabase } $session | Remove-PSSession }
  • 41. $distributorVm = "ilgthreetest" $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $uri = Get-AzureWinRMUri -ServiceName $distributorVm -Name $distributorVm $sessionOption = New-PSSessionOption -SkipCACheck:$true - SkipCNCheck:$true -SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential -SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock { Set-ExecutionPolicy RemoteSigned Import-Module SQLPS -DisableNameChecking
  • 42. $publicationFilePath = "E:PRJpublication.sql" if (!(Test-Path $publicationFilePath)) { $publicationFilePath = "F:PRJpublication.sql" } Invoke-SqlCmd -InputFile $publicationFilePath - ServerInstance "(local)" } $session | Remove-PSSession
  • 44. $sqlSubscriberVM = "ilgfourtest" $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $uri = Get-AzureWinRMUri -ServiceName $sqlSubscriberVM -Name $sqlSubscriberVM $sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true - SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential - SessionOption $sessionOption
  • 45. Invoke-Command -Session $session -ScriptBlock { $pathToShare = "E:PRJ" if (!(Test-Path $pathToShare)) { $pathToShare = $pathToShare.Replace("E:", "F:") } $netSharePath = "PRJ=" + $pathToShare net user guest /active:yes net share $netSharePath "/GRANT:Everyone,FULL" } $session | Remove-PSSession
  • 46. $session | Remove-PSSession $sqlPublisherVM = "ilgthreetest" $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $uri = Get-AzureWinRMUri -ServiceName $sqlPublisherVM -Name $sqlPublisherVM $sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true -SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential - SessionOption $sessionOption
  • 47. Invoke-Command -Session $session -ScriptBlock { Set-ExecutionPolicy RemoteSigned Import-Module SQLPS -DisableNameChecking $path = "E:PRJ" if (!(Test-Path $path)) { $path = $path.Replace("E:", "F:") } $backupPath = $path + "new.bak" Backup-SqlDatabase -ServerInstance '(local)' -Database "AzureProvisioning" -BackupFile $backupPath
  • 48. $pass="Super Secure Password1"|ConvertTo-SecureString - AsPlainText -Force $cred = New-Object System.Management.Automation.PsCredential("ILGFOURTESTeugene",$pass) New-PSDrive -Name R -Root "10.0.0.7PRJ" -PSProvider FileSystem -Credential $cred Copy-Item $backupPath "R:" } $session | Remove-PSSession
  • 50. $uri = Get-AzureWinRMUri -ServiceName $sqlSubscriberVM -Name $sqlSubscriberVM $sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true -SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential - SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock { Set-ExecutionPolicy RemoteSigned Import-Module SQLPS -DisableNameChecking $srv = new-Object Microsoft.SqlServer.Management.Smo.Server("(local)") $db = New-Object Microsoft.SqlServer.Management.Smo.Database($srv, "AzureProvisioning") $db.Create() $backupPath = "E:PRJnew.bak"
  • 51. if (!(Test-Path $backupPath)) { $backupPath = $backupPath.Replace("E:", "F:") } Restore-SqlDatabase -ServerInstance "(local)" -Database AzureProvisioning -BackupFile $backupPath -ReplaceDatabase }
  • 53. $session | Remove-PSSession $distributorVm = "ilgthreetest" $userName = "eugene" $pwd = "Super Secure Password1" $securePassword = ConvertTo-SecureString $pwd -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential($userName, $securePassword) $uri = Get-AzureWinRMUri -ServiceName $distributorVm -Name $distributorVm $sessionOption = New-PSSessionOption -SkipCACheck:$true -SkipCNCheck:$true - SkipRevocationCheck:$true $session = New-PSSession -ConnectionUri $uri -Credential $credential - SessionOption $sessionOption Invoke-Command -Session $session -ScriptBlock {
  • 54. Set-ExecutionPolicy RemoteSigned Import-Module SQLPS -DisableNameChecking $supscriptionFilePath = "E:PRJsubscription.sql" if (!(Test-Path $supscriptionFilePath)) { $supscriptionFilePath = $supscriptionFilePath.Replace("E:", "F:") } Invoke-SqlCmd -InputFile $supscriptionFilePath -ServerInstance "(local)" } $session | Remove-PSSession
  • 56. $vmNames = @("ilgonetest", "ilgtwotest", "ilgthreetest", "ilgfourtest") $storageAccountName = "ilagin" foreach($vm in $vmNames) { Remove-AzureDeployment -ServiceName $vm -Slot Production -DeleteVHD -Force Remove-AzureService -ServiceName $vm -Force } Remove-AzureVNetConfig Start-Sleep -s 30 Remove-AzureStorageAccount -StorageAccountName $storageAccountName
  • 57. Заключение Provisioning в один клик. Fun или необходимость?