Статьи

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

В предыдущих статьях мы уже обсуждали Azure автоматизацию , Azure VM расширения агента и PowerShell Желаемой State Configuration (DSC) в качестве индивидуальных средств и методы автоматизированной нагрузки провизий. Меня часто спрашивают о том, как эти инструменты можно использовать вместе для организации сквозного предоставления облачных рабочих нагрузок, включая компоненты фабрики, ОС и приложений.

образ

Эта статья является частью первой серии из двух частей. 

В этой статье я приведу пример эффективного использования модулей Runbook Azure Automation и рабочих процессов PowerShell в рамках согласованного подхода для полной автоматизации всех аспектов обеспечения новых рабочих нагрузок IaaS на облачной платформе Microsoft Azure.

Во второй части этой серии статей я приведу пример рабочей конфигурации PowerShell DSC, которую можно использовать с книгами выполнения Azure Automation для настройки конфигурации компонентов операционной системы и приложений, работающих внутри каждой виртуальной машины, как часть процесса подготовки.

Что, когда и где?

У нас, конечно, нет недостатка в технологиях автоматизации в наши дни! На самом деле, можно утверждать, что у нас так много различных инструментов для автоматизации, что иногда бывает сложно понять, какие инструменты использовать для конкретного сценария. Поскольку я помогал клиентам с автоматизированными последовательностями предоставления услуг, вот подход, который я нашел, работает хорошо:

  1. Организовать общий процесс подготовки с помощью Azure Automation
  2. Предоставляйте ресурсы облачной фабрики с помощью операций PowerShell Workflow с помощью модулей запуска Azure Automation
  3. Настройте полезные нагрузки ОС и приложений внутри виртуальных машин Azure с помощью PowerShell DSC
  4. Публикация конфигурации PowerShell DSC в учетной записи хранения Azure
  5. Используйте расширения агента Azure VM для применения конфигурации PowerShell DSC

В ближайшем будущем также будет полезно включить Azure Resource Manager (ARM) в свой инструментарий автоматизации для управления облачными ресурсами как связанной группой зависимостей. Однако в настоящее время автоматизация ARM ограничена подмножеством ресурсов Azure PaaS. Поддержка Azure IaaS скоро появится, поэтому следите за обновлениями!

В следующих нескольких разделах этой статьи я подробно расскажу о шагах № 1 и № 2 выше. Во второй части этой серии, состоящей из двух частей, я закончу с описанием шагов № 3, № 4 и № 5.

Подготовьте подписку Azure

В примере в этой статье предполагается, что в вашей подписке Azure уже есть несколько базовых компонентов IaaS с согласованным соглашением об именах, в том числе:

  • Родственная группа: xxx labag01
  • Учетная запись хранения: xxx labstor01
  • Виртуальная сеть : ххх labnet01
  • Windows Server Active Directory VM: xxx labad01

При подготовке этих компонентов замените xxx вашими уникальными инициалами, чтобы прийти к согласованному соглашению об именах, которое предоставляет глобально уникальные имена для учетной записи хранения и облачной службы для виртуальной машины контроллера домена Windows Server Active Directory. Если вам нужна помощь в подготовке этих компонентов IaaS, ознакомьтесь со следующими ресурсами, которые помогут вам начать работу:

Организовать общий процесс подготовки с помощью Azure Automation

Azure Automation предоставляет надежную, масштабируемую платформу для управления долгосрочными процессами, которые могут затрагивать несколько служб и ресурсов. Последовательности автоматизации создаются в виде модулей запусков, которые включают в себя действия PowerShell Workflow. Благодаря использованию рабочих процессов PowerShell рабочие книги Azure Automation можно приостанавливать, возобновлять и восстанавливать после непредвиденных событий, сохраняя текущее состояние выполненных действий в рабочей книге.

Если вы еще не настроили Azure Automation в своей подписке Microsoft Azure или вам нужна помощь с основами создания модулей Runbook, ознакомьтесь с этой пошаговой статьей, чтобы пройти весь процесс для начала работы …

Как только ваша учетная запись Azure Automation настроена и готова к работе, давайте создадим новую рабочую книгу Azure Automation для подготовки нашего нового облачного приложения, которое мы назовем MyWebApp в этой статье.

    workflow New-MyWebAppDeployment
    {
    }

