使用 ARM 模板时创建部署期间的 Azure ElasticPool "BadRequest"

Azure ElasticPool "BadRequest" during creation deployment when using ARM template

我有一个任务需要使用 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”]。 两种方法return同样的错误。

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

所以有谁知道我应该如何创建这种类型的模板,还是我重新创建它很糟糕,还是我遗漏了一些一直阻碍我的小错误?

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

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

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

起初,@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,这让我很困惑为什么我也不能使用最新版本。再次阅读该错误我看到,它明确指出类型“servers/databases/extensions”不支持 2020 api 版本,并不是说所有部分都必须是 2014 版本(这是我当我看到那个错误时想到了),所以我尝试将所有 2014 改回 2020,并将扩展名 api 保留在 2014 年(之前我认为所有 api 版本应该相同,不确定为什么,也许是因为大多数示例和文档都具有相同的 api 版本)并且一切正常,甚至是我担心的导入部分。

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

我从这里得到了导入扩展: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'