Устранение ошибок с поиском ресурсов AzureResolve not found errors for Azure resources

В этой статье описываются ошибки, которые могут возникнуть, когда во время развертывания не удается найти ресурс.This article describes the errors you may see when a resource can't be found during deployment.

СимптомSymptom

Если шаблон содержит имя ресурса, которое не удается разрешить, появится сообщение об ошибке, аналогичное приведенному ниже.When your template includes the name of a resource that can't be resolved, you receive an error similar to:

Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.

При попытке использовать функции reference или listKeys с ресурсом, который не удается устранить, появится следующая ошибка.If you use the reference or listKeys functions with a resource that can't be resolved, you receive the following error:

Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.

Причина:Cause

Resource Manager нужно получить свойства ресурса, но он не может определить ресурс в вашей подписке.Resource Manager needs to retrieve the properties for a resource, but can't identify the resource in your subscription.

Решение 1 — задание зависимостейSolution 1 - set dependencies

При попытке развернуть отсутствующий ресурс в шаблоне проверьте, нужно ли добавить зависимость.If you're trying to deploy the missing resource in the template, check whether you need to add a dependency. Resource Manager оптимизирует развертывание, создавая ресурсы параллельно, когда это возможно.Resource Manager optimizes deployment by creating resources in parallel, when possible. Если один ресурс необходимо развернуть после другого, требуется использовать в шаблоне элемент dependsOn.If one resource must be deployed after another resource, you need to use the dependsOn element in your template. Например, при развертывании веб-приложения вам нужно создать план службы приложений.For example, when deploying a web app, the App Service plan must exist. Если вы не указали, что веб-приложение зависит от плана службы приложений, Resource Manager создаст оба ресурса одновременно.If you haven't specified that the web app depends on the App Service plan, Resource Manager creates both resources at the same time. При попытке указать свойство веб-приложения появится сообщение о том, что невозможно найти ресурс плана службы приложений, так как он еще не существует.You get an error stating that the App Service plan resource can't be found, because it doesn't exist yet when attempting to set a property on the web app. Чтобы предотвратить эту ошибку, в веб-приложении следует настроить зависимость.You prevent this error by setting the dependency in the web app.

{
  "apiVersion": "2015-08-01",
  "type": "Microsoft.Web/sites",
  "dependsOn": [
    "[variables('hostingPlanName')]"
  ],
  ...
}

Но следует избегать задания ненужных зависимостей.But, you want to avoid setting dependencies that aren't needed. Ненужные зависимости могут замедлить развертывание, мешая параллельному развертыванию независимых между собой ресурсов.When you have unnecessary dependencies, you prolong the duration of the deployment by preventing resources that aren't dependent on each other from being deployed in parallel. Кроме того, возможно образование циклических зависимостей, которые блокируют развертывание.In addition, you may create circular dependencies that block the deployment. Функция reference и функции list* создают неявную зависимость от ссылочного ресурса, когда этот ресурс развертывается в том же шаблоне и ссылается на его имя (а не на идентификатор ресурса).The reference function and list* functions creates an implicit dependency on the referenced resource, when that resource is deployed in the same template and is referenced by its name (not resource ID). Таким образом можно использовать больше зависимостей, чем задано в свойстве dependsOn.Therefore, you may have more dependencies than the dependencies specified in the dependsOn property. Функция resourceId не создает неявную зависимость и не проверяет, существует ли ресурс.The resourceId function doesn't create an implicit dependency or validate that the resource exists. Функция reference и функции list* не создают неявную зависимость, когда ресурс ссылается на свой идентификатор ресурса.The reference function and list* functions don't create an implicit dependency when the resource is referred to by its resource ID. Чтобы создать неявную зависимость, передайте имя ресурса, развернутого в том же шаблоне.To create an implicit dependency, pass the name of the resource that is deployed in the same template.

При возникновении проблем с зависимостями необходимо узнать, в каком порядке развертываются ресурсы.When you see dependency problems, you need to gain insight into the order of resource deployment. Вот как можно просмотреть порядок операций развертывания.To view the order of deployment operations:

  1. Выберите журнал развертывания для группы ресурсов.Select the deployment history for your resource group.

    Выбор журнала развертывания

  2. Выберите развертывание в журнале, затем выберите События.Select a deployment from the history, and select Events.

    Выбор событий развертывания

  3. Изучите последовательность событий для каждого ресурса.Examine the sequence of events for each resource. Обратите внимание на состояние каждой операции.Pay attention to the status of each operation. Например, на следующем рисунке показаны три учетные записи хранения, которые были развернуты параллельно.For example, the following image shows three storage accounts that deployed in parallel. Обратите внимание, что эти три учетные записи хранения были запущены одновременно.Notice that the three storage accounts are started at the same time.

    Параллельное развертывание

    На следующем рисунке показаны три учетные записи хранения, которые не были развернуты параллельно.The next image shows three storage accounts that aren't deployed in parallel. Вторая учетная запись хранения зависит от первой учетной записи хранения, а третья учетная запись хранения — от второй.The second storage account depends on the first storage account, and the third storage account depends on the second storage account. Первая учетная запись хранения должна быть запущена, принята и завершена, прежде чем будет запущена следующая.The first storage account is started, accepted, and completed before the next is started.

    Последовательное развертывание

Решение 2 — получение ресурса из другой группы ресурсовSolution 2 - get resource from different resource group

Если ресурс существует в группе ресурсов, отличной от той, где выполняется развертывание, используйте функцию resourceId, чтобы получить полное имя ресурса.When the resource exists in a different resource group than the one being deployed to, use the resourceId function to get the fully qualified name of the resource.

"properties": {
    "name": "[parameters('siteName')]",
    "serverFarmId": "[resourceId('plangroup', 'Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
}

Решение 3 — проверка функции referenceSolution 3 - check reference function

Найдите выражение с функцией reference.Look for an expression that includes the reference function. Заданные значения различаются в зависимости от того, входит ли ресурс в тот же шаблон, группу ресурсов и подписку.The values you provide vary based on whether the resource is in the same template, resource group, and subscription. Убедитесь, что вы предоставляете значения обязательного параметра для вашего сценария.Double check that you're providing the required parameter values for your scenario. Если ресурс находится в другой группе ресурсов, укажите идентификатор ресурса.If the resource is in a different resource group, provide the full resource ID. Например, для создания ссылки на учетную запись хранения в другой группе ресурсов, используйте следующую команду:For example, to reference a storage account in another resource group, use:

"[reference(resourceId('exampleResourceGroup', 'Microsoft.Storage/storageAccounts', 'myStorage'), '2017-06-01')]"