Развертывание Azure - параметр Overide с функциями ARM - PullRequest
0 голосов
/ 04 июля 2018

Я использую VSTS для развертывания ресурсов Azure. Я использую задачу «Развертывание группы ресурсов Azure» для развертывания шаблонов ARM. Как можно для определенного параметра переопределить значение с помощью функции ARM (concat, listkeys и т. Д.)?

Пример: мой шаблон ARM имеет параметр, который является ключом учетной записи хранения, и вместо предоставления ключа напрямую, я хочу предоставить его, передав [listkeys (...)]

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Если учетная запись хранения не создается в том же шаблоне ARM, я бы использовал параметр, чтобы указать имя учетной записи хранения, а затем listkeys () в шаблоне ARM, чтобы получить строку подключения учетной записи хранения.

Если вы создаете учетную запись хранения в предыдущем развертывании шаблона ARM в своем конвейере, вы можете использовать выходные параметры, чтобы сделать строку подключения доступной в конвейере . Вот пример, где xxx представляет префикс имени вашей компании:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "environment": {
      "type": "string",
      "defaultValue": "d",
      "metadata": {
        "description": "The deployment environment, given by develop (d), testing (t), production (p) or quality assurance (q)"
      }
    }
  },
  "variables": {
    "busUnit": "vendor_name_here",

    //storage account names must be lowercase and are limited to 24 alpha numeric characters
    "storage_account_name": "[concat('xxx', parameters('environment'), variables('busUnit'), 'stor')]"        
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "sku": {
        "name": "Standard_LRS", //this is a hard coded SKU
        "tier": "Standard" //general purpose versus blob-only
      },
      "kind": "Storage", 
      "name": "[variables('storage_account_name')]",
      "apiVersion": "2017-06-01",
      "location": "[resourceGroup().location]", //add it to the same region/location as the resource group
      "properties": {
        "encryption": {
          "keySource": "Microsoft.Storage",
          "services": {
            "blob": {
              "enabled": true
            }
          }
        },
        "networkAcls": {
          "bypass": "AzureServices",
          "defaultAction": "Allow",
          "ipRules": [],
          "virtualNetworkRules": []
        }
      },
      "dependsOn": []
    }
  ],
  "outputs": {
    "storageAccountKey": {
      //"description": "This works if the storage account is in the same resource group. It returns the access key for the account",
      "type": "securestring",
      "value": "[listKeys(variables('storage_account_name'),'2015-05-01-preview').key1]"
    },
    "storageAccountName": {
      //"description": "This is the computed name of the storage account, based on naming conventions in the variables",
      "type": "string",
      "value": "[variables('storage_account_name')]"
    }
  }
}
0 голосов
/ 04 июля 2018

Вы не можете сделать это, некоторые функции (например, listKeys()) оцениваются только во время выполнения. Я не знаю, чего вы пытаетесь достичь, поэтому, вероятно, есть способы сделать то, чего вы пытаетесь достичь.

Если вы хотите скрыть ключи, вы можете сохранить их в хранилище ключей и получить во время развертывания:

"password": {
    "reference": {
        "keyVault": {
            "id": "[resourceId('kvGroup', 'Microsoft.KeyVault/vaults', 'kvName')]"
        },
        "secretName": "secret"
    }
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...