ターゲットデータベースがまだ存在しない場合にのみ、ARMテンプレートを使用して別のデータベースをコピーしてデータベースを作成します

AakashM

ARMテンプレートを使用してAzureSQLデータベースをプロビジョニングしています。私がいることを言いたい場合は、このデータベースが既に存在していない、それは別の、固定、データベースをコピーして作成する必要があります。しかし、場合、私の目的のデータベースがないすでに存在している、それはそのままにする必要があります。

'の機能は、現在の状態が目的の状態でない場合にのみ何かを実行します'は、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": []
}'

を使用するcreateMode Defaultと、展開を繰り返すことができ、べき等になりますが、コピーによって最初の作成を指定することはできませんmysourcedatabase

conditionresourceId恐ろしいことをする以外に、「コピーして作成する、何もしない」と言える方法はありますか?

4c74356b41

いいえ、少なくともいくつかのハックがなければ、conditionsを使用してもそれを行うことはできませんresourceId()最も簡単な方法-外部エンティティを使用して、このデプロイメントが必要かどうかを判断し、適切なパラメーターを渡します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