Ошибка “InvalidOperationString” в Bicep при создании группы ресурсов через Azure CLI в конвейере

Вопрос или проблема

Я получаю следующую ошибку.

{"status":"Failed","error":{"code":"DeploymentFailed","target":"/subscriptions/{subscription_id}/providers/Microsoft.Resources/deployments/assign_role_to_subscription","message":"По крайней мере, одна операция развертывания ресурса завершилась неудачей. Пожалуйста, перечислите операции развертывания для получения подробностей. Для получения информации о использовании смотрите https://aka.ms/arm-deployment-operations.","details":
[{"code":"InvalidOperationString",
"message":"Неверная строка операции {subscription_name} предоставлена в запросе"}]}}

Я запускаю следующий bicep файл:

import * as common from 'exports.bicep'
targetScope="subscription"

//  Параметры
param resourceGroupName string = 'rg-ascend-us'
param resourceGroupLocation string = 'eastus2'
param environmentName string = 'Development'

var peregrineGroupPrincipalId = '{group_principal_id}'
var readerRoleDefinitionId = 'acdd72a7-3385-48ef-bd42-f606fba81ae7'
var subscriptionName="Cosmos Dev"

//  Получить существующую подписку
@description('')
resource subscriptionResource 'Microsoft.Subscription/subscriptionOperations@2017-11-01-preview' existing = {
  scope: tenant()
  name: subscriptionName
}

//  Получить роль Reader.
@description('Это встроенная роль Reader. См. acdd72a7-3385-48ef-bd42-f606fba81ae7')
resource readerRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
  scope: subscription()
  name: readerRoleDefinitionId
}

//  Назначить группу 'sg-apac-peregrine' подписке и установить роль.
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: subscriptionResource
  name: guid(subscription().id, peregrineGroupPrincipalId, readerRoleDefinition.id)
  properties:{
    roleDefinitionId: readerRoleDefinition.id
    principalId: peregrineGroupPrincipalId
    principalType: 'Group'
  }
}

resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-03-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
  tags: common.getTags(environmentName)
}

Файл bicep выполняется через задачу Azure Devops Pipeline с использованием команды azure CLI.

- task: AzureCLI@2
  inputs:
    azureSubscription: 'Подключение к подписке Azure Cosmos Dev'
    scriptType: bash
    scriptLocation: inlineScript
    useGlobalConfig: false
    inlineScript: |
      az deployment sub create --location eastus2 --template-file $(System.DefaultWorkingDirectory)/.iac/bicep/assign_role_to_subscription.bicep

Команда CLI:

az deployment sub create --location eastus2 --template-file {path_to_bicep_file}

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

Основываясь на примере bicep, который вы поделились, я попытался внести некоторые изменения и смог успешно выполнить.

Вот пример:

exports.bicep

@export()
func getTags(environmentName string) object => {
  Product: 'product_name'
  Team: 'team_name'
  ServiceName: 'adapter'
  Environment: environmentName
}

Основной bicep:

import * as common from 'exports.bicep'
targetScope="subscription"

//  Параметры
param resourceGroupName string = 'rg-ascend-us'
param resourceGroupLocation string = 'eastus2'
param environmentName string = 'Development'

var peregrineGroupPrincipalId = '{group_principal_id}'
var readerRoleDefinitionId = 'acdd72a7-3385-48ef-bd42-f606fba81ae7'
var subscriptionName="Cosmos Dev"

//  Получить существующую подписку
@description('')
resource subscriptionResource 'Microsoft.Subscription/subscriptionOperations@2017-11-01-preview' existing = {
  scope: tenant()
  name: subscriptionName
}

//  Получить роль Reader.
@description('Это встроенная роль Reader. См. acdd72a7-3385-48ef-bd42-f606fba81ae7')
resource readerRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
  scope: subscription()
  name: readerRoleDefinitionId
}

//  Назначить группу 'sg-apac-peregrine' подписке и установить роль.
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: subscriptionResource
  name: guid(subscription().id, peregrineGroupPrincipalId, readerRoleDefinition.id)
  properties:{
    roleDefinitionId: readerRoleDefinition.id
    principalId: peregrineGroupPrincipalId
    principalType: 'Group'
  }
}

resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-03-01' = {
  name: resourceGroupName
  location: resourceGroupLocation
  tags: common.getTags(environmentName)
}

Результат:

введите описание изображения здесь

Если у вас все еще та же проблема, вы можете перейти в Портал Azure -> Подписки Azure -> Развертывания, чтобы найти подробные журналы.

Для получения более детальной информации вы можете обратиться к этому документу: Развертывания подписки

Ответ или решение

Ошибка "InvalidOperationString" при создании ресурсной группы через Bicep и Azure CLI может возникать по нескольким причинам. Давайте рассмотрим возможные проблемы и пути их решения, чтобы вы могли успешно развернуть вашу инфраструктуру в Azure.

1. Причины возникновения ошибки

Неверная строка операции

Ошибка "Invalid operation string {...} provided in request" указывает на то, что строка операции, указанная в запросе, некорректна. В вашем случае это может быть связано с именем подписки или параметрами, которые передаются в Bicep-файл.

Неправильные параметры

Параметр subscriptionName, который вы используете, должен точно соответствовать реальному имени подписки. Убедитесь, что вы правильно указали имя подписки и формат строки соответствует требуемому формату Azure.

2. Проверка Bicep-файла

Ваш Bicep-файл выглядит корректно, однако следует обратить внимание на следующие моменты:

Проверка существования ресурсов

Убедитесь, что ресурс, указанный в subscriptionResource, действительно существует. Вы можете сделать это через Azure Portal или с помощью Azure CLI:

az account list --output table

Это позволит вам просмотреть все доступные подписки и проверить корректность имени подписки.

Правильность идентификаторов

Обратите внимание на идентификаторы, которые вы используете в своем Bicep-файле. Например, peregrineGroupPrincipalId должен содержать корректный идентификатор группы. Проверьте, что он действителен и доступен в пределах вашей подписки.

3. Запуск Azure CLI

Убедитесь, что команда запуска Azure CLI корректна. Например:

az deployment sub create --location eastus2 --template-file $(System.DefaultWorkingDirectory)/.iac/bicep/assign_role_to_subscription.bicep

Также убедитесь, что переменная $(System.DefaultWorkingDirectory) правильно ссылаться на местоположение вашего Bicep-файла в Azure DevOps.

4. Просмотр подробной информации о развертывании

Если ошибка продолжает возникать, полезно просмотреть детальные логи развертывания. Для этого следуйте этим шагам:

  1. Перейдите в Azure Portal.
  2. Найдите "Подписки" и выберите нужную.
  3. В разделе "Развертывания" просмотрите подробные логи последних развертываний, чтобы получить больше информации об ошибках.

Заключение

Ошибка "InvalidOperationString" может быть связана с несколькими факторами, в том числе неверными параметрами или идентификаторами. Проверьте все ключевые элементы вашего Bicep-файла, включая имена подписок и идентификаторы ресурсов. В случае возникновения дополнительных трудностей обязательно обратитесь к журналам развертывания Azure для получения более детальной информации.

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

Оцените материал
Добавить комментарий

Капча загружается...