gpt4 book ai didi

azure - 使用 ARM 订阅级部署部署多个资源时出现问题

转载 作者:行者123 更新时间:2023-12-02 07:04:04 26 4
gpt4 key购买 nike

我正在重写 ARM 模板,因为我们不再使用链接模板。链接模板给我们带来了版本控制的麻烦。我正在使用订阅级别部署来部署资源组,其中包含嵌套的删除锁、存储帐户、keyvault、2 个函数应用、用户分配的托管标识和 keyvault 访问策略。

我使用的ARM模板:

{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"deplocation": {
"type": "string",
"allowedValues": [
"West Europe",
"North Europe"
],
"defaultValue": "West Europe",
"metadata": {
"description": "Location for all resources."
}
},
"tags": {
"type": "object"
},
"rgName": {
"type": "string"
},
"saName": {
"type": "string",
"metadata": {
"description": "The name of the resource."
}
},
"saType": {
"type": "string",
"allowedValues": [
"Standard_LRS",
"Standard_GRS",
"Standard_ZRS",
"Premium_LRS"
],
"defaultValue": "Standard_LRS",
"metadata": {
"description": "Gets or sets the SKU name. Required for account creation; optional for update. Note that in older versions, SKU name was called accountType. - Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS"
}
},
"saKind": {
"type": "string",
"allowedValues": [
"StorageV2",
"BlobStorage",
"FileStorage",
"BlockBlobStorage"
],
"defaultValue": "StorageV2",
"metadata": {
"description": "Indicates the type of storage account. - Storage, StorageV2, BlobStorage, FileStorage, BlockBlobStorage"
}
},
"saAccessTier": {
"type": "string"
},
"saSupportsHttpsTrafficOnly": {
"type": "bool"
},
"kvName": {
"type": "string"
},
"kvSkuName": {
"type": "string"
},
"kvSkuFamily": {
"type": "string"
},
"kvSecretsPermissions": {
"type": "array"
},
"uamiName": {
"type": "string"
},
"fa1Name": {
"type": "string"
},
"fa2Name": {
"type": "string"
},
"aspName": {
"type": "string"
},
"aspRg": {
"type": "string"
},
"appInsightsName": {
"type": "string"
},
"appInsightsRg": {
"type": "string"
}
},
"variables": {
"tenantId": "[subscription().tenantId]",
"subscriptionId": "[subscription().subscriptionId]"
},
"resources": [
{
"type": "Microsoft.Resources/resourceGroups",
"apiVersion": "2018-05-01",
"location": "[parameters('depLocation')]",
"name": "[parameters('rgName')]",
"tags": "[parameters('tags')]",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2018-05-01",
"name": "resourceDeployment",
"resourceGroup": "[parameters('rgName')]",
"dependsOn": [
"[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"name": "DeletionLock",
"type": "Microsoft.Authorization/locks",
"apiVersion": "2017-04-01",
"properties": {
"level": "CanNotDelete",
"notes": "[parameters('rgName')]"
}
},
{
"name": "[parameters('saName')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-04-01",
"sku": {
"name": "[parameters('saType')]"
},
"kind": "[parameters('saKind')]",
"location": "[parameters('deplocation')]",
"tags": "[parameters('tags')]",
"properties": {
"accessTier": "[parameters('saAccessTier')]",
"supportsHttpsTrafficOnly": "[parameters('saSupportsHttpsTrafficOnly')]"
}
},
{
"name": "[concat(parameters('saName'), '/default')]",
"type": "Microsoft.Storage/storageAccounts/blobServices",
"apiVersion": "2019-04-01",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', parameters('saName'))]"
],
"properties": {
"cors": {
"corsRules": [
]
},
"deleteRetentionPolicy": {
"enabled": false
}
}
},
{
"name": "[parameters('kvName')]",
"type": "Microsoft.KeyVault/vaults",
"apiVersion": "2018-02-14",
"location": "[parameters('deplocation')]",
"tags": "[parameters('tags')]",
"properties": {
"tenantId": "[variables('tenantId')]",
"accessPolicies": [
],
"sku": {
"name": "[parameters('kvSkuName')]",
"family": "[parameters('kvSkuFamily')]"
}
}
},
{
"name": "[parameters('uamiName')]",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"apiVersion": "2018-11-30",
"location": "[parameters('deplocation')]",
"tags": "[parameters('tags')]",
"properties": {
}
},
{
"name": "[parameters('fa1Name')]",
"type": "Microsoft.Web/sites",
"apiVersion": "2019-08-01",
"kind": "functionapp",
"location": "[parameters('deplocation')]",
"tags": "[parameters('tags')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('uamiName'))]",
"[resourceId('Microsoft.Storage/storageAccounts/', parameters('saName'))]"
],
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"[concat('/subscriptions/', variables('subscriptionId'), '/resourceGroups/', parameters('rgName'), '/providers/Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('uamiName'))]": {
}
}
},
"properties": {
"siteConfig": {
"appSettings": [
{
"name": "FUNCTIONS_WORKER_RUNTIME",
"value": "dotnet"
},
{
"name": "WEBSITE_TIME_ZONE",
"value": "W. Europe Standard Time"
},
{
"name": "AzureWebJobsStorage",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('saName'),';AccountKey=',listKeys(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName')),providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value,';')]"
},
{
"name": "FUNCTIONS_EXTENSION_VERSION",
"value": "~2"
},
{
"name": "WEBSITE_RUN_FROM_PACKAGE",
"value": "1"
},
{
"name": "APPINSIGHTS_INSTRUMENTATIONKEY",
"value": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('appInsightsRg'),'/providers/microsoft.insights/components/',parameters('appInsightsName')),providers('microsoft.insights', 'components').apiVersions[0]).InstrumentationKey]"
}
],
"alwaysOn": true
},
"serverFarmId": "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('aspRg'),'/providers/Microsoft.Web/serverfarms/',parameters('aspName'))]",
"httpsOnly": true
}
},
{
"name": "[parameters('fa2Name')]",
"type": "Microsoft.Web/sites",
"apiVersion": "2019-08-01",
"kind": "functionapp",
"location": "[parameters('deplocation')]",
"tags": "[parameters('tags')]",
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('uamiName'))]",
"[resourceId('Microsoft.Storage/storageAccounts/', parameters('saName'))]"
],
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('uamiName'))]": {
}
}
},
"properties": {
"siteConfig": {
"appSettings": [
{
"name": "FUNCTIONS_WORKER_RUNTIME",
"value": "dotnet"
},
{
"name": "WEBSITE_TIME_ZONE",
"value": "W. Europe Standard Time"
},
{
"name": "AzureWebJobsStorage",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('saName'),';AccountKey=',listKeys(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName')),providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value,';')]"
},
{
"name": "FUNCTIONS_EXTENSION_VERSION",
"value": "~2"
},
{
"name": "WEBSITE_RUN_FROM_PACKAGE",
"value": "1"
},
{
"name": "APPINSIGHTS_INSTRUMENTATIONKEY",
"value": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('appInsightsRg'),'/providers/microsoft.insights/components/',parameters('appInsightsName')),providers('microsoft.insights', 'components').apiVersions[0]).InstrumentationKey]"
}
],
"alwaysOn": true
},
"serverFarmId": "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('aspRg'),'/providers/Microsoft.Web/serverfarms/',parameters('aspName'))]",
"httpsOnly": true
}
},
{
"name": "[concat(parameters('kvName'), '/add')]",
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"apiVersion": "2018-02-14",
"dependsOn": [
"[resourceId('Microsoft.KeyVault/vaults', parameters('kvName'))]",
"[resourceId('Microsoft.Web/sites', parameters('fa1Name'))]",
"[resourceId('Microsoft.Web/sites', parameters('fa2Name'))]"
],
"properties": {
"accessPolicies": [
{
"tenantId": "[variables('tenantId')]",
"objectId": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Web/sites/', parameters('fa1Name'), '/providers/Microsoft.ManagedIdentity/Identities/default'),providers('Microsoft.ManagedIdentity', 'Identities').apiVersions[0]).principalId]",
"permissions": {
"secrets": "[parameters('kvSecretsPermissions')]"
}
}
,
{
"tenantId": "[variables('tenantId')]",
"objectId": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Web/sites/', parameters('fa2Name'), '/providers/Microsoft.ManagedIdentity/Identities/default'),providers('Microsoft.ManagedIdentity', 'Identities').apiVersions[0]).principalId]",
"permissions": {
"secrets": "[parameters('kvSecretsPermissions')]"
}
}
]
}
}
]
}
}
}
],
"outputs": {
// "uamiPrincipalId": {
// "value": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('uamiName')), providers('Microsoft.ManagedIdentity', 'userAssignedIdentities').apiVersions[0]).principalId]",
// "type": "string"
// }
}
}

