Azure Bicep循环创建存储账户语法报错及配置逻辑疑问
Bicep问题解答
1. 代码报错原因及修复方案
报错并非括号配对错误,是前面两处语法错误导致Bicep解析器识别结构异常,最终在代码末尾抛出括号匹配误报:
- 存储账户资源的
name字段错误使用方括号包裹变量,name: [storageName]属于语法错误,name字段要求传入字符串值,直接写name: storageName即可 - Blob服务子资源配置存在两处错误:
- 子资源的
parent字段对应循环生成的存储账户数组,需要匹配当前循环的索引关联对应存储账户实例 - Blob服务子资源的固定名称为
default,不需要传入存储账户名称,原代码name: [storageName]属于逻辑+语法双重错误
- 子资源的
修复后的完整代码如下:
param storageAccounts array = [ 'storage2' ] resource storage_Accounts 'Microsoft.Storage/storageAccounts@2021-04-01' = [ for storageName in storageAccounts :{ name: storageName location: 'westeurope' sku: { name: 'Standard_RAGRS' tier: 'Standard' } kind: 'StorageV2' properties: { allowCrossTenantReplication: true minimumTlsVersion: 'TLS1_2' allowBlobPublicAccess: false allowSharedKeyAccess: true networkAcls: { bypass: 'AzureServices' virtualNetworkRules: [] ipRules: [] defaultAction: 'Allow' } supportsHttpsTrafficOnly: true encryption: { services: { file: { keyType: 'Account' enabled: true } blob: { keyType: 'Account' enabled: true } } keySource: 'Microsoft.Storage' } accessTier: 'Hot' } }] resource storage_Accounts_blob_default 'Microsoft.Storage/storageAccounts/blobServices@2021-04-01' = [ for (storageName, i) in storageAccounts :{ parent: storage_Accounts[i] name: 'default' properties: { changeFeed: { enabled: false } restorePolicy: { enabled: false } containerDeleteRetentionPolicy: { enabled: true days: 7 } cors: { corsRules: [] } deleteRetentionPolicy: { enabled: true days: 30 } isVersioningEnabled: true } }]
2. 存储策略配置逻辑说明
Azure门户的存储账户配置页做了UI层封装,你在存储账户层级看到的软删除、版本控制、变更Feed等配置,本质都是Blob服务的专属属性,底层API调用时必须提交到Microsoft.Storage/storageAccounts/blobServices资源路径下,存储账户的主属性接口不包含这类Blob专属配置的更新能力。官方文档的说明是底层API的真实逻辑,门户只是做了配置入口的整合,两者没有冲突。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

