Estenda o Azure Logic Apps Migration Agent para outras plataformas criando parsers personalizados

Aplica-se a: Aplicativos Lógicos do Azure (Padrão)

Se a sua organização usar uma plataforma de integração que a extensão Azure Logic Apps Migration Agent no Visual Studio Code atualmente não suporta, como IBM IIB/ACE, Dell Boomi ou Workato, pode estender o agente criando e adicionando um parser personalizado para essa plataforma. A versão 1.12.1 inclui suporte registado para BizTalk Server, MuleSoft Anypoint e TIBCO BusinessWorks. A extensão utiliza uma arquitetura de analisador sintático baseada em registo que suporta tanto analisadores integrados como externos.

Este artigo mostra como criar e adicionar um parser personalizado que transforme os artefactos da sua plataforma de integração de origem no formato comum de Representação Intermédia (IR) do agente de migração. Este documento JSON descreve artefactos de forma neutra em relação à plataforma. Um parser integrado com as competências específicas de plataforma necessárias pode participar nas cinco fases de migração. Uma extensão de parser externo cobre apenas o Discovery.

Pré-requisitos

Antes de começar, certifique-se de que dispõe dos seguintes recursos:

Requisito Description
Node.js 18 anos ou depois Ambiente de execução JavaScript gratuito, de código aberto e multiplataforma
Visual Studio Code 1.85.0 ou posterior Experiência de desenvolvimento local
Visual Studio Code API de Extensão API que permite criar extensões para o Visual Studio Code
Extensão do Agente de Migração do Azure Logic Apps Extensão necessária com agente de migração para Visual Studio Code
Extensão do Azure Logic Apps (Padrão) Dependência necessária para a extensão Azure Logic Apps Migration Agent
Familiaridade com o TypeScript Uma linguagem de programação fortemente tipada que se baseia em JavaScript
Projeto de integração de código-fonte O projeto de integração de código-fonte e os ficheiros de artefactos para a plataforma onde pretende suporte técnico

Arquitetura de análise sintáctica

Para adicionar suporte de plataforma ao agente de migração, utilize as seguintes abordagens:

Approach Recomendado Description
Parser incorporado: Contribuir no repositório GitHub da extensão Yes Adiciona um parser e competências diretamente ao projeto. Integração total com as cinco fases de migração. Esta abordagem é recomendada porque os parsers integrados vêm com a extensão, usam o mesmo pipeline CI/CD e podem aceder a todas as APIs internas.
Extensão do parser externo No Crie uma extensão Visual Studio Code separada que registre parsers através da API do plugin. Abrange apenas a fase de Descoberta.

Todos os analisadores transformam artefactos da plataforma de origem num formato IR comum como um documento JSON. O agente de migração utiliza o formato IR nas fases de planeamento, conversão e validação. O registo do parser suporta tanto plugins de parser incorporados como externos:

Analisadores incorporados Plugins de parser externos
BizTalk Server (.btproj, .odx, .btm, .xsd, .btp, binding .xml, .bre, .brl, .hidx, .asmx)

MuleSoft Anypoint (pom.xml, Mule flow .xml, .dwl)

TIBCO BusinessWorks (tibco.xml, TIBCO.xml, module.bwm, .process, .bwp)
Parsers de plataformas parceiras
Parsers comunitários

O analisador de especificações RAML e OpenAPI da MuleSoft e o analisador XML genérico são implementações provisórias na versão 1.12.1.

Diagrama que mostra como os plugins de parser incorporados e externos alimentam o formato comum de documentos IR usado pelas fases de migração.

Passo 1: Adicionar um parser integrado

  1. Em src/parsers/<your-platform>/, crie um novo módulo de analisador.

    src/parsers/
    ├── biztalk/              # Reference implementation
    │   ├── index.ts
    │   ├── types.ts
    │   ├── BizTalkProjectParser.ts
    │   ├── BizTalkOrchestrationParser.ts
    │   └── ...
    ├── <your-platform>/      # Your new parser
    │   ├── index.ts
    │   ├── types.ts
    │   └── <your-platform-parser-name>.ts
    
  2. Certifica-te de que cada parser implementa a IParser interface.

    import { IParser, ParserCapabilities, ParseResult, ParseOptions } from '../types';
    import { IRDocument, createEmptyIRDocument } from '../../ir/types';
    
    export class YourPlatformParser implements IParser {
        get capabilities(): ParserCapabilities {
            return {
                platform: '<your-platform>',
                fileExtensions: ['.<your-extension>'],
                fileTypes: ['flow'],
                supportsFolder: false,
                description: 'Parses <your-platform> integration flows.',
            };
        }
    
        canParse(filePath: string): boolean {
            return filePath.endsWith('.<your-extension>');
        }
    
        async parse(
            filePath: string,
            options?: ParseOptions
        ): Promise<ParseResult> {
            const ir = createEmptyIRDocument();
            // Parse the source file and populate the IR document.
            // For the complete schema, see docs/IRSchema.md.
            return { ir, stats: { /* parsing statistics */ } };
        }
    }
    
  3. Registe o teu parser em src/parsers/index.ts.

    import { <your-platform-parser-name> } from './<your-platform>';
    
    export function initializeParsers(): void {
        // ... existing parsers ...
        defaultParserRegistry.register(new <your-platform-parser-name>());
    }
    

    Sugestão

    Utilize como uma referência totalmente funcional a implementação do parser BizTalk em src/parsers/biztalk/.

Passo 2: Adicionar competências específicas da plataforma

