Май 2016.
Том 31 номер 5
Microsoft Azure - Интеграция корпоративных приложений с помощью Azure Logic Apps
Срикантан Санкаран | Май 2016
Продукты и технологии:
Azure Logic Apps, BizTalk Services, Visual Studio 2012, Hybrid Connections, Logic App Connectors
В статье рассматриваются:
- создание потока управления Azure Logic App с применением стандартных и корпоративных коннекторов;
- применение Visual Studio 2012 с BizTalk Services для создания Schemas и Transformation Maps и их использования в потоке управления Logic App;
- реализация условной маршрутизации рабочего процесса, повторная попытка использования логики для обработки перемежающихся отказов (transient failures) и работы с Code Editor в Logic App;
- расширение возможностей Logic Apps для обработки гибридных сценариев при интеграции.
Исходный код можно скачать по ссылке
Управление бизнес-процессами — ключевое направление работы многих организаций, и интеграция гетерогенных систем лежит в сердцевине автоматизации этих процессов. В этом контексте критически важным сценарием применения является использование, преобразование и маршрутизация (routing) данных между организацией и облаком Microsoft Azure. Применение традиционного подхода к реализации таких сценариев интеграции корпоративных приложений (enterprise application integration, EAI) влечет за собой значительные затраты времени и денег, уходящих на идентификацию необходимого инструмента и инвестиции в него, на накоплении технических экспертных знаний и на подготовку вычислительной инфраструктуры для комплексной поддержки этих сценариев. Сервис, управляемый в облаке, например Azure Logic Apps, решает этот круг проблем.
Функция Logic Apps в Azure Apps Service обеспечивает визуальное редактирование, в ходе которого разработчики могут формировать сложный обмен данными между множеством систем или источников данных, используя набор стандартных и корпоративных интегрирующих коннекторов (integration connectors). Сценарии вроде обработки перемежающегося сбоя (transient failure), уникальной для архитектур на основе облака, и другие наподобие условной маршрутизации (condition-based routing) потоков управления в процессе или длительно выполняемых транзакций легко реализуются через этот сервис.
В этой статье демонстрируются возможности Logic Apps в сценарии корпоративной интеграции, где организация-продавец развернула в Azure систему сбора заказов, использующую Logic Apps. Этот процесс Logic App собирает заказы от защищенной общедоступной конечной точки, предоставляемой организацией-покупателем, который потом проходит через множество этапов, включающих захват данных, преобразование данных и маршрутизацию до регистрации заказов в серверной части системы. Для каждого зарегистрированного заказа генерируется идентификатор подтверждения, посылаемый организации-покупателю.
Схема процесса EAI
На рис. 1 изображен простой сценарий EAI, реализуемый с помощью Logic Apps.
Azure Logic App | Azure Logic App |
Order Data Pickup (Trigger) | Принятие данных заказа (по триггеру) |
SFTP Connector | Коннектор SFTP |
FlatFile Encoder Connecto | Коннектор FlatFile Encoder |
BizTalk Transform Service Connector | Коннектор BizTalk Transform Service |
Azure SQL DB Connector | Коннектор Azure SQL DB |
SQL | SQL |
Azure SQL Database | База данных Azure SQL |
SFTP Server | SFTP-сервер |
Order ID Response | Ответ с ID ответа |
DB Insert Error | Ошибка вставки в базу данных |
Azure Storage | Azure Storage |
Данные заказа, которые инициируют интеграцию, загружаются из организации-покупателя в виде плоских файлов, безопасно предоставляемых через конечную точку с SSH File Transfer Protocol (SFTP) по Интернету. Доступ к этой конечной точке защищен удостоверениями аутентификации, общими как для организации-покупателя, так и для организации-продавца. Для размещения данных заказа и приема сообщений подтверждения создаются отдельные папки. В качестве SFTP-сервера, где находится конечная точка для приема и отклонения файлов, используется виртуальная машина Azure с CentOS Linux.
Для подключения к конечной точке SFTP, из которой через заданные интервалы (частоту срабатывания триггера) принимаются данные заказов, применяется коннектор Azure SFTP. Экземпляр этого коннектора создается на портале Azure (в разделе Azure Marketplace) и развертывается как API App. Тот же экземпляр API App будет использоваться и при загрузке данных подтверждения заказа обратно в конечную точку SFTP.
Вот ключевые параметры, которые нужно задать в конфигурации экземпляра SFTP-коннектора при добавлении в поток управления Logic App.
- Trigger frequency (частота срабатывания триггера) В данной реализации сценария — через каждые две минуты.
- Pickup location (место приема) Добавляет путь, относительный корневому (например, /home/<sftpusername>), который был ранее сконфигурирован в экземпляре SFTP-коннектора, в данном случае — b2b/orders.
- Выберите параметр Delete File after Read (удаление файла после чтения).
BizTalk FlatFile Encoder предназначен для чтения плоского файла от API App коннектора SFTP и его преобразования в XML-документ, связанный со схемой. FlatFile Encoder доступен как часть Enterprise Integration Connectors for Logic Apps. Экземпляр этого коннектора создается из Azure Marketplace и развертывается как API App до использования в потоке управления Logic App. Хотя FlatFile Encoder поддерживает генерацию базовой XSD-схемы из плоских файлов и JSON-документов, для более сложных требований, где используется несколько дочерних записей, как в этом сценарии, схема генерируется с помощью Visual Studio 2012 и BizTalk Services SDK. Затем документы XSD-схемы загружаются в BizTalk FlatFile Encoder Connector API App.
Коннектор BizTalk Transform Services преобразует XML-документ, содержащий данные заказа, в XML-данные для вставки в Order Capture Database. Он использует Transformation Map, созданную с применением Visual Studio 2012 и BizTalk Services SDK. В экземпляр этого коннектора, который развертывается как API App, загружаются Map-файлы для регистрации заказа и передачи подтверждения. Файлы схемы, используемые в Map, не требуется загружать в это API App.
Экземпляр SQL Database Connector API App использует данные из XML-документа с предыдущего этапа и вставляет данные заказа в Azure SQL Database. Схема, применяемая для генерации XML-данных для операции вставки, может быть создана в Visual Studio 2012 с BizTalk Services на основе экземпляра XML-документа или с помощью BizTalk WCF LOB Adapters for SQL Server. Однако само Azure SQL Database Connector API App теперь поддерживает генерацию схемы для всех операций в базе данных непосредственно из конфигурации API App на Azure Portal. Это исключает необходимость в дополнительных средствах вроде BizTalk WCF LOB Adapters или сторонних решениях, которые иначе потребовались бы для развертываний в организациях.
На рис. 2 показаны некоторые ключевые параметры, задаваемые в коннекторе Azure SQL Database.
Рис. 2. Конфигурация коннектора Azure SQL Database
При успешной вставке данных заказа ответ от коннектора базы данных преобразуется с помощью BizTalk Transform Service Connector API App, сконфигурированного на предыдущих этапах; массив идентификаторов заказов трансформируется в их список, разделенный запятыми.
Экземпляр Azure Storage Blob Connector API App применяется в потоке управления Logic App для сохранения сообщений об ошибках, когда вставка в базу данных на предыдущем этапе терпит неудачу.
Идентификаторы заказов, сгенерированные в ответе, загружаются через ранее сконфигурированный SFTP-коннектор в конечную точку SFTP организации-покупателя.
В завершенном виде поток управления в процессе Logic App выглядит примерно так, как на рис. 3.
Рис. 3. Поток управления Logic App в завершенном виде
На данный момент версия схемы по умолчанию, используемой при создании нового Logic App, — 2015-08-01-preview, и она пока не поддерживает возможность добавлять корпоративные коннекторы. Поэтому, чтобы реализовать текущий сценарий EAI, эту версию следует заменить на версию 2014-12-01-preview. Это можно сделать в Code View в Logic App, напрямую отредактировав JSON-код.
Не забудьте сохранить изменения, закрыть редактор Logic App и перезагрузить его, чтобы изменения вступили в силу.
Добавляя в поток управления Logic App ресурсы вроде всех коннекторов, Azure SQL Database, Storage Connections и т. д., считается хорошей практикой объединять их все в одну группу ресурсов, что облегчает обработку и развертывание. Кроме того, желательно развертывать все ресурсы в одном регионе (информационном центре Azure), чтобы свести к минимуму задержки при выполнении этого потока управления.
Обработка перемежающихся сбоев в потоке управления
Azure Logic Apps обеспечивает возможность встраивания логики повторных попыток для обработки перемежающихся сбоев (или преходящих ошибок), уникальных для облачных архитектур. Это включает добавление JSON-фрагмента кода, выделенного на рис. 4 серым цветом.
{Для верстки: в следующем листинге должен быть выделен серым цветом фрагмент кода, как сделано в оригинале каким-то поносным цветом ))}
Рис. 4. Обработка перемежающихся сбоев
"b2bmicrosoftsqlconnector": {
"type": "ApiApp",
"inputs": {
"apiVersion": "2015-01-14",
"host": {
},
"operation": "XMLInsertOnordersax",
"parameters": {
"requestMessage": {
"InputXml": "@{body('transformservice').OutputXml}"
}
},
"retryPolicy" : {
"type": "fixed",
"interval": "PT30S",
"count": 2
},
},
Когда при выполнении операции вставки заказа в Azure SQL Database возникают перемежающиеся сбои или исключения, связанные с соединениями, Connector API App будет повторять запрос два раза и только потом вернет ошибку.
Azure Logic Apps обеспечивает возможность встраивания логики повторных попыток для обработки перемежающихся сбоев, уникальных для облачных архитектур.
Кроме того, Logic Apps поддерживает возможность добавлять такие средства, как повторное выполнение вызова, пока не будет удовлетворено предопределенное условие, реализовать Wait Actions, вызывать другие рабочие процессы и т. п.
Условное выполнение потока управления Logic App
В потоке управления Logic App можно определять действия на основе результата предыдущей операции. Параметр, определяющий условие, можно задать либо через панель Configuration в Designer, либо через Code View в Logic App.
Например, в текущем потоке управления, если результат вставки заказа в Azure SQL Database успешен, то ответ Message преобразуется до загрузки в конечную точку SFTP организации-покупателя.
В случае сбоя в Azure Storage загружается сообщение об ошибке, используя коннектор Azure Blob Storage. Logic App UI визуально отражает сконфигурированные альтернативные потоки управления. Взгляните на рис. 5, где видно, как можно определять Conditional Actions и как Logic App визуально отражает поток управления, который включает их.
{Для верстки: меняю местами нумерацию следующих двух рисунков, чтобы избежать ссылки сначала на рис. 6, а потом на рис. 5, а вам придется еще и поменять местами сами рисунки}
Рис. 5. Визуальное представление Conditional Actions
Работа с документами XSD-схемы
Средства, используемые разработчиками для создания своих артефактов для Enterprise Integration Solutions на основе BizTalk Server, тоже можно расширить для работы с Logic Apps. BizTalk Services SDK в сочетании с Visual Studio 2012 предоставляет дополнительные шаблоны проектов, позволяющие разработчикам генерировать или самостоятельно создавать XSD-схемы и сопоставления преобразований (transformation maps). Существуют встроенные мастера, которые можно было бы задействовать для генерации этих двух видов компонентов на основе как плоских файлов, так и экземпляров XML-документов. Документы XSD-схемы вывода, сгенерированные в Visual Studio 2012, можно было бы напрямую загружать в экземпляр FlatFile Encoder, применяемый в Logic App.
Пример XML-файла, на основе которого генерировалась XSD-схема для операции вставки данных заказа в Azure SQL Database, используя Schema Generation Wizard в Visual Studio 2012, показан на рис. 6.
Рис. 6. XML-файл, на основе которого генерировалась XSD-схема для операции вставки данных заказа в Azure SQL Database
<Insert xmlns="https://schemas.microsoft.com/Sql/2008/05/
TableOp/dbo/ordersax ">
<Rows>
<ordersax XMLns="https://schemas.microsoft.com/Sql/2008/05/
Types/Tables/dbo">
<orderidsap>sap0101</orderidsap>
<orderdate>2016-02-03</orderdate>
<supplierid>sail001</supplierid>
<orderamount>25000</orderamount>
<currency>INR</currency>
<discount>12</discount>
<delvydate>2016-06-03</delvydate>
<contract>C001</contract>
<contact>Mr</contact>
</ordersax>
<ordersax xmlns="https://schemas.microsoft.com/Sql/2008/05/
Types/Tables/dbo">
<...>
</ordersax>
...и другие записи...
</Rows>
</Insert>
Возможность повторного использования таких артефактов, применяемых для локального (в рамках организации) развертывания EAI-решений с помощью BizTalk Server, обеспечивает организациям более высокую выгоду от их вложений в исследование Azure как одного из вариантов развертывания собственных решений. Наряду с этим организация получает и дополнительные выгоды, например малое время развертывания, простоту подготовки инфраструктуры, управляемость и полный мониторинг решения.
Работа с сопоставлениями
Коннектор Azure BizTalk Transform Service использует сопоставления преобразований BizTalk для преобразования XML-документов. Однако, чтобы создать эти сопоставления, требуется Visual Studio 2012 с BizTalk Services SDK. Как и в случае XSD-схем, файлы сопоставления преобразований, один раз сгенерированные в такой системе, можно импортировать непосредственно в Azure Logic Apps.
В рассматриваемом здесь процессе для преобразования входящих XML-данных заказа под XML-схему вставки в базу данных и для перебора каждой записи во входящем документе применяется функтоид MapEach Loop, как изображено на рис. 7.
Рис. 7. Преобразование подтверждения о вставке заказа
Чтобы преобразовать сообщение-ответ о создании заказа в исходящее сообщение, массив идентификаторов заказов (Order IDs), сгенерированных из базы данных SQL Server, нужно конвертировать в значения, разделенные запятыми, внутри одного Element. Для этого используется функтоид Cumulative Concatenate.
Выполнения сценария
Чтобы опробовать описанный здесь сценарий, поместите файл orderssap.csv в папку /home/<sftpusername>/b2b/orders, используя WinSCP или эквивалентный инструмент. Отслеживайте состояние журналов триггера Logic App Connector, чтобы убедиться, что триггер действительно срабатывает.
Если ошибок нет, в папку /home/<sftpusername>/b2b/resp будет помещен файл resp.XML, который содержит разделенные запятыми значения идентификаторов, сгенерированные Order Processing System в Azure.
Используя Hybrid Connections, применение корпоративных коннекторов BizTalk можно распространить на специализированные бизнес-системы вроде SAP и SharePoint, развернутые в корпоративных сетях.
Теперь снова поместите файл orderssap.csv в ту же папку безо всяких изменений. Database Connector сгенерирует исключение из-за ошибки Unique Constraint Violation в базе данных. Сообщение об ошибке будет загружено в контейнер orders внутри Azure Blob Storage.
Выполнение Logic App: мониторинг
Для мониторинга выполнения потока управления Logic App используйте плитку Operations. Кроме того, имеется отдельный журнал для событий триггера в Logic App. Изучите каждый из них и проследите выполнение каждого коннектора в потоке управления, результат и длительность выполнения.
Расширение сценария для интеграции между организациями
Хотя база данных SQL, используемая в этом сценарии, развернута в Azure, ее можно столь же легко интегрировать с базой данных SQL Server, выполняемой в корпоративной сети. Инфраструктура Azure App Services, частью которой является Logic Apps, предоставляет функцию под названием «гибридные соединения». Реализация этой функции включает установку Hybrid Connection Manager на сервер за брандмауэром в корпоративной сети, через который Logic App интегрируется с этой базой данных. С помощью гибридных соединений можно обращаться не только к SQL Server, но и к другим базам данных: Oracle, DB2 и Informix.
Используя Hybrid Connections, применение корпоративных коннекторов BizTalk можно распространить на специализированные бизнес-системы (LOB) вроде SAP и SharePoint, развернутые в корпоративных сетях. Кроме того, их можно распространить на REST- и веб-сервисы, развернутые локально (в организации).
Требования к программному обеспечению для реализации этого сценария
Помимо подписки Azure, необходимой для реализации описанного здесь сценария, также требуются следующие средства разработки и дополнительное программное обеспечение:
- Visual Studio 2012 с BizTalk Services SDK, выполняемыми в Windows 8/8.1/10 или в Windows Server 2012 R2;
- SQL Management Studio for SQL Server 2014 или более поздней версии для создания и подключения к Azure SQL Database. В качестве альтернативы можно использовать инструментарий для SQL Server из Visual Studio 2012 или более поздней версии;
- WinSCP или эквивалентный инструмент для подключения к SFTP-серверу, создания папок send и receive, а также для приема и отклонения сообщений.
Артефакты, доступные для скачивания
Следующие артефакты, использовавшиеся для реализации этого сценария, доступны для скачивания из репозитария GitHub по ссылке bit.ly/1p.pngs.
- Скрипт создания базы данных Azure SQL — ordersax.sql.
- Файл с примерами данных заказов — orderssap.csv.
- XSD-схемы:
- dbinsert_sampledata.xsd: схема SQL Insert;
- dbinsert_sampledata1.xsd: часть схемы SQL Insert, на эту часть есть ссылки из SQL Insert;
- orderssap.xsd: схема для входящего документа заказа;
- orderresponse.xsd: схема для ответа SQL Insert;
- orderresponse1.xsd: часть схемы для ответа SQL Insert, на эту часть есть ссылки из схемы для ответа SQL Insert;
- ordersaxresp.xsd: схема для исходящего XML-сообщения ответа.
- Преобразования:
- orders.trfm: преобразование входящего сообщения под схему SQL Insert;
- ordersaxtosap.trfm: преобразование схемы для ответа SQL Insert под схему исходящего сообщения.
Следующие ссылки будут полезны при реализации решения, рассмотренного в этом сценарии:
- требования к программному обеспечению для разработки схем и преобразований в решении (bit.ly/1R3RzvH);
- использование Visual Studio 2012 для генерации схем из плоских файлов (bit.ly/1nP6qBy);
- конфигурирование SFTP-коннектора в Azure (bit.ly/254QfC2).
Заключение
Azure Logic Apps предоставляет платформу для реализации комплексных сценариев EAI. Исчерпывающий набор стандартных и корпоративных коннекторов делает возможной интеграцию с многочисленными корпоративными LOB-системами и приложениями облачной платформы SaaS (Software-as-a-Service). Она может использовать артефакты, сгенерированные для локальных развертываний EAI-решения с помощью BizTalk Server 2013, например схемы и преобразования. Это дает предприятиям возможность перепрофилировать текущие капиталовложения и раскрыть свой потенциал в реализации сценариев в облаке, задействовав обеспечиваемые Azure преимущества высокой доступности, надежности и простоты подготовки инфраструктуры. Благодаря поддержке гибридных соединений в Logic Apps из текущих капиталовложений в LOB-системы, развернутых на предприятии, можно извлечь дополнительную выгоду, включив их в облачные сценарии интеграции.
Совет
Быстрый способ приступить к разработке артефактов в решении — использовать образ Gallery VM в Azure Management Portal, выполняющий BizTalk Server 2013 Standard Edition. Установка Visual Studio 2012 и BizTalk Services SDK в эту VM заняла у меня не более получаса.
Срикантан Санкаран (Srikantan Sankaran) — идеолог из группы DX в Индии (Бангалор). Работает со множеством ISV в Индии и помогает им в создании архитектуры решений и их развертывании в Microsoft Azure. С ним можно связаться по адресу sansri@microsoft.com.
Выражаю благодарность за рецензирование статьи эксперту Microsoft Сандипу Алуру (Sandeep Alur).