Linter rule - use stable resource identifier

Resource name shouldn't use a non-deterministic value. For example, newGuid() or utcNow() can't be used in resource name; resource name can't contain a parameter/variable whose default value uses newGuid() or utcNow().

Linter rule code

Use the following value in the Bicep configuration file to customize rule settings:

use-stable-resource-identifiers

Solution

The following example fails this test because utcNow() is used in the resource name.

param location string = resourceGroup().location
param time string = utcNow()

resource sa 'Microsoft.Storage/storageAccounts@2021-09-01' = {
  name: 'store${toLower(time)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

You can fix it by removing the utcNow() function from the example.

param location string = resourceGroup().location

resource sa 'Microsoft.Storage/storageAccounts@2021-09-01' = {
  name: 'store${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

Next steps

For more information about the linter, see Use Bicep linter.