Criação de um portal para microfrontends usando o AWS Amplify, Angular e Module Federation
Milena Godau e Pedro Garcia, Amazon Web Services
Resumo
Uma arquitetura de microfrontend permite que várias equipes trabalhem em diferentes partes de uma aplicação de frontend de forma independente. Cada equipe pode desenvolver, criar e implantar um fragmento do frontend sem interferir em outras partes da aplicação. Do ponto de vista do usuário final, parece ser uma aplicação única e coesa. No entanto, eles estão interagindo com várias aplicações independentes publicadas por equipes diferentes.
Este documento descreve como criar uma arquitetura de microfrontend usando o AWS Amplify
O portal está dividido verticalmente. Isso significa que os microfrontends são visualizações inteiras ou grupos de visualizações, em vez de partes da mesma visualização. Portanto, a aplicação shell carrega apenas um microfrontend por vez.
Os microfrontends são implementados como módulos remotos. A aplicação shell carrega lentamente esses módulos remotos, o que adia a inicialização do microfrontend até que ela seja necessária. Essa abordagem otimiza a performance da aplicação carregando somente os módulos necessários. Isso reduz o tempo de carregamento inicial e melhora a experiência geral do usuário. Além disso, você compartilha dependências comuns entre os módulos por meio do arquivo de configuração do webpack (webpack.config.js). Essa prática promove a reutilização de código, reduz a duplicação e simplifica o processo de empacotamento.
Pré-requisitos e limitações
Pré-requisitos
Uma Conta da AWS ativa
Node.js e npm, instalados
CLI do Amplify, instalada
CLI do Angular, instalada
Permissões para usar o AWS Amplify
Familiaridade com o Angular
Versões do produto
CLI do Angular versão 13.1.2 ou posterior
@angular-architects/module-federation versão 14.0.1 ou posterior
webpack versão 5.4.0 ou posterior
AWS Amplify Gen 1
Limitações
Uma arquitetura de microfrontend é uma abordagem poderosa para criar aplicações web escaláveis e resilientes. No entanto, é fundamental entender os seguintes desafios em potencial antes de adotar essa abordagem:
Integração: um dos principais desafios é o aumento potencial da complexidade em comparação com frontends monolíticos. Orquestrar vários microfrontends, lidar com a comunicação entre eles e gerenciar dependências compartilhadas pode ser mais complexo. Além disso, pode haver uma sobrecarga na performance associada à comunicação entre os microfrontends. Essa comunicação pode aumentar a latência e reduzir a performance. Isso precisa ser resolvido por meio de mecanismos eficientes de mensagens e estratégias de compartilhamento de dados.
Duplicação de código: como cada microfrontend é desenvolvido de forma independente, existe o risco de duplicar o código para funcionalidades comuns ou bibliotecas compartilhadas. Isso pode aumentar o tamanho geral da aplicação e introduzir desafios de manutenção.
Coordenação e gerenciamento: coordenar os processos de desenvolvimento e implantação em vários microfrontends pode ser um desafio. Garantir o versionamento consistente, o gerenciamento de dependências e a manutenção da compatibilidade entre os componentes se torna mais importante em uma arquitetura distribuída. Estabelecer uma governança clara, diretrizes e pipelines automatizados de teste e implantação é essencial para uma colaboração e entrega perfeitas.
Teste: testar arquiteturas de microfrontend pode ser mais complexo do que testar frontends monolíticos. Isso requer esforço adicional e estratégias de teste especializadas para realizar testes de integração entre componentes e testes de ponta a ponta, além de validar experiências de usuário consistentes em vários microfrontends.
Antes de se comprometer com a abordagem de microfrontend, recomendamos que você consulte Understanding and implementing micro-frontends on AWS.
Arquitetura
Em uma arquitetura de microfrontend, cada equipe desenvolve e implanta recursos de forma independente. A imagem a seguir mostra como várias equipes de DevOps trabalham juntas. A equipe do portal desenvolve a aplicação shell. A aplicação shell atua como um contêiner. Ela recupera, exibe e integra as aplicações de microfrontend publicadas por outras equipes de DevOps. Você usa o AWS Amplify para publicar a aplicação shell e as aplicações de microfrontend.

