Статьи

Сквозное предоставление рабочей нагрузки IaaS в облаке (часть 2)

Эта статья часть 2 из двух частей серии по автоматизации процесса подготовки впритык для рабочих нагрузок IaaS , работающих на платформе Microsoft Azure облака. Этот процесс включает согласование всех задач, подготовку ресурсов облачной фабрики и настройку рабочих нагрузок операционной системы и приложений, работающих в виртуальных машинах Azure. Конечная цель этих усилий — обеспечить ускоренную «нажимную» доставку высокодоступных облачных приложений со сбалансированной нагрузкой.

Сквозное обеспечение IaaS в облаке

В первой части этой серии статей я представил пример эффективного использования модулей 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. В то же время, не забудьте проверить эти дополнительные ресурсы, чтобы продолжить обучение: