web-dev-qa-db-fra.com

ARM - Comment puis-je obtenir la clé d'accès d'un compte de stockage à utiliser dans AppSettings plus tard dans le modèle?

Je crée un modèle Azure Resource Manager qui instancie plusieurs ressources, y compris un compte de stockage Azure et un service d'application Azure avec une application Web.

Je voudrais pouvoir capturer la clé d'accès principale (ou la chaîne de connexion complète, dans les deux cas, c'est bien) à partir du compte de stockage nouvellement créé, et l'utiliser comme valeur pour l'un des AppSettings pour l'application Web.

Est-ce possible?

32
Scott

Utilisez la fonction d'assistance listkeys .

"appSettings": [
    {
      "name": "STORAGE_KEY",
      "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]"
    }
]

Ce démarrage rapide fait quelque chose de similaire:

https://Azure.Microsoft.com/en-us/documentation/articles/cache-web-app-arm-with-redis-cache-provision/

52
BenV

La syntaxe a changé depuis que l'autre réponse a été acceptée. L'erreur que vous allez maintenant rencontrer est 'Template language expression property 'key1' doesn't exist, available properties are 'keys'

Les clés sont maintenant représentées comme un tableau de clés, et la syntaxe est maintenant:

"StorageAccount": "[Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]",

Voir: http://samcogan.com/retrieve-Azure-storage-key-in-arm-script/

33
Loren Paulsen

J'ai fait face à ce problème à deux reprises. Tout d'abord dans le 2015 et dernier aujourd'hui en mai 2017. J'ai besoin d'ajouter des chaînes de connexion à la WebApp - Je veux ajouter automatiquement des chaînes à partir des ressources générées lors du déploiement à partir du modèle ARM. Cela peut aider plus tard pour ne pas ajouter manuellement ces valeurs.

La première fois que j'ai utilisé l'ancienne version de la fonction listKeys (il semble que l'ancienne version renvoie le résultat non pas comme un objet mais comme une valeur):

"AzureWebJobsStorage": {
                        "type": "Custom",
                        "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2015-05-01-preview').key1)]"
                    },

Aujourd'hui, la dernière version du modèle de travail est:

"resources": [
    {
      "apiVersion": "2015-08-01",
      "type": "config",
      "name": "connectionstrings",
      "dependsOn": [
        "[resourceId('Microsoft.Web/Sites/', parameters('webSiteName'))]"
      ],
      "properties": {
        "DefaultConnection": {
          "value": "[concat('Data Source=tcp:', reference(resourceId('Microsoft.Sql/servers/', parameters('sqlserverName'))).fullyQualifiedDomainName, ',1433;Initial Catalog=', parameters('databaseName'), ';User Id=', parameters('administratorLogin'), '@', parameters('sqlserverName'), ';Password=', parameters('administratorLoginPassword'), ';')]",
          "type": "SQLServer"
        },
        "AzureWebJobsStorage": {
          "type": "Custom",
          "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2016-01-01').keys[0].value)]"
        },
        "AzureWebJobsDashboard": {
          "type": "Custom",
          "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2016-01-01').keys[0].value)]"
        }
      }
    },

Merci.

4
Digiman

ci-dessous est un exemple pour ajouter un compte de stockage à ADLA

"storageAccounts": [
                  {
                    "name": "[parameters('DataLakeAnalyticsStorageAccountname')]",
                    "properties": {
                      "accessKey": "[listKeys(variables('storageAccountid'),'2015-05-01-preview').key1]"
                    }
                }
            ],

en variable vous pouvez garder

"variables": {
        "apiVersion": "[providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]]",
         "storageAccountid": "[concat(resourceGroup().id,'/providers/','Microsoft.Storage/storageAccounts/', parameters('DataLakeAnalyticsStorageAccountname'))]"
    },
2
Shyam sunder