Упражнение. Использование модулей в реестре

Завершено

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

В этом упражнении вы выполните следующие действия.

  • Создайте файл Bicep, включающий модули из частного реестра.
  • Добавьте ссылки на модули в реестре.
  • Выполните сбору файла Bicep и проверьте его, чтобы понять, как работает процесс восстановления модуля.
  • Перейдите на использование псевдонима реестра.
  • Разверните файл Bicep в Azure.

Создание BICEP-файла

  1. В Visual Studio Code создайте новый файл с именем main.bicep.

  2. Сохраните пустой файл, куда Visual Studio Code загрузит средства Bicep.

    Можно выбрать команду Файл>Сохранить как или нажать клавиши CTRL+S в Windows (⌘+S в macOS). Запомните расположение, в котором вы сохранили файл. Например, можно создать папку templates, куда будет сохранен файл.

Добавьте модули в файл Bicep.

  1. В файле main.bicep добавьте следующие параметры и переменные:

    @description('The Azure region into which the resources should be deployed.')
    param location string = 'westus3'
    
    @description('The name of the App Service app.')
    param appServiceAppName string = 'toy-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the App Service plan SKU.')
    param appServicePlanSkuName string = 'F1'
    
    var appServicePlanName = 'toy-dog-plan'
    
  2. После параметров и переменных используйте следующий код для добавления модуля веб-сайта из реестра. Обязательно замените YOUR_CONTAINER_REGISTRY_NAME на имя частного реестра.

    module website 'br:YOUR_CONTAINER_REGISTRY_NAME.azurecr.io/website:v1' = {
      name: 'toy-dog-website'
      params: {
        appServiceAppName: appServiceAppName
        appServicePlanName: appServicePlanName
        appServicePlanSkuName: appServicePlanSkuName
        location: location
      }
    }
    

    Обратите внимание, что при вводе текста под идентификатором модуля в Bicep отображаются красные волнистые линии, которые затем исчезают. Это происходит потому, что расширение Bicep для Visual Studio Code считывает модуль из реестра и сохраняет его в локальной файловой системе.

  3. Под созданным модулем используйте следующий код, чтобы добавить модуль CDN из реестра. Обязательно замените YOUR_CONTAINER_REGISTRY_NAME на имя частного реестра.

    module cdn 'br:YOUR_CONTAINER_REGISTRY_NAME.azurecr.io/cdn:v1' = {
      name: 'toy-dog-cdn'
      params: {
        httpsOnly: true
        originHostName: website.outputs.appServiceAppHostName
      }
    }
    
  4. Сохраните файл.

Создание и проверка файла Bicep

Здесь вы выполняете сборку файла Bicep в шаблон ARM JSON. Обычно вам не нужно выполнять сборку, но это полезно при обучении работы модулей.

  1. В окне терминала Visual Studio Code выполните следующую команду, чтобы выполнить сборку файла Bicep в JSON-файл:

    az bicep build --file main.bicep
    

    Bicep создает файл с именем main.json в той же папке, что и файл main.bicep.

  2. Откройте файл main.json.

    Обратите внимание, что в разделе resources шаблона ARM JSON, начинающемся примерно со строки 134, некоторые ресурсы имеют тип Microsoft.Resources/deployments. Эти ресурсы представляют развертывания модулей, которые были определены в модуле, добавленном из реестра.

  1. В окне терминала Visual Studio Code выполните следующую команду, чтобы выполнить сборку файла Bicep в JSON-файл:

    bicep build main.bicep
    

    Bicep создает файл с именем main.json в той же папке, что и файл main.bicep.

  2. Откройте файл main.json.

    Обратите внимание, что в разделе resources шаблона ARM JSON, начинающемся примерно со строки 134, некоторые ресурсы имеют тип Microsoft.Resources/deployments. Эти ресурсы представляют развертывания модулей, которые были определены в модуле, добавленном из реестра.

Создание псевдонима реестра

