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 脚本:
- 检查配置存储是否存在
- 检查功能标志是否存在
- 运行部署
$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
我计划使用 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 脚本:
- 检查配置存储是否存在
- 检查功能标志是否存在
- 运行部署
$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