Automatize a implantação de aplicativos aninhados usando o AWS SAM - 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á.

Automatize a implantação de aplicativos aninhados usando o AWS SAM

Criado pelo Dr. Rahul Sharad Gaikwad (AWS), Dmitry Gulin (AWS), Ishwar Chauthaiwale (AWS) e Tabby Ward (AWS)

Repositório de código: aws-sam-nested-stack -sample

Ambiente: PoC ou piloto

Tecnologias: Modernização; Sem servidor; DevOps

Workload: todas as outras workloads

Serviços da AWS: AWS Serverless Application Repository

Resumo

Na Amazon Web Services (AWS), o AWS Serverless Application Model (AWS SAM) é uma estrutura de código aberto que fornece sintaxe abreviada para expressar funções, APIs, bancos de dados e mapeamentos de origem de eventos. Com apenas algumas linhas para cada recurso, você pode definir o aplicativo desejado e modelá-lo usando YAML. Durante a implantação, o SAM transforma e expande a sintaxe do SAM na sintaxe da AWS CloudFormation , que você pode usar para criar aplicativos sem servidor com mais rapidez.

O AWS SAM simplifica o desenvolvimento, a implantação e o gerenciamento de aplicativos com tecnologia sem servidor na plataforma da AWS. Ele fornece uma estrutura padronizada, implantação mais rápida, recursos de teste locais, gerenciamento de recursos, integração perfeita com ferramentas de desenvolvimento e uma comunidade de apoio. Esses recursos o tornam uma ferramenta valiosa para criar aplicativos com tecnologia sem servidor de forma eficiente e eficaz.

Esse padrão usa modelos do AWS SAM para automatizar a implantação de aplicativos aninhados. Um aplicativo aninhado é um aplicativo dentro de outro aplicativo. Os aplicativos principais chamam os aplicativos secundários. Esses são componentes com acoplamento fraco de uma arquitetura com tecnologia sem servidor. 

Usando aplicativos aninhados, você pode criar rapidamente arquiteturas com tecnologia sem servidor altamente sofisticadas reutilizando serviços ou componentes criados e mantidos de forma independente, mas compostos usando o AWS SAM e o Serverless Application Repository. Os aplicativos aninhados ajudam você a criar aplicativos mais poderosos, evitar a duplicação de trabalho e garantir a consistência e as melhores práticas em suas equipes e organizações. Para demonstrar aplicativos aninhados, o padrão implanta um exemplo de aplicativo de carrinho de compras com tecnologia sem servidor da AWS.

Pré-requisitos e limitações

Pré-requisitos

  • Uma conta AWS ativa

  • Uma nuvem privada virtual (VPC) e sub-redes existentes

  • Um ambiente de desenvolvimento integrado, como o AWS Cloud9 ou o Visual Studio Code (para obter mais informações, consulte Ferramentas para criar na AWS)

  • Biblioteca Python wheel instalada usando pip install wheel, se ainda não estiver instalada

Limitações

  • O número máximo de aplicativos que podem ser aninhados em um aplicativo com tecnologia sem servidor é 200.

  • O número máximo de parâmetros para um aplicativo aninhado pode ter 60.

Versões do produto

  • Essa solução foi criada na interface de linha de comando do AWS SAM (AWS SAM CLI) versão 1.21.1, mas essa arquitetura deve funcionar com versões posteriores da CLI do AWS SAM.

Arquitetura

Pilha de tecnologias de destino

  • Amazon API Gateway

  • AWS SAM

  • Amazon Cognito

  • Amazon DynamoDB

  • AWS Lambda

  • Fila do Amazon Simple Queue Service (Amazon SQS)

Arquitetura de destino

O diagrama a seguir mostra como as solicitações dos usuários são feitas aos serviços de compras por meio da chamada de APIs. A solicitação do usuário, incluindo todas as informações necessárias, é enviada ao Amazon API Gateway e ao autorizador do Amazon Cognito, que executa os mecanismos de autenticação e autorização para as APIs.

Quando um item é adicionado, excluído ou atualizado no DynamoDB, um evento é colocado no DynamoDB Streams, que por sua vez inicia uma função do Lambda. Para evitar a exclusão imediata de itens antigos como parte de um fluxo de trabalho síncrono, as mensagens são colocadas em uma fila SQS, que inicia uma função de trabalho para excluir as mensagens.

Operações POST e PUT, do API Gateway às funções Lambda, ao DynamoDB e ao Product Service.

Nessa configuração da solução, a CLI do AWS SAM serve como interface para pilhas da AWS CloudFormation . Os modelos do AWS SAM implantam automaticamente aplicativos aninhados. O modelo principal do SAM chama os modelos secundários e a pilha principal implanta as CloudFormation pilhas secundárias. Cada pilha secundária cria os recursos da AWS que são definidos nos modelos do AWS SAM CloudFormation .

