如何从逻辑应用程序中获取资源组名称

How to get Resource Group name from within Logic App

在 Azure 逻辑应用中,如何获取包含当前逻辑应用的资源组的名称?

我想在发送到另一个系统的 JSON 输出中包含一些跟踪详细信息。

我可以获得 运行 标识符(使用 @{workflow()['run']['name']}),

和当前逻辑应用名称(使用 @{workflow()['name']}

但是,我不知道如何获取逻辑应用部署到的资源组的名称。

不得已,我会使用部署模板使用的资源组名称,但如果稍后移动逻辑应用程序,那将是错误的。 我也可以使用标签,但如果移动逻辑应用程序,这可能会再次失调。

谢谢

首先我们可以创建一个"Initialize variable"动作来获取工作流中的所有数据,如下截图所示:

然后我们可以发现工作流中的数据是:

{
    "id": "/subscriptions/*****/resourceGroups/huryTest/providers/Microsoft.Logic/workflows/hurylogicblob",
    "name": "hurylogicblob",
    "type": "Microsoft.Logic/workflows",
    "location": "eastus",
    "tags": {},
    "run": {
        "id": "/subscriptions/*****/resourceGroups/huryTest/providers/Microsoft.Logic/workflows/hurylogicblob/runs/*****",
        "name": "*****",
        "type": "Microsoft.Logic/workflows/runs"
    }
}

包含资源组名称,所以我们只需要获取属性 "id"并对其进行子字符串化即可得到资源组名称。 "resourceGroups/" 的长度是 15,所以在下面的表达式中我使用了 add(,15) 和 sub(,15).

您可以使用如下表达式:

substring(workflow()['id'],add(indexOf(workflow()['id'],'resourceGroups/'),15),sub(sub(indexOf(workflow()['id'],'/providers'),indexOf(workflow()['id'],'resourceGroups/')),15))

最后得到逻辑应用的资源组名称:

一个简单的公式可能是:

split(workflow().id, "/")[4]

如果您使用 ARM 模板部署逻辑应用程序(例如,在 Visual Studio 中编辑,检查 Azure DevOps git 存储库并使用发布管道进行部署),您可以创建一个 ARM 参数:

"resGroup_ARM": {
  "type": "string",
  "defaultValue": "[resourceGroup().name]",
  "metadata": {
    "description": "Resouce group name"
  }
}

然后,您可以创建工作流参数:

        "resGroup_LA": {
          "type": "string",
          "defaultValue": "ResGroup LA default"
        }

...并在参数初始化部分给它一个值:

      "resGroup_LA": {
        "value": "[parameters('resGroup_ARM')]"
      }

您可以通过类似的方式获取 resourceGroup() 的所有其他属性,请参阅:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-resource?tabs=json#resourcegroup