- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面我添加了 3 个 Bicep 文件的内容。如果将它们添加到同一目录并运行基于订阅的 Azure 部署,如下所示...
az 部署子创建 --name "VerifyBug"--location "northeurope"--template-file .\main.bicep
...您将得到“对象引用未设置到对象实例”。我刚刚花费了 24 小时的大部分时间试图找出到底是什么导致了这个异常,因为它来自于一个更大的复制部署。没有任何迹象表明异常是在哪里抛出的。
我发现问题出在 serverfarm.outputs.serverfarmId
值上。了解如何在稍后与另一个对象联合的对象中使用它。问题似乎是在联合运算符内使用 ARM 输出的组合,但我希望有更技术性的解释。我在这里发布此内容主要是为了帮助其他人避免将来遇到类似的痛苦。
我找到的解决方案是将 function.bicep 中 serverfarm
模块之后的所有内容分解为一个单独的模块,该模块将服务器场 ID 作为参数。然后一切都会正常,但我很想听听关于为什么会这样的解释。
main.bicep
targetScope = 'subscription'
var location = 'northeurope'
var resourceNamePrefix = 'test-resource'
resource resourceGroup 'Microsoft.Resources/resourceGroups@2020-10-01' = {
name: '${resourceNamePrefix}-rg'
location: location
}
module func 'function.bicep' = {
name: '${deployment().name}-Func'
scope: resourceGroup
params: {
resourceNamePrefix: resourceNamePrefix
location: location
}
}
函数.bicep
param location string
param resourceNamePrefix string
param networking object = {}
module serverfarm 'appServicePlan.bicep' = {
name: '${deployment().name}-AppSvcPlan'
params: {
resourceNamePrefix: resourceNamePrefix
location: location
}
}
var siteConfig = {
linuxFxVersion: 'DOTNET-ISOLATED|6.0'
http20Enabled: true
alwaysOn: true
ftpsState: 'Disabled'
functionAppScaleLimit: 1
minimumElasticInstanceCount: 1
vnetRouteAllEnabled: !empty(networking)
}
var basicProperties = {
serverFarmId: serverfarm.outputs.serverfarmId
httpsOnly: true
redundancyMode: 'None'
reserved: true
siteConfig: siteConfig
}
var networkingProperties = empty(networking) ? {} : {
virtualNetworkSubnetId: networking.subnetResourceId
}
var functionProperties = union(basicProperties, networkingProperties)
resource function 'Microsoft.Web/sites@2021-02-01' = {
name: '${resourceNamePrefix}-fn'
location: location
kind: 'functionapp,linux'
properties: functionProperties
}
appServicePlan.bicep
param resourceNamePrefix string
param location string
resource serverfarm 'Microsoft.Web/serverfarms@2021-02-01' = {
kind: 'linux'
name: '${resourceNamePrefix}-appserviceplan'
location: location
sku: {
name: 'S1'
tier: 'Standard'
}
properties: {
reserved: true
maximumElasticWorkerCount: 1
}
}
output serverfarmId string = serverfarm.id
最佳答案
这是因为“资源管理器在开始部署操作之前解析变量”。 Reference .
在以下部分中,资源管理器尝试解析 serverFarmId: serverfarm.outputs.serverfarmId
,但它尚不存在。
var basicProperties = {
serverFarmId: serverfarm.outputs.serverfarmId
httpsOnly: true
redundancyMode: 'None'
reserved: true
siteConfig: siteConfig
}
在这里,我删除了变量并重建了资源
部署,然后将参数从虚拟网络对象更改为带有子网 ID 的字符串。我使用空字符串比使用对象得到了更好的结果。我运行了部署,它运行正常,没有错误。
param location string
param resourceNamePrefix string
param subnetResourceId string = ''
module serverfarm 'appServicePlan.bicep' = {
name: '${deployment().name}-AppSvcPlan'
params: {
resourceNamePrefix: resourceNamePrefix
location: location
}
}
resource function 'Microsoft.Web/sites@2021-02-01' = {
name: '${resourceNamePrefix}-fn'
location: location
kind: 'functionapp,linux'
properties: {
serverFarmId: serverfarm.outputs.serverfarmId
httpsOnly: true
redundancyMode: 'None'
reserved: true
siteConfig: {
linuxFxVersion: 'DOTNET-ISOLATED|6.0'
http20Enabled: true
alwaysOn: true
ftpsState: 'Disabled'
functionAppScaleLimit: 1
minimumElasticInstanceCount: 1
vnetRouteAllEnabled: !empty(subnetResourceId)
}
virtualNetworkSubnetId: !empty(subnetResourceId) ? subnetResourceId : null
}
}
关于azure - 二头肌模板导致部署时出现 "Object reference not set to an instance of an object"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72461613/
例如,在使用 Azure Function 和 bicep 时,该函数需要一个应用服务计划,并且该计划需要一个 sku: resource MyHostingPlan 'Microsoft.Web/s
我有一个租户,我们一直在其中添加订阅。我希望循环所有订阅并在每个订阅上运行部署,而无需对订阅 ID/名称列表进行硬编码。在二头肌模板中,是否可以以某种方式获取租户/管理组中所有订阅的列表? 上下文:我
我在尝试使用 Bicep(我才真正开始学习)将简单的 Azure BlobFS 链接服务部署到 ADF 中时遇到了很大的困难。 到目前为止我的二头肌是: //---Data Factory resou
我正在使用 Bicep 脚本在 Mcirosoft Azure 中创建资源。 我已经定义了一个带有所有资源都相同的通用标签的变量。但是现在,当将此变量分配给资源时,我想添加更多仅适用于该资源的标签。
我在尝试使用 Bicep(我才真正开始学习)将简单的 Azure BlobFS 链接服务部署到 ADF 中时遇到了很大的困难。 到目前为止我的二头肌是: //---Data Factory resou
我正在使用 Bicep 脚本在 Mcirosoft Azure 中创建资源。 我已经定义了一个带有所有资源都相同的通用标签的变量。但是现在,当将此变量分配给资源时,我想添加更多仅适用于该资源的标签。
我有 Terraform 背景和 AWS。现在我正在将 Bicep 与 Azure 结合使用,所以请耐心等待:) 在 Terraform 中,我们使用 random_password 创建随 secr
我有一个具有命名值资源的模块,另一个具有 api 和操作资源的模块。然后我有一个二头肌文件(main.bicep),它将调用这两个文件。缩短版本(只是为了更容易解释): namedValue 模块:
我有一个参数,它是一个对象数组。对象中的元素之一(“peers”)是另一个对象数组。我想动态提取对等数组并联合/连接它们并保留“vnetid”作为引用。 param vnets array = [
我正在创建一个像这样的二头肌模块: param permission object var keys = [for key in permission.keys: key] var secretes=
我在二头肌脚本中定义了多个应用服务。对于每一个,我都使用配置资源来定义配置。 resource appSettings1 'Microsoft.Web/sites/config@2022-03-01'
我正在尝试使用 Bicep 部署 Azure 策略分配。 resource policy_assignment 'Microsoft.Authorization/policyAssignments@2
我遇到以下问题:我想部署存储帐户,但前提是该帐户不存在。 我使用 az cli 部署脚本检查是否存在: resource checkStorageAccountExistence 'Microsoft
我在二头肌脚本中定义了多个应用服务。对于每一个,我都使用配置资源来定义配置。 resource appSettings1 'Microsoft.Web/sites/config@2022-03-01'
我正在尝试使用 Bicep 部署 Azure 策略分配。 resource policy_assignment 'Microsoft.Authorization/policyAssignments@2
我遇到以下问题:我想部署存储帐户,但前提是该帐户不存在。 我使用 az cli 部署脚本检查是否存在: resource checkStorageAccountExistence 'Microsoft
我是 bicep 新手,一直在努力实现 Bicep 脚本来部署具有许多主题和订阅的 Azure 服务总线。 我添加的每个主题都有可变数量的订阅(例如,通知主题可能有 3 个订阅,但分析主题可能有 2
我正在通过 bicep 部署 azure 更新管理服务的计划。我的代码如下: param parSchedules array = [ { name: 'mysched1' mon
我是 bicep 新手,一直在努力实现 Bicep 脚本来部署具有许多主题和订阅的 Azure 服务总线。 我添加的每个主题都有可变数量的订阅(例如,通知主题可能有 3 个订阅,但分析主题可能有 2
我正在通过 bicep 部署 azure 更新管理服务的计划。我的代码如下: param parSchedules array = [ { name: 'mysched1' mon
我是一名优秀的程序员,十分优秀!