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
。
condition
とresourceId
で恐ろしいことをする以外に、「コピーして作成するか、何もしない」と言える方法はありますか?
いいえ、少なくともいくつかのハックがなければ、とconditions
を使用してもそれを行うことはできませんresourceId()
。最も簡単な方法-外部エンティティを使用して、このデプロイメントが必要かどうかを判断し、適切なパラメーターを渡します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加