Как упоминалось выше, модули Runbook Azure Automation используют рабочие процессы PowerShell, поэтому мы определяем наш новый модуль Runbook с помощью ключевого слова workflow, описанного выше.

  • Наконечник! Чтобы получить пошаговые инструкции по основам создания новых модулей Runbook, обязательно ознакомьтесь со статьей « Приступая к работе», ссылки на которую приведены выше, для быстрого ознакомления.

В целях обеспечения возможности повторного использования этой книги запусков для различных сценариев инициализации я определю набор входных параметров в верхней части рабочего процесса. Azure Automation запросит ввод данных пользователем для каждого определенного параметра при ручном запуске этой книги запусков, или вы можете указать значения этих параметров при программном вызове этой книги запусков из другой книги запусков или сценария PowerShell.

    workflow New-MyWebAppDeployment
    {       
        param(
           
            [parameter(Mandatory=$true)]
            [String]
            $subscriptionName,
           
            [parameter(Mandatory=$true)]
            [String]
            $deploymentPrefix,
           
            [parameter(Mandatory=$true)]
            [Int]
            $numberOfVMs,
           
            [parameter(Mandatory=$true)]
            [String]
            $vmInstanceSize,
           
            [parameter(Mandatory=$true)]
            [String]
            $vmDomain,
       
            [parameter(Mandatory=$true)]
            [String]
            $vmDomainNetBIOS     
        )
    }

Давайте также объявим набор переменных в верхней части нашего рабочего процесса для общих значений, которые будут использоваться при подготовке виртуальных машин,

    workflow New-MyWebAppDeployment
    {

           ... continued from above ...

           # Get Azure credential for authenticating to Azure subscriptions
       $cred = Get-AutomationPSCredential -Name 'AzureAutomationAccount'

       # Get vmAdmin credential for admin access inside each VM
       $vmAdmin = Get-AutomationPSCredential -Name 'AzureAdmin'
      
       # Set common variable values for provisioning each VM
       $storageName = $deploymentPrefix + 'stor01'
       $vmServiceName = $deploymentPrefix +'app'
       $affinityGroupName = $deploymentPrefix + 'ag01'
       $availabilitySetName = $deploymentPrefix + 'app'
       $vNetName = $deploymentPrefix + 'net01'
       $subnetName ='Subnet-1'
       $dscArchive = 'AADSCWebConfig.ps1.zip'
       $dscConfigName = 'WebSiteConfig'

    }

Теперь, когда мы создали начальную часть нашего runbook, давайте сохраним его как черновик и продолжим добавление кода, который обеспечит нашу ВМ и приложение.

Предоставление ресурсов облачной структуры с помощью операций PowerShell Workflow

В парах раздел нашего runbook рабочего выше, вы заметите , что мы определили $ numberOfVMs параметр , чтобы принять, в качестве входных данных, количество балансировки нагрузки виртуальных машин , которые мы хотели бы предоставление для нашего приложения. Чтобы обеспечить гибкость в предоставлении переменного количества виртуальных машин, мы добавим цикл for в наш рабочий процесс, который будет обрабатывать подготовку для каждой виртуальной машины.

    workflow New-MyWebAppDeployment
    {

          ... continued from above ...

       for ($i=1; $i -le $numberOfVMs; $i++)
       {

       }

    }

