Эта статья часть 2 из двух частей серии по автоматизации процесса подготовки впритык для рабочих нагрузок IaaS , работающих на платформе Microsoft Azure облака. Этот процесс включает согласование всех задач, подготовку ресурсов облачной фабрики и настройку рабочих нагрузок операционной системы и приложений, работающих в виртуальных машинах Azure. Конечная цель этих усилий — обеспечить ускоренную «нажимную» доставку высокодоступных облачных приложений со сбалансированной нагрузкой.
В первой части этой серии статей я представил пример эффективного использования модулей Runbook и рабочих процессов PowerShell для автоматизации автоматизации Azure с целью полной автоматизации всех аспектов развертывания новых виртуальных машин с балансировкой нагрузки на облачной платформе Microsoft Azure. Если вы еще не завершили Часть 1 этой серии, обязательно сделайте это сейчас, а затем вернитесь сюда, когда закончите, чтобы перейти к шагам Части 2 ниже.
В этой статье я приведу пример рабочей конфигурации PowerShell DSC, которую можно использовать с книгами выполнения Azure Automation для настройки конфигурации компонентов операционной системы и веб-приложений, работающих внутри каждой виртуальной машины, как часть процесса подготовки. Когда мы все закончим, мы сможем вызвать одну книгу запусков, чтобы развернуть все необходимое для подключения нашего веб-приложения: виртуальные машины, балансировка нагрузки, конфигурация ОС и контент веб-приложений.
Что такое PowerShell DSC?
В предыдущих статьях мы обсуждали PowerShell Desired State Configuration (DSC) как декларативный подход для указания конечного состояния сервера и экземпляра приложения. Это в отличие от императивного подхода, который обычно используется в традиционных сценариях. Используя декларативный подход, мы можем сосредоточиться на конечном состоянии, которому должен соответствовать набор экземпляров сервера и приложения, а не на множестве условной логики if-then-else, try-catch. Таким образом, управление конфигурацией упрощается, и мы можем ускорить доставку и обновление решений.
PowerShell DSC был представлен вместе с PowerShell 4.0 для Windows Server 2012 R2 и с тех пор был расширен и для поддержки Linux . В PowerShell 5.0 DSC продолжает расширяться за счет поддержки классов объектов, централизованного составления отчетов об ошибках, упрощения создания ресурсов, зависимости между компьютерами и многого другого!
Давайте начнем!
Чтобы завершить сценарий, представленный в этой статье, вам необходимо загрузить следующие компоненты:
- Загрузка и установка: PowerShell DSC Resource Kit
PowerShell DSC Resource Kit предоставляет дополнительный набор из более чем 40 модулей ресурсов DSC. В этой статье мы будем использовать модуль xWebAdministration для подготовки ресурсов веб-приложения IIS. - Загрузка и установка: модуль Microsoft Azure PowerShell Модуль
Azure PowerShell обеспечивает поддержку сценариев PowerShell для подписок Azure и облачных ресурсов. В этой статье мы будем использовать модуль PowerShell Azure для публикации нашей конфигурации DSC в учетной записи хранилища Azure, где она будет доступна для виртуальных машин Azure, которые предоставляются из среды выполнения Azure Automation, определенной в части 1 эта серия статей.
Настройте полезные нагрузки ОС и приложений внутри виртуальных машин Azure с помощью PowerShell DSC
В приведенной ниже конфигурации DSC мы определим все компоненты, необходимые для развертывания нашего веб-приложения на образе базовой платформы для Windows Server 2012 R2. Эта конфигурация включает функции Windows Server, конфигурации веб-сайта IIS, содержимое веб-приложения и сертификат SSL, который будет использоваться нашим веб-приложением. В дополнение к стандартным ресурсам DSC в приведенном ниже примере также показано, как можно использовать ресурс сценария DSC, в данном случае для развертывания необходимого сертификата SSL.
Configuration WebSiteConfig { # Import DSC WebAdmin Module from DSC Resource Kit Import-DscResource -ModuleName xWebAdministration Node ("localhost") { # Install the Web Server role WindowsFeature IIS { Ensure = "Present" Name = "Web-Server" } # Install the ASP.NET 4.5 role WindowsFeature AspNet { Ensure = "Present" Name = "Web-Asp-Net45" } # Stop the default website xWebsite DefaultSite { Ensure = "Present" Name = "Default Web Site" State = "Stopped" PhysicalPath = "C:\inetpub\wwwroot" DependsOn = "[WindowsFeature]IIS" } # Copy web application content File MyWebAppContent { Ensure = "Present" # You can also set Ensure to "Absent" Type = "Directory" # Default is "File". Recurse = $true # Ensure presence of subdirectories, too SourcePath = "\\XXXdemoad01\source\MyWebApp" DestinationPath = "C:\inetpub\MyWebApp" DependsOn = "[WindowsFeature]AspNet" } # Install SSL Certificate Script MyWebAppCert { SetScript = "Import-PfxCertificate -FilePath \\XXXdemoad01\source\certs\MyWebAppCert.pfx -CertStoreLocation Cert:\LocalMachine\WebHosting" TestScript = "try { (Get-Item Cert:\LocalMachine\WebHosting\ C534DFBFE8DB597F22320682F7BBFBA2611DC45A -ErrorAction Stop).HasPrivateKey} catch { `$False }" GetScript = "@{Ensure = if ((Get-Item Cert:\LocalMachine\WebHosting\ C534DFBFE8DB597F22320682F7BBFBA2611DC45A -ErrorAction SilentlyContinue).HasPrivateKey) {'Present'} else {'Absent'}}" DependsOn = "[WindowsFeature]IIS" } # Create the web site for MyWebApp xWebsite MyWebAppSite { Ensure = "Present" Name = "MyWebApp" State = "Started" PhysicalPath = "C:\inetpub\MyWebApp" BindingInfo = MSFT_xWebBindingInformation { Protocol = "HTTPS" Port = 443 CertificateThumbprint = "C534DFBFE8DB597F22320682F7BBFBA2611DC45A" CertificateStoreName = "WebHosting" } DependsOn = @("[WindowsFeature]IIS", "[File]MyWebAppContent", "[Script]MyWebAppCert") } } }
После ввода указанной выше конфигурации DSC сохраните ее в локальном файле сценария PowerShell, например AADSCWebConfig.ps1.
Публикация конфигурации PowerShell DSC в учетной записи хранения Azure
После сохранения конфигурации DSC в виде локального файла сценария PowerShell нам потребуется опубликовать эту конфигурацию в контейнере учетной записи хранения Azure, чтобы предоставляемые нами виртуальные машины Azure могли получить к ней доступ. Для выполнения этого процесса публикации мы будем использовать модуль Azure PowerShell и приведенный ниже фрагмент сценария из нового окна сеанса Windows PowerShell ISE .
# Authenticate to Azure Add-AzureAccount # Select Azure Subscription and Storage Account $subscriptionName = (Get-AzureSubscription).SubscriptionName | Out-GridView ` -Title "Select Your Azure Subcription" ` -PassThru Select-AzureSubscription ` -SubscriptionName $subscriptionName $storageName = (Get-AzureStorageAccount).StorageAccountName | Out-GridView ` -Title "Select Your Azure Storage Account" ` -PassThru Set-AzureSubscription ` -SubscriptionName $subscriptionName ` -CurrentStorageAccountName $storageName # Publish DSC Configuration to Azure Storage Account Publish-AzureVMDscConfiguration ` -ConfigurationPath .\AADSCWebConfig.ps1 ` -Force
Наконечник! Выбирая подписку и учетную запись хранения Azure в приведенном выше фрагменте кода, обязательно выберите ту же подписку и учетную запись хранения, которые использовались в части 1 этой серии статей, в вашей среде выполнения Azure Automation.
Во время процесса публикации, описанного выше, Конфигурация DSC будет упакована в файл .ZIP вместе со всеми модулями, импортированными с помощью Import-Module в блоке Configuration. По умолчанию этот результирующий пакет файлов .ZIP будет загружен в контейнер хранения с именем windows-powershell-dsc в выбранной учетной записи хранения Azure.
Используйте расширения агента Azure VM для применения конфигурации PowerShell DSC
Наша конфигурация PowerShell DSC определена и опубликована в нашей учетной записи хранения Azure. Теперь нам нужно добавить немного дополнительного кода в исходный Runbook автоматизации Azure, который мы создали в первой части этой серии. Этот дополнительный код будет применять нашу опубликованную конфигурацию DSC внутри каждой виртуальной машины, используя расширение DSC агента виртуальной машины Azure .
Откройте модуль Runbook Azure Automation, который вы определили в первой части этой серии, и отредактируйте его в черновом режиме. Вставьте выделенный код между блоками кода Set-AzureSubnet и New-AzureVM, как показано ниже.
... # Specify HA Availability Set for VM $vm = Set-AzureAvailabilitySet ` -VM $vm ` -AvailabilitySetName $Using:availabilitySetName # Specify DSC Configuration to Apply within VM $vm = Set-AzureVMDSCExtension ` -VM $vm ` -ConfigurationArchive $Using:dscArchive ` -ConfigurationName $Using:dscConfigName # Provision new VM with specified configuration New-AzureVM ` -VMs $vm ` -ServiceName $Using:vmServiceName ` -VnetName $Using:vNetName ` -AffinityGroup $Using:affinityGroupName ` -WaitForBoot ...
Это оно! Сохраните и протестируйте ваш исправленный Runbook. После завершения Runbook у вас должно быть полностью развернуто готовое облачное приложение — ресурсы облачной фабрики, конфигурация ОС, содержимое веб-приложения и настройки приложения — все из одной «кнопки».
Что дальше?
В следующих статьях я расскажу о дополнительных сценариях автоматизации с помощью Microsoft Azure. В то же время, не забудьте проверить эти дополнительные ресурсы, чтобы продолжить обучение:
- Первые эксперты: станьте нашим следующим специалистом по гибридным облакам!
- Виртуальная академия Microsoft: автоматизация облака с помощью Azure Automation