O diagrama da arquitetura mostra o seguinte fluxo de trabalho:
A equipe do portal desenvolve e mantém a aplicação shell. A aplicação shell orquestra a integração e a renderização dos microfrontends para compor o portal geral.
As equipes A e B desenvolvem e mantêm um ou mais microfrontends ou recursos integrados ao portal. Cada equipe pode trabalhar de forma independente em seus respectivos microfrontends.
O usuário final faz a autenticação usando o Amazon Cognito.
O usuário final acessa o portal e a aplicação shell é carregada. Conforme o usuário navega, a aplicação shell lida com o roteamento e recupera o microfrontend solicitado, carregando seu pacote.
Ferramentas
Serviços da AWS
O AWS Amplify
é um conjunto de ferramentas e recursos desenvolvidos especificamente para permitir aos desenvolvedores de frontend para a web e de dispositivos móveis criarem aplicações full-stack de forma rápida e fácil na AWS. Neste padrão, você usa a CLI do Amplify para implantar as aplicações de microfrontend do Amplify. A AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto que auxilia na interação com Serviços da AWS por meio de comandos no seu shell de linha de comandos.
Outras ferramentas
@angular-architects/module-federation
é um plugin que integra o Angular com o Module Federation. O Angular
é uma estrutura de aplicações web de código aberto para criar aplicações de página única modernas, escaláveis e testáveis. Ele segue uma arquitetura modular e baseada em componentes que promove a reutilização e a manutenção do código. O Node.js
é um ambiente de runtime de JavaScript orientado por eventos projetado para criar aplicações de rede escaláveis. O npm
é um registro de software executado em um ambiente Node.js e usado para compartilhar ou emprestar pacotes e gerenciar a implantação de pacotes privados. O Webpack Module Federation
ajuda você a carregar código compilado e implantado de forma independente, como microfrontends ou plug-ins, em uma aplicação.
Repositório de código
O código para este padrão está disponível no repositório Micro-frontend portal using Angular and Module Federation
shell-appcontém o código para a aplicação shell.feature1-appcontém um exemplo de microfrontend. A aplicação shell busca esse microfrontend e o exibe como uma página dentro da aplicação do portal.
Práticas recomendadas
As arquiteturas de microfrontend oferecem inúmeras vantagens, mas também introduzem complexidade. A seguir estão algumas das práticas recomendadas para um desenvolvimento tranquilo, código de alta qualidade e uma ótima experiência do usuário:
Planejamento e comunicação: para agilizar a colaboração, invista em planejamento antecipado, design e canais de comunicação claros.
Consistência do design: aplique um estilo visual consistente em microfrontends usando sistemas de design, guias de estilo e bibliotecas de componentes. Isso proporciona uma experiência de usuário coesa e acelera o desenvolvimento.
Gerenciamento de dependências: como os microfrontends evoluem de forma independente, adote contratos padronizados e estratégias de versionamento para gerenciar dependências de forma eficaz e evitar problemas de compatibilidade.
Arquitetura de microfrontend: para permitir o desenvolvimento e a implantação independentes, cada microfrontend deve ter uma responsabilidade clara e bem definida por uma funcionalidade encapsulada.
Integração e comunicação: para facilitar a integração e minimizar conflitos, defina contratos e protocolos de comunicação claros entre microfrontends, incluindo APIs, eventos e modelos de dados compartilhados.
Teste e garantia de qualidade: implemente pipelines de automação de testes e integração contínua para microfrontends. Isso melhora a qualidade geral, reduz o esforço de testes manuais e valida a funcionalidade entre as interações de microfrontend.
Otimização de performance: monitore continuamente as métricas de performance e acompanhe as dependências entre microfrontends. Isso ajuda você a identificar gargalos e manter a performance ideal da aplicação. Use ferramentas de monitoramento de performance e análise de dependências para essa finalidade.
Experiência do desenvolvedor: concentre-se na experiência do desenvolvedor fornecendo documentação, ferramentas e exemplos claros. Isso ajuda você a otimizar o desenvolvimento e integrar novos membros da equipe.
Épicos
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Crie a aplicação shell. |
| Desenvolvedor de aplicativos |
Instale o plug-in . | Na CLI do Angular, digite o seguinte comando para instalar o plug-in @angular-architects/module-federation
| Desenvolvedor de aplicativos |
Adicione o URL do microfrontend como uma variável de ambiente. |
| Desenvolvedor de aplicativos |
Defina o roteamento. |
| Desenvolvedor de aplicativos |
Declare o módulo |
| Desenvolvedor de aplicativos |
Prepare o pré-carregamento para o microfrontend. | O pré-carregamento do microfrontend ajuda o webpack a negociar adequadamente as bibliotecas e pacotes compartilhados.
| Desenvolvedor de aplicativos |
Ajuste o conteúdo HTML. |
| Desenvolvedor de aplicativos |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Crie o microfrontend. |
| Desenvolvedor de aplicativos |
Instale o plug-in . | Insira o seguinte comando para instalar o plug-in @angular-architects/module-federation:
| Desenvolvedor de aplicativos |
Crie um módulo e componente. | Insira os seguintes comandos para criar um módulo e um componente e exportá-los como módulo de entrada remota:
| Desenvolvedor de aplicativos |
Defina o caminho de roteamento padrão. |
| Desenvolvedor de aplicativos |
Adicione a rota |
| Desenvolvedor de aplicativos |
Edite o arquivo webpack.config.js. |
| Desenvolvedor de aplicativos |
Ajuste o conteúdo HTML. |
| Desenvolvedor de aplicativos |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Execute a aplicação |
| Desenvolvedor de aplicativos |
Execute a aplicação shell. |
| Desenvolvedor de aplicativos |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Crie um módulo e componente. | Na pasta-raiz da aplicação shell, insira os seguintes comandos para criar um módulo e um componente para uma página de erro:
| Desenvolvedor de aplicativos |
Ajuste o conteúdo HTML. |
| Desenvolvedor de aplicativos |
Defina o caminho de roteamento padrão. |
| Desenvolvedor de aplicativos |
Crie uma função para carregar microfrontends. |
| Desenvolvedor de aplicativos |
Teste o tratamento de erros. |
| Desenvolvedor de aplicativos |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Implante o microfrontend. |
| Desenvolvedor de aplicativos, AWS DevOps |
Implante a aplicação shell. |
| Desenvolvedor do aplicativo, proprietário do aplicativo |
Ativar CORS. | Como as aplicações shell e de microfrontend são hospedadas de forma independente em domínios diferentes, você deve habilitar o compartilhamento de recursos de origem cruzada (CORS) no microfrontend. Isso permite que a aplicação shell carregue o conteúdo de uma origem diferente. Para habilitar o CORS, adicione cabeçalhos personalizados.
| Desenvolvedor de aplicativos, AWS DevOps |
Crie uma regra de regravação na aplicação shell. | A aplicação shell do Angular está configurada para usar o roteamento HTML5. Se o usuário fizer uma atualização definitiva, o Amplify tentará carregar uma página do URL atual. Isso gera um erro 403. Para evitar isso, adicione uma regra de regravação no console do Amplify. Para criar a regra de regravação, siga estas etapas:
| Desenvolvedor de aplicativos, AWS DevOps |
Teste o portal da web. |
| Desenvolvedor de aplicativos |
| Tarefa | Descrição | Habilidades necessárias |
|---|---|---|
Exclua as aplicações. | Se você não precisar mais das aplicações shell e de microfrontend, exclua-as. Isso ajuda a evitar cobranças por recursos que você não está usando.
| AWS geral |
Solução de problemas
| Problema | Solução |
|---|---|
Nenhum perfil da AWS disponível ao executar o comando | Se você não tiver um perfil AWS configurado, ainda poderá continuar com o comando Como alternativa, você pode configurar um perfil nomeado para a AWS CLI. Para obter instruções, consulte Configurações do arquivo de configuração e credenciais na documentação da AWS CLI. |
Erro ao carregar entradas remotas | Se você encontrar um erro ao carregar as entradas remotas no arquivo main.ts da aplicação shell, verifique se a variável |
Erro 404 ao acessar o microfrontend | Se você receber um erro 404 ao tentar acessar o microfrontend local, como em
|
Mais informações
AWS Documentação do
Understanding and implementing micro-frontends on AWS (Recomendações da AWS)
Amplify CLI
(documentação do Amplify) Amplify Hosting (documentação do Amplify)
Outras referências