Processo de quatro etapas usando a CLI do AWS SAM com pilhas de pais e três CloudFormation filhos.
  1. Compile e implante as pilhas.

  2. A CloudFormation pilha Auth contém o Amazon Cognito.

  3. A CloudFormation pilha de produtos contém uma função Lambda e o Amazon API Gateway

  4. A CloudFormation pilha de compras contém uma função Lambda, o Amazon API Gateway, a fila SQS e o banco de dados Amazon DynamoDB.

Ferramentas

Ferramentas

  • O Amazon API Gateway ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.

  • CloudFormationA AWS ajuda você a configurar recursos da AWS, provisioná-los de forma rápida e consistente e gerenciá-los durante todo o ciclo de vida em todas as contas e regiões da AWS.

  • O Amazon Cognito fornece autenticação, autorização e gerenciamento de usuários para suas aplicações Web e móveis.

  • O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.

  • O AWS Lambda é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • O AWS Serverless Application Model (AWS SAM) é uma estrutura de código aberto que ajuda na criação de aplicativos com tecnologia sem servidor na Nuvem AWS.

  • O Amazon Simple Queue Service (Amazon SQS) fornece uma fila hospedada segura, durável e disponível que ajuda a integrar e desacoplar sistemas e componentes de software distribuídos.

Código

O código desse padrão está disponível no repositório GitHub AWS SAM Nested Stack Sample.

Épicos

TarefaDescriçãoHabilidades necessárias

Instale a AWS SAM CLI.

Para instalar a CLI do AWS SAM, consulte as instruções na documentação do AWS SAM.

DevOps engenheiro

Configurar credenciais da AWS.

Para definir as credenciais da AWS para que a CLI do AWS SAM possa fazer chamadas para os serviços da AWS em seu nome, execute o comando aws configure e siga as instruções.

$aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:

Para obter mais informações sobre como configurar suas credenciais e autenticação, consulte Credenciais de autenticação e acesso.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Clone o repositório de códigos do AWS SAM.

  1. Clone o repositório de amostra aws sam nested stack para esse padrão digitando o comando a seguir.

    git clone https://github.com/aws-samples/aws-sam-nested-stack-sample.git
  2. Navegue até o diretório clonado inserindo o comando a seguir.

    cd aws-sam-nested-stack-sample
DevOps engenheiro

Implante modelos para inicializar o projeto.

Para inicializar o projeto, execute o comando SAM init. Quando solicitado a escolher uma origem de modelo, escolha Custom Template Location.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Analise os modelos de aplicativos do AWS SAM.

Analise os modelos dos aplicativos aninhados. Este exemplo usa os seguintes modelos de aplicativos aninhados:

  • auth.yaml: esse modelo configura recursos relacionados à autenticação, como o Amazon Cognito e o AWS Systems Manager Parameter Store.

  • product-mock.yaml: esse modelo implanta recursos relacionados ao produto, como funções do Lambda e Amazon API Gateway.

  • shoppingcart-service.yaml: esse modelo configura recursos relacionados ao carrinho de compras, como AWS Identity and Access Management (IAM), tabelas do DynamoDB e funções do Lambda.

DevOps engenheiro

Analise o modelo principal.

Analise o modelo que invocará os modelos de aplicativos aninhados. Neste exemplo, o modelo principal é template.yml. Todos os aplicativos separados estão aninhados no modelo pai único template.yml.

DevOps engenheiro

Compile e crie o código do modelo do AWS SAM.

Usando a AWS SAM CLI, execute o comando a seguir.

sam build
DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Implante os aplicativos.

Para iniciar o código do modelo SAM que cria as CloudFormation pilhas de aplicativos aninhadas e implanta o código no ambiente da AWS, execute o comando a seguir.

sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND

O comando exibirá algumas perguntas. Responda a todas as perguntas com y.

DevOps engenheiro
TarefaDescriçãoHabilidades necessárias

Verificar as pilhas.

Para analisar as CloudFormation pilhas e os recursos da AWS que foram definidos nos modelos do AWS SAM, faça o seguinte:

  1. Faça login no AWS Management Console e navegue até o CloudFormationconsole.

  2. Verifique se as pilhas principal e secundária estão listadas.

    Neste exemplo, sam-shopping-cart é a pilha principal que chama as pilhas aninhadas de Auth, Product e Shopping.

    A pilha de produtos fornece o link URL do Product API Gateway como saída.

DevOps engenheiro

Recursos relacionados

Referências

Tutoriais e vídeos

Mais informações

Depois que todo o código estiver pronto, o exemplo tem a seguinte estrutura de diretórios:

  • sam_stacks: essa pasta contém a camada shared.py. Uma camada é um arquivo que contém bibliotecas, um runtime personalizado ou outras dependências. Com camadas, você pode usar as bibliotecas na sua função sem a necessidade de incluí-las em um pacote de implantação.

  • product-mock-service— Essa pasta contém todas as funções e arquivos do Lambda relacionados ao produto.

  • shopping-cart-service— Essa pasta contém todas as funções e arquivos do Lambda relacionados a compras.