Эта статья часть 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
