Crie uma arquitetura pouco acoplada com microsserviços usando DevOps práticas e o AWS Cloud9 - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Crie uma arquitetura pouco acoplada com microsserviços usando DevOps práticas e o AWS Cloud9

Criado por Alexandre Nardi (AWS)

Ambiente: PoC ou piloto

Tecnologias: DevOps; Sem servidor; aplicativos móveis e da Web; bancos de dados

Serviços da AWS: AWS Cloud9; AWS; CloudFormation AWS; Amazon DynamoDB; CodePipeline AWS CodeCommit

Resumo

Esse padrão demonstra como desenvolver um aplicativo web típico em uma arquitetura sem servidor, para desenvolvedores e líderes de desenvolvimento que estão começando a testar DevOps práticas na Amazon Web Services (AWS). Ele cria um aplicativo de amostra que cria uma vitrine e um backend para navegar e comprar livros e fornece um microsserviço que pode ser desenvolvido de forma independente. O padrão usa o AWS Cloud9 como ambiente de desenvolvimento, um banco de dados do Amazon DynamoDB como armazenamento de dados e serviços da AWS, como AWS e AWS, para integração contínua CodePipeline e funcionalidade de implantação contínua ( CodeBuild CI/CD).

O padrão orienta você nas seguintes atividades de desenvolvimento: 

  • Criar um ambiente de desenvolvimento do AWS Cloud9

  • Usando CloudFormation modelos da AWS para criar um aplicativo web e um microsserviço para livros

  • Usando o AWS Cloud9 para modificar o frontend, confirmar alterações e testar alterações

  • Criando e testando um pipeline de CI/CD para o microsserviço

  • Automatizando testes unitários

O código desse padrão é fornecido no repositório GitHub do AWS DevOps End-to-End Workshop.

Pré-requisitos e limitações

Pré-requisitos

Importante: criar esse aplicativo de demonstração em sua conta da AWS cria e consome recursos da AWS. Você é responsável pelo custo dos serviços e recursos da AWS usados para criar e executar o aplicativo. Depois de concluir seu trabalho, lembre-se de remover todos os recursos para evitar cobranças contínuas. Para obter instruções de limpeza, consulte a seção Épicos

Limitações

Este passo a passo é destinado apenas para fins de demonstração e desenvolvimento. Para usá-lo em um ambiente de produção, consulte as melhores práticas de segurança na documentação do AWS Identity and Access Management (IAM) e faça as alterações necessárias nos perfis do IAM, no Amazon DynamoDB e em outros serviços usados. O aplicativo web é derivado do aplicativo de demonstração do AWS Bookstore; para considerações adicionais, consulte a seção Limitações conhecidas do arquivo README.

Arquitetura

A arquitetura do aplicativo da livraria é ilustrada na seção Arquitetura do arquivo README do aplicativo de demonstração do AWS Bookstore

Do ponto de vista da implantação, o aplicativo Bookstore Demo usa um único CloudFormation modelo para implantar todos os serviços e objetos em uma única pilha. Esse padrão faz algumas alterações para demonstrar como um determinado desenvolvedor ou equipe poderia trabalhar em um produto específico (livros) e atualizá-lo independentemente do resto do aplicativo. Por esse motivo, o código desse padrão separa as funções do AWS Lambda e os objetos relacionados do microsserviço Books em um CloudFormation segundo modelo, que cria uma pilha de livros. Isso possibilita ver o microsserviço sendo atualizado usando práticas de CI/CD. No diagrama a seguir, a borda tracejada identifica o microsserviço Books.

Um microsserviço de livros em uma arquitetura fracamente acoplada que usa práticas. DevOps

Ferramentas

Ferramentas

  • Estrutura Jest para testes JavaScript

  • Python 3.9

Código

O código-fonte e os modelos desse padrão estão disponíveis no repositório GitHub do AWS DevOps End-to-End Workshop. Antes de seguir as etapas na seção Épicos, baixe todos os arquivos do repositório para o seu computador.

Nota: a seção Épicos fornece as etapas de alto nível para este passo a passo, para fornecer informações gerais sobre o processo. Para concluir cada etapa, consulte o arquivo README no repositório do AWS DevOps End-to-End Workshop para obter instruções detalhadas.