用于部署模板的 Powershell 代码。

#region variableDeclaration
$ErrorActionPreference = "Stop"
$subscriptionId = "subscription id here"
$location = "West Europe"
#endregion variableDeclaration

Set-location -path $PSScriptRoot

#region connectToSubscription
Connect-AzAccount -ErrorAction Stop
Set-AzContext -Subscription $subscriptionId
#endregion connectToSubscription

#region createAzureResources
$workloadInputResources = @{
depLocation = $location
tags = @{
dienst = "-"
kostenplaats = "-"
omgeving = "-"
contactpersoon = "-"
eigenaar = "-"
referentie = "-"
omschrijving = "-"
}
rgName = "resources-dev-rg"
saName = "resourcesdevsa"
saType = "Standard_LRS"
saKind = "StorageV2"
saAccessTier = "Hot"
saSupportsHttpsTrafficOnly = $true
kvName = "resourcesdevkv"
kvSkuName = "Standard"
kvSkuFamily = "A"
kvSecretsPermissions = @("get", "list" )
uamiName = "resources-dev-uami"
fa1Name = "resources-dev-fa1"
fa2Name = "resources-dev-fa2"
aspName = "resources-dev-asp"
aspRg = "resources-asp-dev-rg"
appInsightsName = "resources-dev-appins"
appInsightsRg = "resources-appins-dev-rg"
}


