Azure 应用程序配置 - 使用二头肌有条件地创建功能标志

Azure App Configuration - Conditionally create feature flag using bicep

我计划使用 Azure 应用程序配置服务中的功能管理功能。

我使用 bicep 创建配置存储。

使用二头肌我添加了一个功能标志。

该值最初应设置为 false,一旦可用,business/ops 将在 Azure 门户中将该值更改为 true

所以我正在寻找一种有条件地在我的二头肌中创建功能标志的方法;如果不存在,则创建功能标志。当它已经存在时,二头肌应该跳过创建,否则它可以 overwrite/reset 由 business/ops.

更改的标志值

我在 GitHub 上发现了这个问题,从中我得出结论,二头肌还不支持这个要求:https://github.com/Azure/bicep/issues/4023

有任何解决方法的建议吗?

除非您在 运行 部署之前手动检查 featureFlag 是否存在,否则您无法真正做到这一点。 ARM 模板(和 Bicep)尽量做到幂等,因此如果您多次应用相同的模板,它将重置任何手动更改。

这是创建配置存储和功能标志的二头肌文件:

// main.bicep
param location string = resourceGroup().location
param configurationStoreName string
param featureFlagExists bool
param featureFlagName string

// Create the configuration store
resource configurationStore 'Microsoft.AppConfiguration/configurationStores@2021-10-01-preview' = {
  name: configurationStoreName
  location: location
  sku: {
    name: 'free'
  }
  properties: {
    disableLocalAuth: false
    enablePurgeProtection: false
    encryption: {}
    softDeleteRetentionInDays: 0
  }
}

// Only create the feature flag if not exists
resource featureFlag 'Microsoft.AppConfiguration/configurationStores/keyValues@2021-10-01-preview' = if (!featureFlagExists) {
  name: '.appconfig.featureflag~2F${featureFlagName}'
  parent: configurationStore
  properties: {
    contentType: 'application/vnd.microsoft.appconfig.ff+json;charset=utf-8'
    tags: {}
    value: '{"id": "${featureFlagName}", "description": "", "enabled": false, "conditions": {"client_filters":[]}}'
  }
}

下面是调用它的示例 powershell 脚本:

  1. 检查配置存储是否存在
  2. 检查功能标志是否存在
  3. 运行部署
$resourceGroupName = "<resource group name>"
$configurationStoreName = "<config store name>"
$featureFlagName = "<feature flag name>"

# Check if the app configuration exists
$appConfigExists = (az appconfig list `
    --resource-group $resourceGroupName `
    --query "[?name=='$configurationStoreName'].id" `
| ConvertFrom-Json).Length -gt 0

# Check if the feature flag exists
$featureFlagExists = $false
if ($appConfigExists) {
  $featureFlagExists = (az appconfig kv list `
      --name $configurationStoreName `
      --query "[?key=='.appconfig.featureflag/$featureFlagName'].key" `
  | ConvertFrom-Json).Length -gt 0
}

az deployment group create `
  --resource-group $resourceGroupName `
  --template-file .\main.bicep `
  --parameters `
  configurationStoreName=$configurationStoreName `
  featureFlagExists=$featureFlagExists `
  featureFlagName=$featureFlagName