O repositório do AWS DevOps End-to-End Workshop estende o repositório do aplicativo de demonstração do AWS Bookstore e usa uma versão modificada do código AWS Cloud9 Bootstrapping para criar o AWS Cloud9 IDE.

Práticas recomendadas

Usar o aplicativo Bookstore é simples. Aqui estão algumas das melhores práticas recomendadas:

  • Ao instalar o aplicativo, você pode usar um nome de projeto de sua escolha ou usar o nome padrão (demobookstore) por conveniência.

  • Depois de instalar e executar o aplicativo, é uma boa prática desligar o banco de dados Amazon Neptune se você quiser continuar testando por mais um dia, pois a instância do banco de dados pode resultar em cobranças adicionais. No entanto, esteja ciente de que o banco de dados será iniciado automaticamente após sete dias.

  • Para obter detalhes do código, consulte a documentação do repositório do aplicativo de demonstração do AWS Bookstore. Ela descreve cada microsserviço e tabela.

  • Para obter melhores práticas adicionais, consulte Alguns desafios se você tiver tempo... seção do arquivo README no repositório do AWS DevOps End-to-End Workshop. Recomendamos que você analise as informações para se aprofundar nos recursos adicionais de segurança e praticar serviços de dissociação.

Épicos

TarefaDescriçãoHabilidades necessárias

Baixe o código-fonte em GitHub.

O código-fonte e os modelos desse padrão estão disponíveis no repositório GitHub do AWS DevOps End-to-End Workshop. Antes de seguir as próximas etapas na seção Épicos, baixe todos os arquivos do repositório para o seu computador.

Nota: a seção Épicos fornece as etapas de alto nível para este passo a passo, para fornecer informações gerais sobre o processo. Para concluir cada etapa, consulte o arquivo README no repositório do AWS DevOps End-to-End Workshop para obter instruções detalhadas.

O repositório do AWS DevOps End-to-End Workshop estende o repositório do aplicativo de demonstração do AWS Bookstore e usa uma versão modificada do código AWS Cloud9 Bootstrapping para criar o AWS Cloud9 IDE.

Desenvolvedor de aplicativos
TarefaDescriçãoHabilidades necessárias

Crie as funções do Lambda e de frontend para o aplicativo Bookstore.

  1. Faça login no CloudFormation console e implante o DemoBookstoreMainTemplate.yml modelo para criar a DemoBookStoreStack pilha. Isso cria as funções de frontend e Lambda que estão fora do microsserviço Books.

  2. Na guia Saídas da pilha, anote o URL do site abaixo do WebApplicationrótulo.

Desenvolvedor

Crie o microsserviço Books.

No CloudFormation console, implante o DemoBookstoreBooksServiceTemplate.yml modelo para criar a DemoBooksServiceStack pilha.

Desenvolvedor

Teste seu aplicativo.

Use o URL do site da DemoBookStoreStack pilha para acessar o aplicativo Bookstore.

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Crie um AWS Cloud9 IDE.

No CloudFormation console, implante o C9EnvironmentTemplate.yml modelo para criar um ambiente AWS Cloud9.

Desenvolvedor, líder de desenvolvimento

Crie CodeCommit repositórios.

  1. Faça login no CodeCommit console da AWS e verifique se você tem um demobookstore-WebAssets repositório que contém o código do aplicativo front-end.

  2. Crie um repositório para o microsserviço Books chamado demobookstore-BooksService.

  3. Clone os dois repositórios no AWS Cloud9 (demobookstore-WebAssets e demobookstore-BooksService) usando o comando git clone.

Desenvolvedor

Altere o código no frontend e verifique o pipeline.

  1. Use o AWS Cloud9 para fazer algumas alterações no código em uma página da web. Isso atualizará o repositório demobookstore-WebAssets.

  2. No CodePipeline console da AWS, verifique se o DemoBookstore-Assets-Pipeline está em execução. 

  3. Teste seu aplicativo web atualizando-o no navegador (Ctrl+F5 no Firefox).

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Adicione os arquivos YAML para a compilação e a atualização do serviço.

  1. No AWS Cloud9, faça o upload dos arquivos buildspec.yml e DemoBookstoreBooksServiceUpdateTemplate.yml .

    • buildspec.yml tem instruções de construção e também inclui instruções de teste para testes automatizados. Eles são comentados neste momento e serão usados posteriormente.

    • DemoBookstoreBooksServiceUpdateTemplate.yml é uma versão atualizada do DemoBookstoreBooksServiceTemplate.yml, para ser usada no estágio de implantação do pipeline.

  2. Faça commit e envie os arquivos.

