#azure-functions #azure-keyvault #arm-template
Вопрос:
Попытка предоставить функциональное приложение, но в то же время создать политику доступа в хранилище ключей с зависимостью. Не уверен, что это возможно. Я надеялся, что он создаст приложение, затем добавит политику доступа, за которой последуют обновления конфигурации функции.
Однако я получаю следующую ошибку:
##[error]Deployment template validation failed: 'The template resource 'my-keyvault/add' at line '1' and column '2933' is not valid: Unable to evaluate template language function 'resourceId': the type 'Microsoft.Web/sites/functions' requires '2' resource name argument(s). Please see https://aka.ms/arm-template-expressions/#resourceid for usage details.. Please see https://aka.ms/arm-template-expressions for usage details.'.
Это шаблон:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"keyVault.name": {
"type": "string"
},
"environment": {
"type": "string"
},
"functionAppName": {
"type": "string"
},
"appInsightsKey": {
"type": "string"
},
"location": {
"type": "string"
}
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2020-06-01",
"name": "[parameters('functionAppName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Y1",
"tier": "Dynamic"
},
"properties": {
"name": "[parameters('functionAppName')]",
"computeMode": "Dynamic"
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2020-06-01",
"name": "[parameters('functionAppName')]",
"location": "[parameters('location')]",
"kind": "functionapp",
"identity": {
"type": "SystemAssigned"
},
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]"
],
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]",
"httpsOnly": true
},
"resources": [
{
"apiVersion": "2020-06-01",
"name": "web",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/Sites', parameters('functionAppName'))]"
],
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('functionAppName'))]"
}
},
{
"apiVersion": "2020-06-01",
"type": "config",
"name": "appsettings",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('functionAppName'))]",
"[resourceId('Microsoft.KeyVault/vaults/', parameters('keyVault.Name'))]"
],
"properties": {
"AzureWebJobsStorage": "[concat('@Microsoft.KeyVault(SecretUri=https://', parameters('keyVault.Name'), '.vault.azure.net/secrets/StorageAccountConnectionString/)')]",
"WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "[concat('@Microsoft.KeyVault(SecretUri=https://', parameters('keyVault.Name'), '.vault.azure.net/secrets/StorageAccountConnectionString/)')]",
"WEBSITE_CONTENTSHARE": "[toLower(parameters('functionAppName'))]",
"FUNCTIONS_EXTENSION_VERSION": "~3",
"WEBSITE_NODE_DEFAULT_VERSION": "~12",
"WEBSITE_RUN_FROM_PACKAGE": "1",
"APPINSIGHTS_INSTRUMENTATIONKEY": "[parameters('appInsightsKey')]",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
]
},
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"apiVersion": "2019-09-01",
"name": "[concat(parameters('keyVault.name'), '/add')]",
"dependsOn": [
"[resourceId('my-resource-group', 'Microsoft.Web/sites/functions', parameters('functionAppName'))]"
],
"properties": {
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(resourceId('Microsoft.Web/sites', parameters('functionAppName')), '2019-08-01', 'full').identity.principalId]",
"permissions": {
"secrets": [
"get",
"list"
]
}
}
]
}
}
]
}
Комментарии:
1. У вас есть еще какие-нибудь проблемы?
Ответ №1:
Тип ресурса Microsoft.Web/sites/functions
указывает ресурс функции в приложении функции. Это дочерний тип ресурса Microsoft.Web/sites
. Поэтому, если мы хотим использовать функцию resourceId
для получения идентификатора ресурса в шаблоне, выражение должно быть таким "[resourceId('my-resource-group', 'Microsoft.Web/sites/functions', parameters('functionAppName'),<function name>)]"
.
Кроме того, если мы просто хотим получить идентификатор приложения-функции, выражение должно быть таким "[resourceId('my-resource-group', 'Microsoft.Web/sites', parameters('functionAppName'))]"
.
Для получения более подробной информации, пожалуйста, обратитесь к
https://docs.microsoft.com/en-us/azure/azure-functions/functions-infrastructure-as-code
https://docs.microsoft.com/en-us/azure/templates/microsoft.web/sites/functions?tabs=json