

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
<a name="automate-deployment-of-nested-applications-using-aws-sam"></a>

*Dr. Rahul Sharad Gaikwad, Ishwar Chauthaiwale, Dmitry Gulin e Tabby Ward, Amazon Web Services*

## Resumo
<a name="automate-deployment-of-nested-applications-using-aws-sam-summary"></a>

Na Amazon Web Services (AWS), o AWS Serverless Application Model (AWS SAM) é uma estrutura de código aberto que fornece sintaxe abreviada para expressar APIs funções, bancos de dados e mapeamentos de fontes 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](https://github.com/aws-samples/aws-sam-nested-stack-sample).

## Pré-requisitos e limitações
<a name="automate-deployment-of-nested-applications-using-aws-sam-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Uma nuvem privada virtual (VPC) e sub-redes existentes
+ Um ambiente de desenvolvimento integrado, como o Visual Studio Code (para obter mais informações, consulte [Tools to Build on AWS](https://aws.amazon.com/getting-started/tools-sdks/#IDE_and_IDE_Toolkits))
+ 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
<a name="automate-deployment-of-nested-applications-using-aws-sam-architecture"></a>

**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 de chamadas 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 mecanismos de autenticação e autorização para o. 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 realizadas pelo API Gateway direcionadas às funções do Lambda, ao DynamoDB e ao Product Service.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5b454bae-5fd4-405d-a37d-6bafc3fcf889.png)


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.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/218adecc-b5b8-4193-9012-b5d584e2e128/images/5828026e-72ad-4a3f-a5f2-bffac0f13e42.png)


1. Compile e implante as pilhas.

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

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

1. 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
<a name="automate-deployment-of-nested-applications-using-aws-sam-tools"></a>

**Ferramentas**
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) ajuda você a criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+  CloudFormationA [AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 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](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornece autenticação, autorização e gerenciamento de usuários para suas aplicações Web e móveis.
+ O [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/what-is-sam.html) é 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)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) 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](https://github.com/aws-samples/aws-sam-nested-stack-sample).

## Épicos
<a name="automate-deployment-of-nested-applications-using-aws-sam-epics"></a>

### Instalar a AWS SAM CLI
<a name="install-aws-sam-cli"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale a AWS SAM CLI. | Para instalar a CLI do AWS SAM, consulte as instruções na [documentação do AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html). | 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.<pre>$aws configure<br />AWS Access Key ID [None]: <your_access_key_id><br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre>Para obter mais informações sobre como configurar suas credenciais e autenticação, consulte [Credenciais de autenticação e acesso](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html).  | DevOps engenheiro | 

### Inicialize o projeto AWS SAM
<a name="initialize-the-aws-sam-project"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Clone o repositório de códigos do AWS SAM. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | 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 | 

### Compile e crie o código do modelo SAM
<a name="compile-and-build-the-sam-template-code"></a>


| Tarefa | Description | Habilidades 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | 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.<pre>sam build</pre> | DevOps engenheiro | 

### Implante o modelo AWS SAM
<a name="deploy-the-aws-sam-template"></a>


| Tarefa | Description | Habilidades 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.<pre>sam deploy --guided --stack-name shopping-cart-nested-stack --capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND</pre>O comando exibirá algumas perguntas. Responda a todas as perguntas com `y`. | DevOps engenheiro | 

### Verificar a implantação
<a name="verify-the-deployment"></a>


| Tarefa | Description | Habilidades 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/automate-deployment-of-nested-applications-using-aws-sam.html) | DevOps engenheiro | 

## Recursos relacionados
<a name="automate-deployment-of-nested-applications-using-aws-sam-resources"></a>

**Referências**
+ [AWS Serverless Application Model (AWS SAM)](https://aws.amazon.com/serverless/sam/#:~:text=The%20AWS%20Serverless%20Application%20Model,and%20model%20it%20using%20YAML.)
+ [AWS SAM ativado GitHub](https://github.com/aws/serverless-application-model)
+ [Microsserviço de carrinho de compras com tecnologia sem servidor](https://github.com/aws-samples/aws-serverless-shopping-cart) (exemplo de aplicativo da AWS)

**Tutoriais e vídeos**
+ [Crie um aplicativo com tecnologia sem servidor](https://youtu.be/Hv3YrP8G4ag)
+ [Palestras técnicas on-line da AWS: criação e implantação de aplicativos com tecnologia sem servidor com o AWS SAM](https://youtu.be/1NU7vyJw9LU)

## Mais informações
<a name="automate-deployment-of-nested-applications-using-aws-sam-additional"></a>

Depois que todo o código estiver pronto, o exemplo tem a seguinte estrutura de diretórios:
+ [sam\$1stacks](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html): 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.