【问题标题】:Azure bicep loop storage accountsAzure 二头肌循环存储帐户
【发布时间】:2021-09-27 12:16:47
【问题描述】:

我仍然不熟悉 azure bicep,但我真的很喜欢微软到目前为止所做的事情。

我仍在学习它的语法和基础知识,但我被困在了这一点上。

我正在尝试做的是复制存储帐户的创建并设置一些配置,例如minimum_tls_versionDeleteRetentionPolicy 等。

我正在尝试循环创建它,因此我可以使用相同的配置创建多个存储。

到此为止。

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_name_default 'Microsoft.Storage/storageAccounts/blobServices@2021-04-01' = [ for storageName in storageAccounts :{
  parent: storage_Accounts
  name: [storageName]
  properties: {
    changeFeed: {
      enabled: false
    }
    restorePolicy: {
      enabled: false
    }
    containerDeleteRetentionPolicy: {
      enabled: true
      days: 7
    }
    cors: {
      corsRules: []
    }
    deleteRetentionPolicy: {
      enabled: true
      days: 30
    }
    isVersioningEnabled: true
  }
}]

此时,在最后一行 }] 我收到以下错误:

Expected the "}" character at this location.bicep(BCP018)
Expected the "]" character at this location.bicep(BCP018)

我不明白为什么会出现这个语法错误,所有 }] 似乎都是正确的。

有人认为我不明白的是这个。当我手动创建存储帐户时,Soft delete etc 的策略配置是在存储帐户级别进行的。但是按照文档,此配置是在单个 blob storage 完成的。

谁能给我解释一下这个和最好的方法吗?

非常感谢您提供的任何帮助

【问题讨论】:

    标签: azure azure-devops azure-bicep


    【解决方案1】:

    请尝试更改以下代码行:

    name: [storageName]
    

    name: storageName
    

    而且你不应该得到编译错误。

    我在Bicep Playground中尝试了以下操作:

    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_name_default 'Microsoft.Storage/storageAccounts/blobServices@2021-04-01' = [ for (storageName, i) in storageAccounts :{
      parent: storage_Accounts[i]
      name: storageName
      properties: {
        changeFeed: {
          enabled: false
        }
        restorePolicy: {
          enabled: false
        }
        containerDeleteRetentionPolicy: {
          enabled: true
          days: 7
        }
        cors: {
          corsRules: []
        }
        deleteRetentionPolicy: {
          enabled: true
          days: 30
        }
        isVersioningEnabled: true
      }
    }]
    

    并得到以下 ARM 模板:

    {
      "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "metadata": {
        "_generator": {
          "name": "bicep",
          "version": "0.4.1.14562",
          "templateHash": "6966745077860153629"
        }
      },
      "parameters": {
        "storageAccounts": {
          "type": "array",
          "defaultValue": [
            "storage2"
          ]
        }
      },
      "functions": [],
      "resources": [
        {
          "copy": {
            "name": "storage_Accounts",
            "count": "[length(parameters('storageAccounts'))]"
          },
          "type": "Microsoft.Storage/storageAccounts",
          "apiVersion": "2021-04-01",
          "name": "[parameters('storageAccounts')[copyIndex()]]",
          "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"
          }
        },
        {
          "copy": {
            "name": "storage_Accounts_name_default",
            "count": "[length(parameters('storageAccounts'))]"
          },
          "type": "Microsoft.Storage/storageAccounts/blobServices",
          "apiVersion": "2021-04-01",
          "name": "[format('{0}/{1}', parameters('storageAccounts')[copyIndex()], parameters('storageAccounts')[copyIndex()])]",
          "properties": {
            "changeFeed": {
              "enabled": false
            },
            "restorePolicy": {
              "enabled": false
            },
            "containerDeleteRetentionPolicy": {
              "enabled": true,
              "days": 7
            },
            "cors": {
              "corsRules": []
            },
            "deleteRetentionPolicy": {
              "enabled": true,
              "days": 30
            },
            "isVersioningEnabled": true
          },
          "dependsOn": [
            "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccounts')[copyIndex()])]"
          ]
        }
      ]
    }
    

    【讨论】:

    • 非常感谢您的宝贵时间。关于 storageAccount(第一个资源)的语法错误已解决,非常感谢。但是第二个资源resource storage_Accounts_name_default 'Microsoft.Storage/storageAccounts/blobServices@2021-04-01'仍然存在相同的错误我仍然面临与第一个资源相同的错误。
    • 更新了我的答案:)。 HTH。
    • 是的,有效。它确实创建了存储,但在完成时确实会引发错误。你介意我更新我的帖子还是应该打开一个新帖子?
    • 建议你开一个新的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2022-10-13
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    相关资源
    最近更新 更多