Вместо того чтобы внедрять URL-адрес реестра в файл Bicep, вы решили создать псевдоним реестра. Такой подход упрощает чтение файла Bicep.

  1. В Visual Studio Code создайте новый файл с именем bicepconfig.json. Создайте его в той же папке, что и файл main.bicep.

  2. Вставьте следующий код в файл bicepconfig.json. Обязательно замените YOUR_CONTAINER_REGISTRY_NAME на имя частного реестра.

    {
      "moduleAliases": {
        "br": {
          "ToyCompanyRegistry": {
            "registry": "YOUR_CONTAINER_REGISTRY_NAME.azurecr.io"
          }
        }
      }
    }
    
  3. Сохраните файл.

Использование псевдонима реестра

Здесь вы обновляете файл Bicep, чтобы использовать псевдоним реестра вместо непосредственного обращения к реестру.

  1. Откройте файл main.bicep.

  2. Найдите определение модуля website и включите в него псевдоним реестра:

    module website 'br/ToyCompanyRegistry:website:v1' = {
      name: 'toy-dog-website'
      params: {
        appServiceAppName: appServiceAppName
        appServicePlanName: appServicePlanName
        appServicePlanSkuName: appServicePlanSkuName
        location: location
      }
    }
    

    Совет

    Обязательно измените начало пути к модулю с br: на br/. Кроме того, после ToyCompanyRegistry замените символ косой черты (/) на двоеточие (:).

  3. Внесите аналогичное изменение в модуль cdn:

    module cdn 'br/ToyCompanyRegistry:cdn:v1' = {
      name: 'toy-dog-cdn'
      params: {
        httpsOnly: true
        originHostName: website.outputs.appServiceAppHostName
      }
    }
    
  4. Сохраните файл.

Проверка файла Bicep

После выполнения всех описанных выше изменений файл main.bicep должен выглядеть, как в следующем примере:

@description('The Azure region into which the resources should be deployed.')
param location string = 'westus3'

@description('The name of the App Service app.')
param appServiceAppName string = 'toy-${uniqueString(resourceGroup().id)}'

@description('The name of the App Service plan SKU.')
param appServicePlanSkuName string = 'F1'

var appServicePlanName = 'toy-dog-plan'

module website 'br/ToyCompanyRegistry:website:v1' = {
  name: 'toy-dog-website'
  params: {
    appServiceAppName: appServiceAppName
    appServicePlanName: appServicePlanName
    appServicePlanSkuName: appServicePlanSkuName
    location: location
  }
}

module cdn 'br/ToyCompanyRegistry:cdn:v1' = {
  name: 'toy-dog-cdn'
  params: {
    httpsOnly: true
    originHostName: website.outputs.appServiceAppHostName
  }
}

Если файл не соответствует примеру, скопируйте пример или откорректируйте свой шаблон в соответствии с примером.

Развернуть в Azure

В окне терминала Visual Studio Code разверните шаблон в Azure, выполнив указанную ниже команду. Этот процесс может занять несколько минут, чтобы завершить успешное развертывание.

az deployment group create \
   --template-file main.bicep
New-AzResourceGroupDeployment -TemplateFile main.bicep

Проверка развертывания

  1. Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы:

    1. Выберите свой аватар в правом верхнем углу страницы.
    2. Выберите Переключить каталог. В списке выберите каталог Песочница Microsoft Learn.
  2. На левой панели выберите Группы ресурсов.

  3. Выберите "[имя группы ресурсов песочницы]"

  4. В меню слева выберите Развертывания.

    Снимок экрана портала Azure: группа ресурсов с выделенным пунктом меню «Развертывания».

    Обратите внимание, что в списке перечислены три развертывания:

    • main представляет развертывание родительского Bicep-файла.
    • toy-dog-cdn и toy-dog-site представляют модули, которые вы включили в файл main.bicep .
  5. Выберите главное развертывание и разверните узел Сведения о развертывании.

    Обратите внимание, что указаны оба модуля, и их типы отображаются как Microsoft.Resources/deployments. Модуль toy-dog-website указывается дважды, так как на его выходные данные также имеется ссылка в шаблоне.

    Снимок экрана с порталом Azure, где приведены сведения о главном развертывании.

  6. Выберите развертывания toy-dog-cdn и toy-dog-website и просмотрите ресурсы, которые были развернуты в рамках каждого из них. Обратите внимание, что они соответствуют ресурсам, определенным в соответствующих модулях.