Вопрос или проблема
Я получаю следующую ошибку.
{"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. Просмотр подробной информации о развертывании
Если ошибка продолжает возникать, полезно просмотреть детальные логи развертывания. Для этого следуйте этим шагам:
- Перейдите в Azure Portal.
- Найдите "Подписки" и выберите нужную.
- В разделе "Развертывания" просмотрите подробные логи последних развертываний, чтобы получить больше информации об ошибках.
Заключение
Ошибка "InvalidOperationString" может быть связана с несколькими факторами, в том числе неверными параметрами или идентификаторами. Проверьте все ключевые элементы вашего Bicep-файла, включая имена подписок и идентификаторы ресурсов. В случае возникновения дополнительных трудностей обязательно обратитесь к журналам развертывания Azure для получения более детальной информации.
Если у вас есть конкретные вопросы по каждому шагу или вы хотите получить более углубленные рекомендации, пожалуйста, не стесняйтесь спрашивать.