使用二头肌部署逻辑应用 - 将 JSON 转换为有效的二头肌
Deploy logic app using bicep - Convert JSON to valid Bicep
我想生成二头肌用于构建逻辑应用程序。样板是
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
name: 'lapp-${options.suffix}'
location: options.location
properties: {
definition: {
// here comes the definition
}
}
}
我的评论显示了应用程序本身的定义所在的位置。如果我知道从现有逻辑应用程序中获取 JSON(为简洁起见,我保留了一些内容):
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"triggers": {
"manual": {
"inputs": {
},
"kind": "Http",
"type": "Request"
}
}
},
"parameters": {}
}
您必须将其转换为如下形式:
{
definition: {
'$schema': "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#"
actions: {}
contentVersion: '1.0.0.0'
outputs: {}
parameters: {}
triggers: {
'manual': {
inputs: {
}
kind: 'Http'
type: 'Request'
}
}
}
parameters: {}
}
这意味着例如:
- 删除尾随逗号
- 删除属性的引号
- 单引号一些属性,例如
schema
或自定义操作名称
- 当单引号出现在逻辑应用程序中常见的值中时转义单引号
是否有任何转换器可以将 JSON 结构转换为有效的二头肌?我不是说 bicep decompile
,因为这假定您已经拥有一个有效的 ARM 模板。
一种方法是将您的定义保存在单独的文件中,并将 json 作为参数传递。
main.bicep:
// Parameters
param location string = resourceGroup().location
param logicAppName string
param logicAppDefinition object
// Basic logic app
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
name: logicAppName
location: location
properties: {
state: 'Enabled'
definition: logicAppDefinition.definition
parameters: logicAppDefinition.parameters
}
}
然后您可以像那样部署您的模板(在此处使用 az cli 和 powershell):
$definitionPath="full/path/of/the/logic/app/definition.json"
az deployment group create `
--resource-group "resource group name" `
--template-file "full/path/of/the/main.bicep" `
--parameters logicAppName="logic app name" `
--parameters logicAppDefinition=@$definitionPath
使用这种方法,您不必在每次更新逻辑应用程序时都修改“基础设施即代码”。
添加另一种方法。使用 loadTextContent(file.json) 将工作流文件加载到 bicep 文件中,并使用 json()[将其解析为 JSON 方法并直接在 bicep 文件中访问定义和参数,避免将工作流文件作为参数传递给 CLI
param location string = resourceGroup().location
param logicAppName string
var logicAppDefinition = json(loadTextContent('LogicApp.workflow.json'))
// Basic logic app
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
name: logicAppName
location: location
properties: {
state: 'Enabled'
definition: logicAppDefinition.definition
parameters: logicAppDefinition.parameters
}
}
我想生成二头肌用于构建逻辑应用程序。样板是
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
name: 'lapp-${options.suffix}'
location: options.location
properties: {
definition: {
// here comes the definition
}
}
}
我的评论显示了应用程序本身的定义所在的位置。如果我知道从现有逻辑应用程序中获取 JSON(为简洁起见,我保留了一些内容):
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"triggers": {
"manual": {
"inputs": {
},
"kind": "Http",
"type": "Request"
}
}
},
"parameters": {}
}
您必须将其转换为如下形式:
{
definition: {
'$schema': "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#"
actions: {}
contentVersion: '1.0.0.0'
outputs: {}
parameters: {}
triggers: {
'manual': {
inputs: {
}
kind: 'Http'
type: 'Request'
}
}
}
parameters: {}
}
这意味着例如:
- 删除尾随逗号
- 删除属性的引号
- 单引号一些属性,例如
schema
或自定义操作名称 - 当单引号出现在逻辑应用程序中常见的值中时转义单引号
是否有任何转换器可以将 JSON 结构转换为有效的二头肌?我不是说 bicep decompile
,因为这假定您已经拥有一个有效的 ARM 模板。
一种方法是将您的定义保存在单独的文件中,并将 json 作为参数传递。
main.bicep:
// Parameters
param location string = resourceGroup().location
param logicAppName string
param logicAppDefinition object
// Basic logic app
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
name: logicAppName
location: location
properties: {
state: 'Enabled'
definition: logicAppDefinition.definition
parameters: logicAppDefinition.parameters
}
}
然后您可以像那样部署您的模板(在此处使用 az cli 和 powershell):
$definitionPath="full/path/of/the/logic/app/definition.json"
az deployment group create `
--resource-group "resource group name" `
--template-file "full/path/of/the/main.bicep" `
--parameters logicAppName="logic app name" `
--parameters logicAppDefinition=@$definitionPath
使用这种方法,您不必在每次更新逻辑应用程序时都修改“基础设施即代码”。
添加另一种方法。使用 loadTextContent(file.json) 将工作流文件加载到 bicep 文件中,并使用 json()[将其解析为 JSON 方法并直接在 bicep 文件中访问定义和参数,避免将工作流文件作为参数传递给 CLI
param location string = resourceGroup().location
param logicAppName string
var logicAppDefinition = json(loadTextContent('LogicApp.workflow.json'))
// Basic logic app
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
name: logicAppName
location: location
properties: {
state: 'Enabled'
definition: logicAppDefinition.definition
parameters: logicAppDefinition.parameters
}
}