2016-09-01 11 views
2

Azure Resource Manager(ARM)テンプレートはLinked Templatesを使用できます。これらのリンクされたテンプレートは、ARMテンプレートのデプロイ時に作成する追加のリソースを定義できます。Azure Resource Managerの依存関係の処理リンクされたテンプレート

ARMテンプレートでは、dependenciesがサポートされているため、他のリソースが作成される前にリソースが確実に作成されます。

マスターテンプレートで作成されたリソースのリンクテンプレートに依存関係を指定したいとします。私はリンクされたテンプレートに依存関係を含めると、それは次のようになります。

"resources": [ 
    { 
     "apiVersion": "2015-08-01", 
     "type": "Microsoft.Web/sites/hostNameBindings", 
     "name": "[concat(parameters('siteName'),'/', parameters('fqdn'))]", 
     "dependsOn": [ 
      "[concat('Microsoft.Web/sites/', parameters('siteName'))]" 
     ], 
     "properties": { 
      "siteName": "[parameters('siteName')]" 
     } 
    } 
] 

dependsOnが正しい表示されますが、リソースがMicrosoft.Web/sites/{siteNameParameter}に作成され、ARMテンプレートを展開すると、次のエラーメッセージが出力さ:

InvalidTemplate:展開テンプレートの検証に失敗しました: 'リソース' Microsoft.Web/sites/blahblahblahblah 'がテンプレートに定義されていません。使用方法の詳細については、https://aka.ms/arm-templateを参照してください。 '

リンクテンプレート呼び出しを定義するときに、マスターテンプレートでこの依存関係を現在定義しています。これは壊れやすく破損しやすいようです。マスターARMテンプレートの依存関係を定義するよりも良い方法はありますか?

{ 
    "apiVersion": "2015-01-01", 
    "name": "SomeName", 
    "type": "Microsoft.Resources/deployments", 
    "dependsOn": [ 
     "[concat('Microsoft.Web/sites/', parameters('siteName'))]" 
    ], 
    "properties": { 
     "mode": "Incremental", 
     "templateLink": { 
      "uri": "https://tempuri.org/supersecrettemplatepath/azuredeploy.json", 
      "contentVersion": "1.0.0.0" 
     }, 
     "parameters": 
     { 
      "fqdn": { 
       "value": "www.tempuri.org" 
      }, 
      "siteName": { 
       "value": "[parameters('siteName')]" 
      } 
     } 
    } 
} 

答えて

3

どちらの方法でも依存関係を定義できます。どちらも有効です。デプロイメントリソースに依存関係を置く(2番目の方法)とは、ネストされたデプロイメント全体が、Webサイトがプロビジョニングされるまで開始されないことを意味します。いくつかのことを並行して実行したい場合は、ネストされたテンプレートに依存関係を置きます(最初の方法)。それはあなたのシナリオにとって重要かもしれませんが、重要な違いです。

dependsOnresourceIdを必要 - とリソースは、あなたがresourceIdで詳細を必要とし、テンプレートで定義されていない場合は、エラーが、言おうとしているように、この場合には、あなたはresourceGroup(多分サブスクリプションが必要ですが、I疑わしい)。だから、例えば、あなたが使用することができます。

"dependsOn": [ 
    "[resourceId(resourceGroup().name, 'Microsoft.Web/sites', parameters('siteName'))]" 
], 
+0

おもしろいです!私はこれをロールバックしなければならないでしょう。 resourceGroup()。nameは、デフォルトではすべての 'dependsOn'呼び出しで自動的に設定されるはずです@ bmore-msftの理解です。それはネストされたテンプレートの場合ですか? –

+0

- もしそれが供給されなければ、それは同じテンプレートにあると見なされます - ネストされたテンプレートは実際にはAzureRMの独立した/独立した展開です。 –

+1

残念ながら、これは前と同じエラーメッセージを出力します。テンプレート内でリソース 'Microsoft.Web/sites/somesite'が定義されていません。 –

0
"dependsOn": [ 
    "[resourceId(subscription().subscriptionId, resourceGroup().name, 'Microsoft.Web/sites', parameters('siteName'))]" 
], 
+1

これは私にエラーメッセージを伝えましたが、それは依存関係を待たなかった:( – MPavlak

関連する問題