New-AzDeployment -Name "deployResources" -Location $location -TemplateFile .\deploy.json @workloadInputResources

#endregion createAzureResources

问题:

  1. 按原样部署arm模板时出现以下错误:
Resource Microsoft.Storage/storageAccounts 'resourcesdevsa' failed with message '{
"error": {
"code": "ResourceGroupNotFound",
"message": "Resource group 'resources-dev-rg' could not be found."
}
}'

但是资源组创建成功。

  • 重新运行脚本时出现以下错误:
  • Resource Microsoft.Storage/storageAccounts 'resourcesdevsa' failed with message '{
    "error": {
    "code": "ResourceNotFound",
    "message": "The Resource 'Microsoft.Storage/storageAccounts/saName' under resource group 'resources-dev-rg' was not found."
    }
    }'
  • 当我注释掉部署 fa1、fa2 和访问策略时,第二个问题就消失了
  • 我的印象是使用dependsOn可以解决依赖问题,但显然我要么错了,使用不正确,要么在某处缺少dependsOn。

    我已经盯着这个问题几个小时了,但似乎找不到问题所在。如有任何帮助,我们将不胜感激。

    最佳答案

    小更新,因为部分内容已解决。但仍然存在一些问题。

    我重写了ARM模板文件,如下所示

    {
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
    "deplocation": {
    "type": "string",
    "allowedValues": [
    "West Europe",
    "North Europe"
    ],
    "defaultValue": "West Europe",
    "metadata": {
    "description": "Location for all resources."
    }
    },
    "tags": {
    "type": "object"
    },
    "rgName": {
    "type": "string"
    },
    "saName": {
    "type": "string",
    "metadata": {
    "description": "The name of the resource."
    }
    },
    "saType": {
    "type": "string",
    "allowedValues": [
    "Standard_LRS",
    "Standard_GRS",
    "Standard_ZRS",
    "Premium_LRS"
    ],
    "defaultValue": "Standard_LRS",
    "metadata": {
    "description": "Gets or sets the SKU name. Required for account creation; optional for update. Note that in older versions, SKU name was called accountType. - Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS"
    }
    },
    "saKind": {
    "type": "string",
    "allowedValues": [
    "StorageV2",
    "BlobStorage",
    "FileStorage",
    "BlockBlobStorage"
    ],
    "defaultValue": "StorageV2",
    "metadata": {
    "description": "Indicates the type of storage account. - Storage, StorageV2, BlobStorage, FileStorage, BlockBlobStorage"
    }
    },
    "saAccessTier": {
    "type": "string"
    },
    "saSupportsHttpsTrafficOnly": {
    "type": "bool"
    },
    "kvName": {
    "type": "string"
    },
    "kvSkuName": {
    "type": "string"
    },
    "kvSkuFamily": {
    "type": "string"
    },
    "kvSecretsPermissions": {
    "type": "array"
    },
    "uamiName": {
    "type": "string"
    },
    "fa1Name": {
    "type": "string"
    },
    "fa2Name": {
    "type": "string"
    },
    "aspName": {
    "type": "string"
    },
    "aspRg": {
    "type": "string"
    },
    "appInsightsName": {
    "type": "string"
    },
    "appInsightsRg": {
    "type": "string"
    }
    },
    "variables": {
    "tenantId": "[subscription().tenantId]",
    "subscriptionId": "[subscription().subscriptionId]"
    },
    "resources": [
    {
    "type": "Microsoft.Resources/resourceGroups",
    "apiVersion": "2018-05-01",
    "location": "[parameters('depLocation')]",
    "name": "[parameters('rgName')]",
    "tags": "[parameters('tags')]",
    "properties": {
    }
    },
    {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2018-05-01",
    "name": "resourceDeployment",
    "resourceGroup": "[parameters('rgName')]",
    "dependsOn": [
    "[resourceId('Microsoft.Resources/resourceGroups/', parameters('rgName'))]"
    ],
    "properties": {
    "mode": "Incremental",
    "template": {
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
    {
    "name": "DeletionLock",
    "type": "Microsoft.Authorization/locks",
    "apiVersion": "2017-04-01",
    "properties": {
    "level": "CanNotDelete",
    "notes": "[parameters('rgName')]"
    }
    },
    {
    "name": "[parameters('saName')]",
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-04-01",
    "sku": {
    "name": "[parameters('saType')]"
    },
    "kind": "[parameters('saKind')]",
    "location": "[parameters('deplocation')]",
    "tags": "[parameters('tags')]",
    "properties": {
    "accessTier": "[parameters('saAccessTier')]",
    "supportsHttpsTrafficOnly": "[parameters('saSupportsHttpsTrafficOnly')]"
    },
    "resources": [

    ]
    },
    {
    "type": "Microsoft.Storage/storageAccounts/blobServices",
    "apiVersion": "2019-04-01",
    "name": "[concat(parameters('saName'), '/default')]",
    "dependsOn": [
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName'))]"
    ],
    "properties": {
    "cors": {
    "corsRules": [
    ]
    },
    "deleteRetentionPolicy": {
    "enabled": false
    }
    }
    },
    {
    "name": "[parameters('uamiName')]",
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
    "apiVersion": "2018-11-30",
    "location": "[parameters('deplocation')]",
    "tags": "[parameters('tags')]",
    "properties": {
    }
    },
    {
    "name": "[parameters('fa1Name')]",
    "type": "Microsoft.Web/sites",
    "apiVersion": "2019-08-01",
    "kind": "functionapp",
    "location": "[parameters('deplocation')]",
    "tags": "[parameters('tags')]",
    "dependsOn": [
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('uamiName'))]",
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName'))]"
    ],
    "identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('uamiName'))]": {
    }
    }
    },
    "properties": {
    "siteConfig": {
    "appSettings": [
    {
    "name": "FUNCTIONS_WORKER_RUNTIME",
    "value": "dotnet"
    },
    {
    "name": "WEBSITE_TIME_ZONE",
    "value": "W. Europe Standard Time"
    },
    // {
    // "name": "AzureWebJobsStorage",
    // "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('saName'),';AccountKey=',listKeys(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName')),providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value,';')]"
    // },
    {
    "name": "FUNCTIONS_EXTENSION_VERSION",
    "value": "~2"
    },
    {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "0"
    },
    {
    "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
    "value": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('appInsightsRg'),'/providers/microsoft.insights/components/',parameters('appInsightsName')),providers('microsoft.insights', 'components').apiVersions[0]).InstrumentationKey]"
    }
    ],
    "alwaysOn": true
    },
    "serverFarmId": "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('aspRg'),'/providers/Microsoft.Web/serverfarms/',parameters('aspName'))]",
    "httpsOnly": true
    }
    },
    {
    "name": "[parameters('fa2Name')]",
    "type": "Microsoft.Web/sites",
    "apiVersion": "2019-08-01",
    "kind": "functionapp",
    "location": "[parameters('deplocation')]",
    "tags": "[parameters('tags')]",
    "dependsOn": [
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('uamiName'))]",
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName'))]"
    ],
    "identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('uamiName'))]": {
    }
    }
    },
    "properties": {
    "siteConfig": {
    "appSettings": [
    {
    "name": "FUNCTIONS_WORKER_RUNTIME",
    "value": "dotnet"
    },
    {
    "name": "WEBSITE_TIME_ZONE",
    "value": "W. Europe Standard Time"
    },
    // {
    // "name": "AzureWebJobsStorage",
    // "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('saName'),';AccountKey=',listKeys(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName')),providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value,';')]"
    // },
    {
    "name": "FUNCTIONS_EXTENSION_VERSION",
    "value": "~2"
    },
    {
    "name": "WEBSITE_RUN_FROM_PACKAGE",
    "value": "0"
    },
    {
    "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
    "value": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('appInsightsRg'),'/providers/microsoft.insights/components/',parameters('appInsightsName')),providers('microsoft.insights', 'components').apiVersions[0]).InstrumentationKey]"
    }
    ],
    "alwaysOn": true
    },
    "serverFarmId": "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('aspRg'),'/providers/Microsoft.Web/serverfarms/',parameters('aspName'))]",
    "httpsOnly": true
    }
    },
    {
    "name": "[parameters('kvName')]",
    "type": "Microsoft.KeyVault/vaults",
    "apiVersion": "2018-02-14",
    "location": "[parameters('deplocation')]",
    "tags": "[parameters('tags')]",
    "dependsOn": [
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Web/sites/',parameters('fa1Name'))]",
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Web/sites/',parameters('fa2Name'))]"
    ],
    "properties": {
    "tenantId": "[variables('tenantId')]",
    "accessPolicies": [
    // {
    // "tenantId": "[variables('tenantId')]",
    // "objectId": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Web/sites/', parameters('fa1Name'), '/providers/Microsoft.ManagedIdentity/Identities/default'),providers('Microsoft.ManagedIdentity', 'Identities').apiVersions[0]).principalId]",
    // "permissions": {
    // "secrets": "[parameters('kvSecretsPermissions')]"
    // }
    // },
    // {
    // "tenantId": "[variables('tenantId')]",
    // "objectId": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Web/sites/', parameters('fa2Name'), '/providers/Microsoft.ManagedIdentity/Identities/default'),providers('Microsoft.ManagedIdentity', 'Identities').apiVersions[0]).principalId]",
    // "permissions": {
    // "secrets": "[parameters('kvSecretsPermissions')]"
    // }
    // }
    ],
    "sku": {
    "name": "[parameters('kvSkuName')]",
    "family": "[parameters('kvSkuFamily')]"
    }

    }
    }
    ]
    }
    }
    }
    ],
    "outputs": {
    // "uamiPrincipalId": {
    // "value": "[reference(concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('uamiName')), providers('Microsoft.ManagedIdentity', 'userAssignedIdentities').apiVersions[0]).principalId]",
    // "type": "string"
    // }
    }
    }

    这项工作非常完美,但正如你所看到的,我注释掉了 3 个部分。这是现在的问题区域。它们都是dependsOn问题。当我取消注释函数应用部署中的 AzureWebJobsStorage 部分时,部署失败并显示以下消息:

    12:00:18 - Resource Microsoft.Storage/storageAccounts 'resourcesdevsa' failed with message '{
    "error": {
    "code": "ResourceGroupNotFound",
    "message": "Resource group 'resources-dev-rg' could not be found."
    }
    }'

    我已将 StorageAccount 添加到 dependentOn 部分

    "dependsOn": [
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('uamiName'))]",
    "[concat('/subscriptions/',variables('subscriptionId'),'/resourceGroups/',parameters('rgName'),'/providers/Microsoft.Storage/storageAccounts/',parameters('saName'))]"
    ],

    但这似乎并不能解决问题。

    有什么想法吗?

    更新2019年11月28日

    好的。我有点沮丧。我现在拥有功能齐全的资源组级别部署。我正在 powershell 中创建资源组和资源组删除锁,然后创建 New-AzResourceGroupDeployment。当我尝试将其重写为订阅级别部署时,我不断遇到依赖性问题。例如;创建 KeyVault 访问策略会导致找不到函数应用的错误。为函数应用设置 AzureWebJobsStorage 设置时也会出现类似的错误。但当然不是对存储帐户的引用。

    关于azure - 使用 ARM 订阅级部署部署多个资源时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58997832/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com