Desenvolvedor

Crie um bucket do S3 para o pipeline de compilação.

Para criar um bucket do S3, siga as instruções na documentação do Amazon S3.

  • O nome do bucket deve ser exclusivo globalmente, por exemplo, demobookstore-books-service-pipeline-bucket-<YYYYMMDDHHMM>

  • Desmarque a caixa de seleção Bloquear todo o acesso público e marque a caixa de seleção Eu reconheço...

Desenvolvedor

Use o IAM para criar uma função para CloudFormation implantação.

Crie uma função demobookstore-CloudFormation-role a anexe-a à política AdministratorAccess. No próximo épico, você pode reconfigurar essa função para obter permissões mínimas.

Desenvolvedor

Crie um novo pipeline para automatizar a criação e a implantação do microsserviço Books.

Crie um funil (por exemplo, demobookstore- BooksService -Pipeline) com os estágios Commit, Build e Deploy, conforme descrito no arquivo README.

Desenvolvedor

Teste seu microsserviço no AWS Cloud9.

Faça uma alteração na ListBooksfunção e veja o pipeline funcionando.

Desenvolvedor

Automatize o teste unitário para a função ListBooks Lambda.

No AWS Cloud9 IDE, habilite a compilação para executar testes unitários e verificar os resultados do teste. Para obter instruções, consulte o arquivo README.

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Torne sua solução segura.

Configure demobookstore-CloudFormation-role para ter permissões mínimas e verifique também outras funções usadas.

Desenvolvedor

Elimine dependências nos CloudFormation modelos.

O método para trocar informações entre o modelo DemoBookstoreMainTemplate.yml e o modelo DemoBookstoreBooksServiceTemplate.yml é baseado em saídas e importações. A passagem de valores entre esses dois modelos adiciona dependências. Para eliminar as dependências, considere usar o AWS Systems Manager Parameter Store.

Desenvolvedor

Crie um microsserviço Cart.

Use o microsserviço Books como exemplo para retirar as funções relacionadas ao carrinho de compras do modelo DemoBookstoreMainTemplate.yml e criar um microsserviço de carrinho de compras.

Desenvolvedor
TarefaDescriçãoHabilidades necessárias

Exclua os buckets do S3.

No console do Amazon S3, exclua os seguintes buckets associados ao aplicativo web de amostra:

  • Dois buckets criados para o aplicativo de demonstração da AWS Bookstore. Os nomes dos buckets começam com o nome da pilha que você forneceu para a AWS CloudFormation quando criou o front-end; por exemplo,. DemoBookStoreStack

  • <YYYYMMDDHHMM>Um bucket para o pipeline de construção; por exemplo, demobookstore-books-service-pipeline-bucket-.

Desenvolvedor

Exclua as pilhas.

No CloudFormation console, exclua as pilhas associadas ao aplicativo web de amostra:

  • DemoBooksServiceStack

  • DemoBookStoreStack

A remoção pode levar mais de 90 minutos. Se a remoção falhar, exclua-os novamente e também exclua todos os recursos manuais (por exemplo, a VPC ou as interfaces de rede) com base nas notificações.

Desenvolvedor

Excluas os perfis do IAM.

No console do IAM, exclua as seguintes funções:

  • demobookstore-Cloudformation-role

  • demobookstore-BooksService-BuildProject-service-role

Para step-by-step obter instruções, consulte a documentação do IAM

Desenvolvedor

Recursos relacionados

Mais informações

Para obter step-by-step instruções detalhadas, consulte o arquivo README no repositório do AWS DevOps End-to-End Workshop. GitHub

Sobre a atualização de maio de 2023: esse padrão foi atualizado para usar versões mais recentes do Node e do Python. Atualizamos muitos dos pacotes no código-fonte e removemos o Glyphicon porque ele não é mais gratuito. Também removemos todas as dependências do repositório do aplicativo de demonstração do AWS Bookstore, para que os dois repositórios agora possam evoluir de forma independente.