代码之家  ›  专栏  ›  技术社区  ›  AakashM

仅当目标数据库不存在时,才使用ARM模板通过复制另一个模板来创建数据库

  •  0
  • AakashM  · 技术社区  · 6 年前

    我正在使用ARM模板来配置Azure SQL数据库。我想这么说 如果 此数据库不存在,应通过复制另一个固定数据库来创建。但是 如果 我想要的数据库

    “仅当当前状态不是所需状态时才执行操作”的功能是中部署的标准功能 Incremental 模式但这似乎与 createMode 属于 Copy .

    我有这样的JSON模板(不要介意没有参数化,这是一个例子):

    {
      "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "resources": [
        {
          "type": "Microsoft.Sql/servers/databases",
          "name": "[myservername/mydatabasename]",
          "apiVersion": "2014-04-01-preview",
          "location": "[UK South]",
          "properties": {
            "createMode": "Copy",
            "sourceDatabaseId": "[redacted]/myservername/databases/mysourcedatabase",
          }
        }
      ]
    }
    

    New-AzureRmResourceGroupDeployment : 11:51:49 - Resource Microsoft.Sql/servers/databases 'myservername/mydatabasename' failed with message '{
      "code": "BadRequest",
      "message": "The destination database name 'mydatabasename' already exists on the server 'myservername'.",
      "target": null,
      "details": [],
      "innererror": []
    }'
    

    如果我使用 创建模式 Default ,然后我可以重复部署,它是幂等的,但我不能指定初始创建应该通过复制来完成 mysourcedatabase .

    没有做可怕的事情 condition resourceId ,我能说“通过复制创建”吗 什么都不做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   4c74356b41    6 年前

    不,即使有 conditions resourceId() ,至少不是没有一些黑客。最简单的方法-使用外部实体来确定是否需要此部署,并传递适当的参数。