- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于一个项目,我想通过 Bicep 模板将三个相关资源部署到 Azure:1) 具有系统分配托管标识的应用服务、2) Key Vault 和 3) 应用服务(步骤 1)对 Key Vault 的访问策略(步骤 2)。
AppService 部署输出系统分配身份的 principalId
,稍后在部署 KeyVaultAccessPolicy 时使用该身份。
但是,当我运行 AZ CLI 时(az deployment sub create --location WestEurope --template-file ./main.bicep --parameters ./parameters/parameters-dev.json
)要将其部署到 Azure,我收到以下错误:
'The language expression property 'outputs' doesn't exist, available properties are 'templateHash, parameters, mode, provisioningState, timestamp, duration, correlationId, providers, dependencies, outputResources'.
有人知道为什么引用应用服务的 principalId
在这里不起作用吗?非常感谢您的帮助。
main.bicep
module appService 'modules/appService.bicep' = {
name: 'deployAppService'
scope: resourceGroup(appServiceResourceGroup)
params: {
name: appServiceName
location: appServiceLocation
alwaysOn: appServiceAlwaysOn
apimIpAddress: appServiceApimIpAddress
appServicePlanResourceGroup: appServicePlanResourceGroup
appServicePlanName: appServicePlanName
}
}
module keyVault 'modules/keyVault.bicep' = {
name: 'deployKeyVault'
scope: resourceGroup(appServiceResourceGroup)
params: {
name: keyVaultName
dependsOn: [ appService ]
location: appServiceLocation
}
}
module keyVaultAccessPolicy 'modules/keyVaultAccessPolicy.bicep' = {
name: 'deployKeyVaultAccessPolicy'
scope: resourceGroup(appServiceResourceGroup)
params: {
name: '${appServiceName}-ap'
dependsOn: [ keyVault ]
objectId: appService.outputs.appServiceManagedIdentity
}
}
appService.bicep
resource appService 'Microsoft.Web/sites@2020-12-01' = {
name: name
location: location
kind: 'app'
identity: {
type: 'SystemAssigned'
}
properties: {
serverFarmId: '${subscription().id}/resourceGroups/${appServicePlanResourceGroup}/providers/Microsoft.Web/serverfarms/${appServicePlanName}'
enabled: true
}
}
output appServiceManagedIdentity string = appService.identity.principalId
keyVault.bicep
resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: name
location: location
dependsOn: dependsOn
properties: {
enabledForDeployment: true
enabledForTemplateDeployment: true
enabledForDiskEncryption: true
tenantId: subscription().tenantId
accessPolicies: []
sku: {
name: 'standard'
family: 'A'
}
}
}
keyVaultAccessPolicy.bicep
resource keyVaultAccessPolicy 'Microsoft.KeyVault/vaults/accessPolicies@2022-07-01' = {
name: name
dependsOn: dependsOn
properties: {
accessPolicies: [
{
tenantId: subscription().tenantId
objectId: objectId
permissions: {
secrets: [
'get'
]
}
}
]
}
}
最佳答案
已经找到答案:
dependsOn
属性,因此无需将依赖项作为 param
传递。name: '${keyVaultName}/add'
请参阅下面的工作模块和 main.bicep:
main.bicep
module appService 'modules/appService.bicep' = {
name: 'deployAppService'
scope: resourceGroup(appServiceResourceGroup)
params: {
name: appServiceName
location: appServiceLocation
alwaysOn: appServiceAlwaysOn
apimIpAddress: appServiceApimIpAddress
appServicePlanResourceGroup: appServicePlanResourceGroup
appServicePlanName: appServicePlanName
}
}
module keyVault 'modules/keyVault.bicep' = {
scope: resourceGroup(appServiceResourceGroup)
name: 'keyVaultDeploy'
params: {
location: appServiceLocation
name: keyVaultName
}
}
module keyVaultAccessPolicy 'modules/keyVaultAccessPolicy.bicep' = {
scope: resourceGroup(appServiceResourceGroup)
name: 'keyVaultAccessPolicyDeploy'
dependsOn: [
keyVault
]
params: {
keyVaultName: keyVaultName
objectId: appService.outputs.appServiceManagedIdentity
}
}
appService.bicep
resource appService 'Microsoft.Web/sites@2020-12-01' = {
name: name
location: location
kind: 'app'
identity: {
type: 'SystemAssigned'
}
properties: {
// left out
}
}
output appServiceManagedIdentity string = appService.identity.principalId
keyVault.bicep
resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' = {
name: name
location: location
properties: {
enabledForDeployment: true
enabledForTemplateDeployment: true
enabledForDiskEncryption: true
tenantId: subscription().tenantId
accessPolicies: []
sku: {
name: 'standard'
family: 'A'
}
}
}
keyVaultAccessPolicy.bicep
resource keyVaultAccessPolicy 'Microsoft.KeyVault/vaults/accessPolicies@2022-07-01' = {
name: '${keyVaultName}/add'
properties: {
accessPolicies: [
{
tenantId: subscription().tenantId
objectId: objectId
permissions: {
secrets: [
'get'
]
}
}
]
}
}
关于azure - 部署 Key Vault 访问策略时如何在 Bicep 中引用系统分配的身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73334552/
我能够使用最新的 Bicep 版本 0.4 创建应用服务计划和应用服务。 resource myAppServicePlan 'Microsoft.Web/serverfarms@2021-01-01
我有一个二头肌文件,应该创建一个虚拟网络网关。我通过创建虚拟网络的单独二头肌文件将其分解。我真正应该做的是有一个用于 vnet 创建的模块和另一个用于虚拟网络网关的模块,因为 bicep 对我来说是新
我正在尝试使用 bicep 将 apim 后端资源部署到现有 apim 实例中。这是我的 apim mdoule 的相关部分: resource apim 'Microsoft.ApiManageme
我想生成一个二头肌来构建逻辑应用程序。其样板是 resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = { name: 'lapp-$
像往常一样与二头肌文档碰撞。我似乎找不到任何有关如何向自动化帐户 Runbook 的作业计划添加参数的帮助。 MS 的示例是 name: 'string' parent: resourceSy
我的情况是,我有一个公司列表,以及一个我想在我的二头肌文件中配对的队列列表。我想使用结果将队列添加到服务总线命名空间。 这是队列数组的示例: `var queues = [ 'first-queu
在二头肌中,我有一个主要的二头肌,它会调用 部署应用服务的模块 部署托管身份的模块 应用程序服务模块如下所示,它使用用户分配的托管 ID 的输出,并在应用程序服务的身份中分配: 主要二头肌 modul
我有一个应用程序,它有一个二头肌文件(用于部署 azure 应用程序服务),它调用另一个存储库中的模板模块(应用程序服务模板)。模板模块引用同一存储库中的多个模块。它调用一个用于应用服务计划的模块,一
尝试将托管标识分配给同一租户中单独订阅中的资源组。我可以通过 Azure 门户实现此目的。我的 Main.bicep,类似这样: targetScope = 'subscription' module
我目前正在尝试手动将现有 ARM 模板转换为二头肌,因为自动反编译方法失败。 现有模板包含以下变量: "environmentSize": { "dev": "small",
我正在运行二头肌 0.4.1318。 我有一个“主”二头肌模块,它调用子模块来配置数据工厂: var adfName = 'adf-ctaxrebate-${envPlusSuffix}-${form
我有一个 Azure Bicep 模板,用于部署存储帐户和容器。但是,当我重命名容器或注释掉模板中的容器资源时,不会触发删除操作。相反,它会创建一个新容器并且不会删除旧容器。有什么想法为什么会发生这种
我想创建一个 Azure 容器应用程序,该应用程序从位于不同订阅中的现有 Azure 容器应用程序注册表中提取其镜像。 我的主要二头肌: 创建用户分配的托管身份 将托管身份的 ACR Pull RBA
我刚开始使用 Azure 二头肌。我正在尝试使用以下二头肌文件部署一个简单的应用程序服务计划/应用程序服务: resource azBicepAsp1 'Microsoft.Web/serverfar
我想要一个可以向现有应用服务(本例中为函数应用)添加一组固定的 IP 限制规则的模块。 我在 main.bicep 中添加了对“ipSecurityRestrictions”模块的调用,如下所示: m
如何使用 bicep 更新字典对象,例如:原始字典对象: var dict = { 'a': {} } 我现在有一个数组:['b', 'c'],我想更新 dict 对象,例如: { 'a':
我需要: 创建数据工厂 创建存储帐户 创建函数应用 将数据工厂的角色分配添加到存储帐户 将函数应用的角色分配添加到存储帐户 数据工厂是在与“主”二头肌不同的模块中创建的。这是为了防止“主”模板太大而难
我正在尝试引用现有的二头肌模块作为另一个资源的父级。 module vnethub 'modules/vnet/vnet.bicep' = { scope: resourceGroup(rg.na
我正在尝试创建一个二头肌模板来根据条件部署具有 1 个或 2 个 NIC 的虚拟机。 有人知道是否有一种方法可以在属性定义中使用条件语句来部署虚拟机网卡吗?似乎资源定义中不允许使用 if 函数,并且由
我正在尝试使用以下代码创建一个简单的应用服务计划。 param Location string = 'eastus' resource appServicePlan1 'Microsoft.Web/s
我是一名优秀的程序员,十分优秀!