Como ficheiros Markdown, as competências fornecem instruções de IA para cada etapa de migração. Eles dizem aos agentes do GitHub Copilot como analisar, planear e converter artefactos para a sua plataforma específica.

Para encontrar estas competências, veja abaixo resources/skills/ variantes específicas de plataforma.

resources/skills/
├── detect-logical-groups/
│   ├── biztalk/SKILL.md
│   ├── mulesoft/SKILL.md
│   └── <your-platform>/SKILL.md
├── source-to-logic-apps-mapping/
│   ├── biztalk/SKILL.md
│   ├── mulesoft/SKILL.md
│   └── <your-platform>/SKILL.md
└── ... (13 skills total)

Cada ficheiro SKILL.md utiliza metadados YAML seguido por conteúdo Markdown, por exemplo:

---
name: source-to-logic-apps-mapping
description: >-
   Component mapping for \<*your-platform*\> components to their equivalents in Azure Logic Apps (Standard).
---

Passo 3: Mapeie a sua plataforma para componentes Azure Logic Apps (Standard)

  1. Consulte a tabela seguinte para criar os mapeamentos dos adaptadores:

    < your-platform> Componente Azure Logic Apps equivalente Nativo? Notes
    Ouvinte HTTP Acionador HTTP Yes Built-in
    Conector de base de dados Conector do SQL Server Yes Built-in
  2. Para cada competência na tabela seguinte, crie a variante de competência necessária <your-platform>/SKILL.md.

    Sugestão

    Copie as competências de uma plataforma suportada, como biztalk/SKILL.md, como ponto de partida, e adapte o conteúdo para a sua plataforma.

    Agente do GitHub Copilot Competência Purpose
    @migration-analyser detect-logical-groups Regras para agrupar artefactos em grupos lógicos de fluxo
    @migration-analyser analyse-source-design Regras para análise da arquitetura fonte e geração de visualizações
    @migration-analyser dependency-and-decompilation-analysis Regras para identificar dependências em falta
    Todos os agentes source-to-logic-apps-mapping Mapeamento componente a componente da origem para os Azure Logic Apps
    @migration-planner logic-apps-planning-rules Regras para gerar planos de migração
    @migration-converter conversion-task-plan-rules Regras para criar tarefas de conversão
    @migration-converter scaffold-logic-apps-project Regras para estruturar a estrutura do projeto de aplicação lógica padrão
    @migration-converter workflow-json-generation-rules Regras para gerar workflow.json ficheiros
    @migration-converter connections-json-generation-rules Regras para gerar o connections.json ficheiro
    @migration-converter dotnet-local-functions-logic-apps Regras para gerar funções locais .NET
    @migration-converter no-stubs-code-generation Regras para garantir que o código gerado está completo
    @migration-converter runtime-validation-and-testing Regras para validação e teste em tempo de execução
    @migration-converter cloud-deployment-and-testing Regras para implementação e testes na cloud

Passo 4: Registe a tua plataforma

  1. No src/types/platforms.ts arquivo, adicione a sua plataforma à lista das plataformas suportadas.

     export type SourcePlatform = 'biztalk' | 'mulesoft' | 'tibco' | '<your-platform>';
    
    export const SUPPORTED_PLATFORMS: PlatformInfo[] = [
        // ... existing platforms ...
        {
            id: '<your-platform>',
            label: '<your-platform-name>',
            description: '<your-platform> version <version-number>',
            icon: '$(server)',
            filePatterns: ['.<your-extension>', '.<your-config>'],
        },
    ];
    
  2. No src/stages/discovery/PlatformDetector.ts ficheiro, adiciona a lógica de deteção.

  3. No ficheiro src/stages/discovery/SourceFolderService.ts, adiciona os padrões de ficheiros.

Passo 5 (opcional): Adicionar exemplos de RI

Para documentar como os artefactos da sua plataforma correspondem ao esquema IR, adicione um docs/IRExamples_YourPlatform.md ficheiro. Existem os seguintes exemplos que servem como modelos:

Exemplo Description
docs/IRExamples_BizTalk.md Referência BizTalk
docs/IRExamples_MuleSoft.md Referência MuleSoft
docs/IRExamples_Boomi.md Exemplo do Dell Boomi
docs/IRExamples_IBMIIB.md Exemplo IBM IIB/ACE
docs/IRExamples_TIBCO.md Exemplo do TIBCO BusinessWorks
docs/IRExamples_Workato.md Exemplo de Workato

Alternativa: Extensão de parser externo

Extensões de parser externo cobrem apenas a fase de Descoberta do agente de migração, onde o agente analisa os seus ficheiros fonte. Competências, deteção de plataformas e planeamento e conversão com suporte por IA exigem que contribua diretamente para o repositório GitHub da extensão.

No entanto, se preferires não contribuir diretamente para o repositório, cria uma extensão de Visual Studio Code separada que regista os parsers usando a API do plugin parse:

import * as vscode from 'vscode';

export async function activate(context: vscode.ExtensionContext) {
    const agent = vscode.extensions.getExtension('ms-azuretools.logicapps-migration-agent');

    if (agent) {
        const api = await agent.activate();
        api.registerParser(new MyPlatformParser(), {
            priority: 10,
        });
    }
}

API de plugins de analisador

Método ou propriedade Description
version Versão de extensão (apenas leitura)
registerParser(parser, options?) Registe um analisador no registo.
unregisterParser(id) Remover um parser registado.
getParserRegistry() Acede diretamente ao registo do parser.
hasParser(id) Verifique se um parser está registado.
getExternalParsers() Obtenha informações sobre parsers externos registados.

Passos seguintes