0

いくつかの配列に基づいていくつかのリソースを作成しようとしています。これらのリソースの 1 つは、いくつかのストレージ アカウントです。入れ子になった配列にこれらのストレージ アカウントの名前があります。

"storageAccountArray": [
  "uniqueStringArray0",
  [
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '0'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '1'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '2'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '3'))]",
    "[toLower(concat(parameters('prefix'), 'vhd0', variables('uniqueSuffixID'), '4'))]"
  ],
  "uniqueStringArray1",
  [
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '0'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '1'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '2'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '3'))]",
    "[toLower(concat(parameters('prefix'), 'vhd1', variables('uniqueSuffixID'), '4'))]"
  ],
  "uniqueStringArray2",
  [
    "[toLower(concat(parameters('prefix'), 'vhd2', variables('uniqueSuffixID'), '0'))]",
    "[toLower(concat(parameters('prefix'), 'vhd2', variables('uniqueSuffixID'), '1'))]",
    etc....

私はこれを次のように繰り返すことができると思いました:

{
  "apiVersion": "[variables('storageApiVersion')]",
  "type": "Microsoft.Storage/storageAccounts",
  "name": "[variables('storageAccountArray')[0][copyIndex()]]",
  "location": "[variables('computeLocation')]",
  "copy": {
    "name": "storageLoop0",
    "count": "[variables('saCount0')]"

ここでは、これらのストレージ アカウント リソースをいくつか用意し、すべてコピーを使用するため、名前は 0,0、0,1 0,2 などから取得され、次のリソースの名前は次のようになります。

"name": "[variables('storageAccountArray')[1][copyIndex()]]"

したがって、1,0 1,1 1,2 などです。

ただし、展開しようとすると、次のエラーが表示されます。

'テンプレート リソース '[variables('storageAccountArray')[0][copyIndex()]]' が無効です: テンプレート言語式プロパティ 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Expressions.TemplateFunctionExpression' を評価できません.

次のような質問によると:アクセス/プロセス (ネストされた) オブジェクト、配列、または JSON json は通常、この方法で評価できます。アームがテンプレートを評価する方法によって、これを行うことができなくなりますか?

これらのディスクを VM の OS ディスクとして使用しようとすると、これも多くの VM を作成するためにループされますが、ネストされたアレイにアクセスする必要があるため、それらを追加できません。

 "osDisk": {
          "vhdContainers": [
            "[concat('https://', variables('storageAccountArray')[copyIndex()][0], '.blob.core.windows.net/', parameters('vmStorageAccountContainerNameType0'))]",
            "[concat('https://', variables('storageAccountArray')[copyIndex()][1], '.blob.core.windows.net/', parameters('vmStorageAccountContainerNameType0'))]",
            "[concat('https://', variables('storageAccountArray')[copyIndex()][2], '.blob.core.windows.net/', parameters('vmStorageAccountContainerNameType0'))]",
etc...

また、ネストされた配列を多数に分割しようとしましたが、独自のストレージ アカウントを必要とする VM をループしているため、1 つの数値をインクリメントする必要があり、ループ内で VM を作成できないことが要求されるようです。

リソースを分割して、ネストされたテンプレートにループさせることもできます。すべてが同じ外部テンプレートを指す多くの "Microsoft.Resources/deployments" リソースを作成し、毎回異なる番号をパラメーターとして渡して、そのように番号をインクリメントすることはできますか?

何か案は?お時間をいただきありがとうございます

4

1 に答える 1

1

配列構文が間違っていると思います。変数宣言でこれを試してください:

"m": [
  [ "a", "b", "c" ],
  [ "1", "2", "3" ]
]

IOW、宣言の「uniqueStringArray0」部分を削除します。これは、配列ではなく文字列である配列要素を作成しているため、[0] [0]は無効ですが、[1] [0]は無効です。

于 2016-11-03T01:56:41.213 に答える