【问题标题】:Azure ElasticPool "BadRequest" during creation deployment when using ARM template使用 ARM 模板时创建部署期间的 Azure ElasticPool “BadRequest”
【发布时间】:2024-04-13 13:05:01
【问题描述】:

我有一个任务,我需要使用 ARM 模板来“设置带有弹性池的 SQL 服务器和 2 个数据库(从 bacpac 文件导入)使用 Microsoft Adventureworks 示例。”

我使用此处提供的“101-sql-elastic-pool-create”模板制作的大部分模板:https://github.com/Azure/azure-quickstart-templates/tree/master/101-sql-elastic-pool-create 我将它用于弹性池设置,并使用本文档 (https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-tutorial-deploy-sql-extensions-bacpac) 中的示例将 .bacpac 导入数据库

但是当我尝试部署此模板时(该模板可在此处查看:https://github.com/KarlisAG/SQL_ARM/blob/main/azuredeploy.json),它会抛出一个错误 ("Resource Microsoft.Sql/servers/elasticPools 'task4sql/elasticp' failed with message '{ "code": "BadRequest", "message": "An error occurred while processing this request.", "target": null, "details": [], "innererror": [] }' ")

所以,最大的问题是(除了我是一个绝对的新手)不知道我需要修复什么,因为除了“BadRequest”之外没有授予其他信息。对于部署,我使用了两种不同的方法:1)在创建 Azure 资源组时从 VS 自动生成的一种,2)本文档中显示的一种,我自己的更改很少,因此它可以为我工作(https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-tutorial-deploy-sql-extensions-bacpac#deploy-the-template),来自我还获得了将 .bacpac 导入新创建的数据库的代码部分。 [两者都在同一个存储库中可用,分别命名为“Deploy-AzureResourceGroups.ps1”和“DeployScript.ps1”]。 这两种方法都返回相同的错误。

我什至在 Azure 门户中手动创建了这些东西,以查看它们的模板是什么样子,并可能复制一些我的模板中不存在的东西,但从我看到的内容来看,我得到了它们自动生成的内容。 当我在 Azure 门户中检查部署状态时,我还可以看到在创建弹性池期间它失败了:screenshot from that section available here

那么有谁知道我应该如何创建这种类型的模板,或者我重新创建它的效果不佳,还是我错过了一些一直阻碍我的小错误?

【问题讨论】:

  • 我看到你使用的api版本“2020-08-01-preview”,用旧版本试试。我还建议您查看用于创建 ARM 的 visualstudio 代码扩展:marketplace.visualstudio.com/…
  • @NachoMartínez-Aedo 嗨,谢谢你的回答,但据我所知,api 版本不会有问题,因为在以前的部署中我使用了“2014-04-01-preview”这是最新支持的一个,powershell 告诉我 (No registered resource provider found for location 'northeurope' and API version '2020-08-01-preview' for type 'servers/databases/extensions'. The supported api-versions are '2014-01-01, 2014-04-01, 2014-04-01-preview'.)。似乎当我上传此代码时,我仍在尝试不同的 api 版本,但遗憾的是并没有改变任何东西。

标签: powershell azure-resource-manager arm-template azure-elasticpool azure-sql


【解决方案1】:

所以在多次尝试之后,我似乎终于弄清楚我做错了什么。除了最后一个,我仍然不确定哪些更改产生了影响,所以我会写下我所做的更改,以便其他可能面临类似问题的人知道他们可以做些什么来解决这个问题。

起初,在@stringfellow 指出之后,我认为免费试用会限制我做任何事情,但是在我多次降低 DTU 到 5(从 100 开始)之后,同样的问题仍然存在,所以可能不是问题(后来我不得不将其至少更改为 50)。我还将 Elastic Pool 版本从 Standard 更改为 Basic。但是进行这些更改仍然没有解决问题。

最后,在回答了@NachoMartínez-Aedo 关于 api 版本的评论后,这让我开始思考。因为在我发布的代码中我使用了“2020-08-01-preview” api 版本,但实际上我使用了“2014-04-01-preview”,因为当我将所有部分的 api 版本更改为 2020一,然后powershell告诉我(No registered resource provider found for location 'northeurope' and API version '2020-08-01-preview' for type 'servers/databases/extensions'. The supported api-versions are '2014-01-01, 2014-04-01, 2014-04-01-preview'.)。在再次阅读并记住当我查看一些文档和 Azure 门户自动生成的模板时,我知道我总是说它们使用 2020 api,而不是 2014,这让我很困惑为什么我不能也使用最新版本。再次阅读我看到的那个错误,它明确告诉“服务器/数据库/扩展”类型不支持 2020 api 版本,而不是所有部分都必须在 2014 版本中(这是我看到时的想法那个错误),所以我尝试将所有 2014 改回 2020 并将扩展 api 保留在 2014 (以前我认为所有 api 版本应该相同,不知道为什么,可能是因为大多数示例和文档都有一切具有相同的 api 版本)并且一切正常,甚至是我担心的导入部分。

因此,我不太确定将来是否有更好/更新的方法可以将 .bacpac 文件导入到使用 ARM 新创建的数据库中,或者只需要保持原样并在将来使用相同的方法。 有人知道吗?

我从这里得到了导入扩展:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-tutorial-deploy-sql-extensions-bacpac ,他们使用带有 2014 api 的示例进行扩展,因此我尝试将它用于我的所有部分,但只有在此回答写作期间,我才意识到并再次查看它,他们仅将 2014 api 用于扩展部分,而不是其他部分,如服务器、数据库等。

TL;DR 所以基本上我需要使用 '2020-08-01-preview' api 来处理除了扩展部分之外的所有内容,其中最新的 api 版本只有 '2014-04-01-preview'

【讨论】:

  • 很好的研究!!
【解决方案2】:

我能够部署您的大部分模板并在我自己的订阅中使用类似的参数。我在您的屏幕截图中看到您正在使用免费试用订阅。由于任何类型的 DTU 限制,我很好奇这是否与“BadRequest”有关。

这是我的部署,它在尝试导入数据库时​​按预期失败。

【讨论】:

  • 您好,感谢您的回答!我有什么方法可以检查免费试用是否真的是问题所在?那会很伤心,因为那时我无法检查模板的其他部分是否正确。并且要知道我只能使用免费试用版,因为我仍然是实习生,并且在我被工作接受后可以获得更好的版本。 1)我应该尝试将 DTU 限制更改为更小的数字还是更好的方法? 2) 您是否偶然知道导入部分失败是因为模板存在问题还是仅仅因为您无权访问 .bacpac?
  • 失败是由于“服务器/数据库/扩展”上的 API 版本。