Параметризация connections.json в Azure Logic Apps (Standard) для развертывания через Azure DevOps

Вопрос или проблема

У нас есть логическое приложение, развернутое в среде приложения, которое срабатывает по сообщениям из темы Service Bus, а затем подключается к функции приложения. Для развертывания в разные среды мы параметризовали файл connections.json, как рекомендуется здесь. Но после развертывания рабочий процесс не срабатывает, и ни одно из сообщений не обрабатывается из Service Bus.

Ниже приведен файл connections.json.

{
    "functionConnections": {
        "azureFunctionOperation": {
            "triggerUrl": "https://@appsetting('FUNCTIONAPPNAME').@appsetting('APPSERVICEENVIRONMENTNAME').appserviceenvironment.net/api/FunctionInApp",
            "authentication": {
                "name": "Code",
                "type": "QueryString",
                "value": "@appsetting('FunctionInApp_ConnectionKey')"
            },
            "displayName": "FunctionInApp-Connection",
            "function": {
                "id": "/subscriptions/@appsetting('SUBSCRIPTIONID')/resourceGroups/@appsetting('FUNCTIONAPPRESOURCEGROUPNAME')/providers/Microsoft.Web/sites/@appsetting('FUNCTIONAPPNAME')/functions/FunctionInApp"
            }
        }
    },
    "managedApiConnections": {},
    "serviceProviderConnections": {
        "FileSystem": {
            "displayName": "NASConnection",
            "parameterValues": {
                "mountPath": "@appsetting('FILESYSTEM_MOUNTPATH')"
            },
            "serviceProvider": {
                "id": "/serviceProviders/FileSystem"
            }
        },
        "serviceBus": {
            "displayName": "ServiceBusConnection",
            "parameterSetName": "connectionString",
            "parameterValues": {
                "connectionString": "@appsetting('SERVICEBUS_CONNECTIONSTRING')"
            },
            "serviceProvider": {
                "id": "/serviceProviders/serviceBus"
            }
        },
        "sql-2": {
            "displayName": "UserManagedIdentitySQlConnection",
            "parameterSetName": "ManagedServiceIdentity",
            "parameterValues": {
                "authProvider": {
                    "Type": "ManagedServiceIdentity"
                },
                "databaseName": "@appsetting('SQLDATABASENAME')",
                "managedIdentityClientId": "@appsetting('SQL_MANAGEDIDENTITYCLIENTID')",
                "managedIdentityType": "UserAssigned",
                "serverName": "@appsetting('SQLSERVERNAME').database.windows.net"
            },
            "serviceProvider": {
                "id": "/serviceProviders/sql"
            }
        }
    }
}

Мы проверили, что все значения appsettings присутствуют, и когда я использую экран просмотра деталей в портале, все значения отображаются правильно.

Но когда мы пытаемся вручную внести изменения в рабочий процесс и сохранить его, возникает следующая ошибка:

{
  "error": {
    "code": "WorkflowConnectionsInvalidConnectionValue",
    "message": "Свойство 'functionConnections' в connection.json имеет значение, которое не может быть разобрано."
  }
}

Мы не можем понять, какие проблемы есть в свойстве functionConnections, как указано в ошибке.

Не могли бы вы помочь нам разрешить эту ошибку?

Ответ или решение

Параметризация файла connections.json в Azure Logic Apps (Standard) для развертывания через Azure DevOps

Введение

В последнее время Azure Logic Apps становятся все более популярными для автоматизации процессов и интеграции приложений. Если вы разворачивали логику в среде приложений с использованием Azure DevOps, возможно, вы столкнулись с необходимостью параметризировать файл connections.json для различных сред. Эта статья поможет вам разобраться с проблемами, которые могут возникнуть после развертывания, а также предложит подходы к их устранению.

Проблема

Вы подошли к моменту, когда необходимо настроить развертывание логического приложения, реагирующего на сообщения из Service Bus Topic и подключающегося к Azure Function. После развертывания вы заметили, что рабочий процесс не срабатывает, и сообщения не обрабатываются. Ошибка при попытке сохранить изменения в рабочем процессе указывает на то, что свойство functionConnections в файле connections.json не может быть разобрано.

Исходный файл connections.json

Ваш файл connections.json выглядит следующим образом:

{
    "functionConnections": {
        "azureFunctionOperation": {
            "triggerUrl": "https://@appsetting('FUNCTIONAPPNAME').@appsetting('APPSERVICEENVIRONMENTNAME').appserviceenvironment.net/api/FunctionInApp",
            "authentication": {
                "name": "Code",
                "type": "QueryString",
                "value": "@appsetting('FunctionInApp_ConnectionKey')"
            },
            "displayName": "FunctionInApp-Connection",
            "function": {
                "id": "/subscriptions/@appsetting('SUBSCRIPTIONID')/resourceGroups/@appsetting('FUNCTIONAPPRESOURCEGROUPNAME')/providers/Microsoft.Web/sites/@appsetting('FUNCTIONAPPNAME')/functions/FunctionInApp"
            }
        }
    },
    ...
}

Анализ ошибки

Ошибка:

{
  "code": "WorkflowConnectionsInvalidConnectionValue",
  "message": "The 'functionConnections' property in connection.json has a value that cannot be parsed."
}

указывает на проблему с параметрами подключения вашей функции. Проверьте следующие моменты:

  1. Формат URL: Убедитесь, что формат URL для triggerUrl корректен. Параметры, такие как @appsetting('FUNCTIONAPPNAME'), должны быть правильно разрешены во время развертывания. Проверьте, правильно ли установлены значения этих параметров в вашей среде.

  2. Строки подключения: Убедитесь, что у вас корректно настроен ключ доступа FunctionInApp_ConnectionKey. Он должен соответствовать стандартам Azure Functions и содержать действительный токен доступа.

  3. Правильность id функции: Убедитесь, что путь в id указывает на действительную функцию, которая существует в вашей подписке, и что значения параметров соответствуют вашим настройкам в Azure.

  4. Проверка соответствующих прав: Убедитесь, что у логического приложения есть все необходимые разрешения для доступа к функциям Azure, а также к другим ресурсам, упомянутым в connections.json.

Рекомендации по устранению ошибки

  1. Логирование и диагностика: Некоторые дополнительные учетные данные для диагностики могут включать логи в Application Insights. Убедитесь, что включено логирование, чтобы получить больше информации о возможных ошибках.

  2. Проверка значений: Пройдите через все значения, которые вы передаете через @appsetting(...). Этот подход позволит убедиться, что все значения правильно развернуты и доступны в вашей среде выполнения.

  3. Тестирование вручную: Попробуйте временно заменить динамические ссылки (@appsetting(...)) на статические значения в file connections.json, чтобы проверить, работает ли развертывание и вызываются ли функции корректно.

  4. Документация Microsoft: Обязательно ознакомьтесь с документацией Microsoft по параметризации, чтобы убедиться, что вы следуете всем рекомендациям по параметрам.

Заключение

Несмотря на возможные сложности, характерные для процесса развертывания Azure Logic Apps, следуя приведенным рекомендациям, вы сможете диагностировать и решить проблемы, возникающие при подключении. Параметризация позволяет обеспечить гибкость и масштабируемость приложений, но требует тщательной настройки и проверки на соответствие требованиям среды.

Оцените материал
Добавить комментарий

Капча загружается...