Учетные записи хранения Azure bicep loop

#azure #azure-devops #azure-bicep

Вопрос:

Я все еще не знаком с azure bicep, но мне действительно нравится то, что Microsoft сделала с ним до сих пор.

Я все еще изучаю синтаксис и его основы, но на этом я застрял.

То, что я пытаюсь сделать, — это повторить создание учетной записи хранения и установить некоторую конфигурацию, такую как minimum_tls_version DeleteRetentionPolicy и т. Д.

Я пытаюсь создать это в цикле, чтобы я мог создавать несколько хранилищ с одинаковой конфигурацией.

Пока я дохожу до этого момента.

 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 режиме .

Может ли кто-нибудь дать мне объяснение по этому поводу и наилучший подход?

Большое вам спасибо за любую помощь, которую вы можете оказать

Ответ №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
  }
}]
 

и получил следующий шаблон РУКИ:

 {
  "$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()])]"
      ]
    }
  ]
}
 

Комментарии:

1. Большое спасибо за ваше время. Ошибка в синтаксисе решена в отношении учетной записи хранилища (первого ресурса), большое вам спасибо. Но та же ошибка все еще присутствует на втором ресурсе resource storage_Accounts_name_default 'Microsoft.Storage/storageAccounts/blobServices@2021-04-01' , я все еще сталкиваюсь с той же ошибкой, что и на первом.

2. Обновил свой ответ :). HTH.

3. Да, это сработало. Он действительно создает хранилища, но при завершении выдает ошибку. вы не возражаете, если я обновлю свой пост или мне следует открыть новый?

4. Рекомендуем вам открыть новый. Спасибо.