В начале каждой итерации цикла for мы добавим код для проверки текущего состояния рабочего процесса и подключимся к желаемой подписке Azure.

    workflow New-MyWebAppDeployment
    {

           ... continued from above ...

       for ($i=1; $i -le $numberOfVMs; $i++)
       {

            # Save current state of workflow
            Checkpoint-Workflow
          
            # Connect to Azure subscription
            Add-AzureAccount -Credential $cred

            Select-AzureSubscription `
              -SubscriptionName $subscriptionName
          
            # Set current Azure Storage Account
            Set-AzureSubscription `
              -SubscriptionName $subscriptionName `
              -CurrentStorageAccountName $storageName

       }

    }

Задачи обеспечения облачной рабочей нагрузки могут включать много разных облачных ресурсов и быть относительно длительными последовательностями. Использование описанного выше подхода для определения состояния рабочего процесса контрольных точек и повторное подключение к желаемой подписке Azure с каждой итерацией нашего цикла for предоставит этой программе Runbook возможность корректно возобновить работу в случае приостановки или неожиданного прерывания рабочего процесса.

Далее, давайте добавим наш код для обеспечения каждой виртуальной машины внутри цикла for, который мы определили выше. Поскольку подготовка новой виртуальной машины Azure может включать несколько отдельных действий для создания требуемой конфигурации виртуальной машины, мы сгруппируем все эти связанные шаги в одно действие рабочего процесса InlineScript .

    workflow New-MyWebAppDeployment
    {

           ... continued from above ...

       for ($i=1; $i -le $numberOfVMs; $i++)
       {

            Checkpoint-Workflow
          
            # Connect to Azure subscription
            Add-AzureAccount -Credential $cred

            Select-AzureSubscription `
              -SubscriptionName $subscriptionName
          
            # Set current Azure Storage Account
            Set-AzureSubscription `
              -SubscriptionName $subscriptionName `
              -CurrentStorageAccountName $storageName

            # Provision VM
            InlineScript {
        
                 $currentVM = "{0:D2}" -f $Using:i
                 $vmName = $Using:deploymentPrefix + 'app' + $currentVM
                 $vmImage = @((Get-AzureVMImage |
                   Where-Object Label -like `
                   "Windows Server 2012 R2 Datacenter*").ImageName)[-1]
                 $vmAdmin = $Using:vmAdmin
         
                 # Specify VM name, image and size
                 $vm = New-AzureVMConfig `
                   -Name $vmName `
                   -ImageName $vmImage `
                   -InstanceSize $Using:vmInstanceSize
        
                 # Specify VM local admin and domain join creds
                 $vm = Add-AzureProvisioningConfig `
                   -VM $vm `
                   -WindowsDomain `
                   -AdminUserName $vmAdmin.Username `
                   -Password $vmAdmin.GetNetworkCredential().Password `
                   -JoinDomain $Using:vmDomain `
                   -Domain $Using:vmDomainNetBIOS `
                   -DomainUserName $vmAdmin.Username `
                   -DomainPassword `
                     $vmAdmin.GetNetworkCredential().Password
            
                 # Specify load-balanced firewall endpoint for HTTPS
                 $vm = Add-AzureEndpoint `
                   -VM $vm `
                   -Name 'WebHTTPS' `
                   -LBSetName 'LBWebHTTPS' `
                   -DefaultProbe `
                   -Protocol tcp `
                   -LocalPort 443 `
                   -PublicPort 443
        
                 # Specify VNet Subnet for VM
                 $vm = Set-AzureSubnet `
                   -VM $vm `
                   -SubnetNames $Using:subnetName
            
                 # Specify HA Availability Set for VM
                 $vm = Set-AzureAvailabilitySet `
                   -VM $vm `
                   -AvailabilitySetName $Using:availabilitySetName
     
                 # Provision new VM with specified configuration
                 New-AzureVM `
                   -VMs $vm `
                   -ServiceName $Using:vmServiceName `
                   -VnetName $Using:vNetName `
                   -AffinityGroup $Using:affinityGroupName `
                   -WaitForBoot
     
             }

        }

    }

На этом этапе вы можете сохранить и протестировать свой новый runbook. При тестировании Runbook вам будет предложено ввести значения для каждого параметра, который мы определили. Когда появится запрос на DeploymentPrefix , введите xxx lab, где xxx — ваши уникальные инициалы, использованные в начале этой статьи. Этот префикс будет добавлен перед именами ресурсов Azure, используемыми в модуле Runbook, для ссылки на ваше уникальное соглашение об именах.

После завершения Runbook у вас будет несколько виртуальных машин в указанной подписке Azure, учетной записи хранения, группе соответствия и виртуальной сети. Предполагая, что у вас есть виртуальная машина контроллера домена Windows Server Active Directory, работающая в той же виртуальной сети, каждая новая виртуальная машина также будет присоединена в качестве рядового сервера к указанному домену Active Directory.

Что дальше?

Во второй части этой серии статей мы рассмотрим проводку в PowerShell DSC для настройки операционной системы и приложений внутри виртуальной машины как части процесса инициализации. Оставайтесь в курсе!