azure - 逻辑应用标准自动化跨环境工作流引用

标签 azure azure-devops azure-logic-app-standard

我已使用 Arm 模板通过 Azure Devops Pipeline 自动部署逻辑应用标准

我有另一个管道,它使用 Azure Devops zip 部署任务来部署工作流(按照 Microsoft 文档的建议)。

我目前的困境是当我有调用其他工作流程的工作流程时。 当我跨不同逻辑应用标准实例部署 zip 文件时,引用的工作流 URL 始终相同

如何以非硬编码且在部署中动态更改的方式引用/调用工作流程?我可以使用 workflow() 引用其他工作流程吗?

由于访问键是工作流的属性,而不是逻辑应用标准,我无法将其设置为要在工作流内使用的应用设置或参数。

关于如何绕过这个问题有什么想法吗?

最佳答案

我最终做了以下事情。 我已经创建了 keystore secret 。在这些 key 保管库 secret 中,我存储包含授权 secret 的工作流程 URL。

由于我创建了指向 key 保管库 secret 名称而不是硬编码 URL 的其他工作流,逻辑应用在运行时将查询 key 保管库,从我想要进行身份验证的工作流中检索 URL 并将其用作输入。由于它已经包含签名,因此可以正确进行身份验证。

这可能是一种解决方法,但这是我能够在此操作中取得成功的唯一方法。

对于那些和我有同样问题的人,步骤如下:

  1. 首先,我开发了从 keyvault 获取包含 url 的 secret 的工作流程

Get keyvault secret

  • 然后它使用 key 作为输入来调用 url。 Secret as input for the url

  • 当我准备好部署工作流程时。我导出它们并将代码放在 Azure Devops 上。

  • 然后在构建管道中我使用以下任务

  • task: ArchiveFiles@2
    displayName: "Archive Functions"
    inputs:
    rootFolderOrFile: "$(Build.Repository.LocalPath)/LogicApps"
    includeRootFolder: false
    archiveFile: "$(Build.ArtifactStagingDirectory)/LogicApps.zip"
    
    task: AzureFunctionApp@1
    displayName: "Deploy Functions"
    inputs:
    azureSubscription: "${ { parameters.Subscription }}"
    appName: "mylogicappstandard"
    package: "$(Agent.BuildDirectory)/${ { parameters.ArtifactName}}/LogicApps.zip"
    
    task: AzureCLI@2
    displayName: 'Update Signature url in ${ { parameters.KeyvaultName}}'
    inputs:
    azureSubscription: "${ { parameters.Subscription }}"
    scriptType: 'ps'
    scriptLocation: 'inlineScript'
    inlineScript: "$(Agent.BuildDirectory)/${ { parameters.ArtifactName}}/Scripts/Get-WorkflowUrlSignature.ps1 $(AzureSubscriptionId) ${ { parameters.ResourceGroup }} mylogicappstandard ${ { parameters.KeyvaultName}}"

    您可以在此处找到脚本的详细信息 Get-WorkflowUrlSignature.ps1

        [CmdletBinding()]
     param (
         [Parameter(Mandatory)][string]$SubscriptionId,
         [Parameter(Mandatory)][string]$ResourceGroup,
         [Parameter(Mandatory)][string]$LogicAppName,
         [Parameter(Mandatory)][string]$KeyVaultName
     )
        
     $json = az rest --method get --uri "https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroup/providers/Microsoft.Web/sites/$LogicAppName/hostruntime/runtime/webhooks/workflow/api/management/workflows?api-version=2018-11-01"
     $workflows = $json | convertfrom-json
        
     foreach ($workflow in $workflows.Name){
         $uri ="https://management.azure.com/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroup/providers/Microsoft.Web/sites/$LogicAppName/hostruntime/runtime/webhooks/workflow/api/management/workflows/$workflow/triggers/manual/listCallbackUrl?api-version=2018-11-01"
         if (az rest --method post --uri $uri){
             # Gets the url with signature
             $sigurl = az rest --method post --uri $uri | convertfrom-json
             $secret = $sigurl.value.Replace('&','"&"')
             $workflowName = $workflow.Replace("_","")
             #Creates or updates secret in the keyvault
             Write-Output "Updating secret $workflowName in the keyvault"
             az keyvault secret set --name $workflowName --vault-name $KeyVaultName --value $secret
         }else{
             Write-Output "The workflow $workflow does not have any trigger url"
         }
     }
    

    我希望这可以帮助其他人自动化该过程。如果您有更简单的方法或查询访问 key 或网址签名,请告诉我。

    关于azure - 逻辑应用标准自动化跨环境工作流引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71355379/

    相关文章:

    azure - 不支持的HttpVerb : The resource doesn't support specified Http Verb. RequestId:fa9c21f3-0001-005a-1484-d83478000000

    azure-devops - 如何接收有关 VSTS 中计划触发器生成的构建的电子邮件通知?

    azure-devops - 发布构建工件失败,错误 EEXIST : file already exists

    mongodb - Azure:不支持 DocumentDB Mongo $group

    azure - 使用 terraform 脚本在 azure 上旋转 Linux 虚拟机的 azurerm_image.source_virtual_machine_id 应该是什么?

    azure - Terraform 无法在 azure 上创建免费的 Web 应用程序

    Azure 使用 Terraform 将安全组与多个网络接口(interface)和负载均衡器与多个子网关联

    azure - 在 Azure 逻辑应用(标准)中找不到自定义连接器

    azure - 无法从 ARM 模板检索逻辑应用程序(标准)工作流程 URL