web-dev-qa-db-ja.com

ARM-ストレージアカウントからアクセスキーを取得して、後でテンプレートのAppSettingsで使用するにはどうすればよいですか?

AzureストレージアカウントやWebアプリでのAzure App Serviceなど、複数のリソースをインスタンス化するAzure Resource Managerテンプレートを作成しています。

新しく作成したストレージアカウントからプライマリアクセスキー(またはどちらの方法でも完全な接続文字列)をキャプチャし、それをWebアプリのAppSettingsの値として使用できるようにしたいと思います。

それは可能ですか?

32
Scott

listkeys ヘルパー関数を使用します。

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

このクイックスタートは似たようなことをします:

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

52
BenV

他の回答が受け入れられてから構文が変更されました。ヒットするエラーは'Template language expression property 'key1' doesn't exist, available properties are 'keys'

キーはキーの配列として表されるようになり、構文は次のようになりました。

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

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

33
Loren Paulsen

この問題に2回直面しました。接続文字列をWebAppに追加する必要があります-ARMテンプレートからの展開中に生成されたリソースから文字列を自動的に追加したいです。後でこの値を手動で追加しないでください。

初めて古いバージョンの関数listKeysを使用しました(古いバージョンはオブジェクトではなく値として結果を返すようです):

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

現在、作業用テンプレートの最後のバージョンは次のとおりです。

"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)]"
        }
      }
    },

ありがとう。

4
Digiman

以下は、ストレージアカウントをADLAに追加する例です

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

変数であなたが保つことができます

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