

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á.

# Implante aplicativos de várias pilhas usando o AWS CDK com TypeScript
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript"></a>

*Dr. Rahul Sharad Gaikwad, Amazon Web Services*

## Resumo
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-summary"></a>

Esse padrão fornece uma step-by-step abordagem para implantação de aplicativos na Amazon Web Services (AWS) usando o AWS Cloud Development Kit (AWS CDK) com TypeScript. Como exemplo, o padrão implanta um aplicativo de análise em tempo real com tecnologia sem servidor.

O padrão cria e implanta aplicativos de pilha aninhados. A pilha principal da AWS chama a CloudFormation pilha secundária, ou aninhada, de pilhas.  Cada pilha secundária cria e implanta os recursos da AWS que estão definidos na pilha. CloudFormation O AWS CDK Toolkit, o comando da interface de linha de comando (CLI)`cdk`, é a interface principal das pilhas. CloudFormation 

## Pré-requisitos e limitações
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Nuvem privada virtual (VPC) e sub-redes existentes
+ AWS CDK Toolkit instalado e configurado
+ Um usuário com permissões de administrador e um conjunto de chaves de acesso.
+ Node.js
+ AWS Command Line Interface (AWS CLI)

**Limitações**
+ Como o AWS CDK usa a AWS CloudFormation, os aplicativos do AWS CDK estão sujeitos a cotas de CloudFormation serviço. Para obter mais informações, consulte [as CloudFormation cotas da AWS](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html).

**Versões do produto**

Esse padrão foi criado e testado usando as seguintes ferramentas e versões.
+ Kit de ferramentas do AWS CDK 1.83.0
+ Node.js 14.13.0
+ npm 7.0.14

O padrão deve funcionar com qualquer versão do AWS CDK ou npm. Observe que as versões 13.0.0 a 13.6.0 do Node.js não são compatíveis com o AWS CDK.

## Arquitetura
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-architecture"></a>

**Pilha de tecnologias de destino**
+ AWS Amplify Console
+ Amazon API Gateway
+ AWS CDK
+ Amazon CloudFront
+ Amazon Cognito
+ Amazon DynamoDB
+ Amazon Data Firehose
+ Amazon Kinesis Data Streams
+ AWS Lambda
+ Amazon Simple Storage Service (Amazon S3)

**Arquitetura de destino**

O diagrama a seguir mostra a implantação de aplicativos em várias pilhas usando o AWS CDK com. TypeScript

![\[Arquitetura de pilha na VPC, com uma pilha principal e duas pilhas secundárias que contêm recursos.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/8f92e86a-aa3d-4f8a-9b11-b92c52a7226c.png)


 

O diagrama a seguir mostra a arquitetura do exemplo de aplicação em tempo real com tecnologia sem servidor.

![\[Arquitetura de aplicativos na região.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/2df00faf-f871-4aec-9655-19ba2eb14cf8.png)


 

## Ferramentas
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-tools"></a>

**Ferramentas**
+ O [AWS Amplify Console](https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html) é o centro de controle para implantações completas de aplicativos móveis e web na AWS. O host do Amplify Console fornece um fluxo de trabalho baseado em git para hospedar aplicativos web fullstack com tecnologia sem servidor com implantação contínua. A UI Admin é uma interface visual para desenvolvedores web e móveis frontend criarem e gerenciarem backends de aplicativos fora do console da AWS.
+ [O Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) é um serviço da AWS para criar, publicar, manter, monitorar e proteger REST, HTTP e WebSocket APIs em qualquer escala.
+ O [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar a infraestrutura da Nuvem AWS em código.
+ [O AWS CDK Toolkit](https://docs.aws.amazon.com/cdk/latest/guide/cli.html) é um kit de desenvolvimento em nuvem de linha de comando que ajuda você a interagir com seu aplicativo AWS CDK. O comando `cdk` CLI é a principal ferramenta para interagir com seu aplicativo AWS CDK. Ele executa seu aplicativo, interroga o modelo de aplicativo que você definiu e produz e implanta os CloudFormation modelos da AWS gerados pelo CDK da AWS.
+  CloudFrontA [Amazon](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Introduction.html) é um serviço web que acelera a distribuição de conteúdo web estático e dinâmico, como arquivos.html, .css, .js e imagens. CloudFront entrega seu conteúdo por meio de uma rede mundial de data centers chamados de pontos de presença para menor latência e melhor desempenho.
+ 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 seus aplicativos Web e móveis. Seus usuários podem fazer login diretamente ou por meio de terceiros.
+ 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 uma performance rápida e previsível com escalabilidade integrada.
+ [O Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) é um serviço totalmente gerenciado para fornecer [dados de streaming](https://aws.amazon.com/streaming-data/) em tempo real para destinos como Amazon S3, Amazon Redshift, OpenSearch Amazon Service, Splunk e qualquer endpoint HTTP personalizado ou endpoints HTTP de propriedade de provedores de serviços terceirizados compatíveis.
+ O [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) é um serviço para coleta e processamento de grandes fluxos de registros de dados em tempo real.
+ O [‭‬AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)‭ é um serviço de computação que permite a execução do código sem provisionar ou gerenciar servidores O Lambda executa o código somente quando necessário e dimensiona automaticamente, desde algumas solicitações por dia até milhares por segundo. Você paga apenas pelo tempo de computação consumido. Não haverá cobranças quando o código não estiver em execução.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.

**Código **

O código desse padrão está anexado.

## Épicos
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-epics"></a>

### Instale o AWS CDK Toolkit
<a name="install-aws-cdk-toolkit"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Instale o AWS CDK Toolkit. | Para instalar o AWS CDK Toolkit globalmente, execute o comando a seguir.`npm install -g aws-cdk` | DevOps | 
| Verificar a versão. | Para verificar a versão do AWS CDK Toolkit, execute o comando a seguir. `cdk --version` | DevOps | 

### Configurar credenciais da AWS
<a name="set-up-aws-credentials"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configurar credenciais. | Para configurar as credenciais, execute o comando `aws configure` e siga as instruções.<pre>$aws configure<br />AWS Access Key ID [None]: <br />AWS Secret Access Key [None]: your_secret_access_key<br />Default region name [None]:<br />Default output format [None]:</pre> | DevOps | 

### Baixe o código do projeto
<a name="download-the-project-code"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Baixe o código do projeto em anexo. | Para obter mais informações sobre a estrutura de diretórios e arquivos, consulte a seção *Informações adicionais*. | DevOps | 

### Faça o bootstrap do ambiente do AWS CDK
<a name="bootstrap-the-aws-cdk-environment"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Inicialize o ambiente do . | Para implantar o CloudFormation modelo da AWS na conta e na região da AWS que você deseja usar, execute o comando a seguir.`cdk bootstrap <account>/<Region>`Para obter mais informações, consulte a [documentação da AWS](https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html). | DevOps | 

### Crie e implante o projeto
<a name="build-and-deploy-the-project"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie o projeto. | Para construir o código do projeto, execute o comando `npm run build`. | DevOps | 
| Implante o projeto. | Para implantar o código do projeto, execute o comando `cdk deploy`. |  | 

### Verificar as saídas
<a name="verify-outputs"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Verifique a criação da pilha. | No AWS Management Console, escolha **CloudFormation**. Nas pilhas do projeto, verifique se uma pilha principal e duas pilhas secundárias foram criadas. | DevOps | 

### Teste a aplicação
<a name="test-the-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Enviar dados ao Kinesis Data Streams. | Configure sua conta da AWS para enviar dados para o Kinesis Data Streams usando o Amazon Kinesis Data Generator (KDG). Para obter mais informações, consulte [Amazon Kinesis Data Generator](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html). | DevOps | 
| Crie um usuário do Amazon Cognito. | [Para criar um usuário do Amazon Cognito, baixe o CloudFormation modelo cognito-setup.json na seção *Criar um usuário do Amazon Cognito na página de ajuda do Kinesis Data Generator*.](https://awslabs.github.io/amazon-kinesis-data-generator/web/help.html) Inicie o modelo e, em seguida, insira seu **nome de usuário** e **senha** do Amazon Cognito.A guia **Outputs** (Saídas) lista o URL do Kinesis Data Generator. | DevOps | 
| Faça o login no Kinesis Data Generator | Para fazer login no KDG, use as credenciais do Amazon Cognito que você forneceu e o URL do Kinesis Data Generator. | DevOps | 
| Testar o aplicativo. | No KDG, em **Modelo de registro**, **Modelo 1**, cole o código de teste na seção *Informações adicionais* e selecione **Enviar** dados. | DevOps | 
| Teste o API Gateway. | Depois que os dados forem ingeridos, teste o API Gateway usando o método `GET` para recuperar dados. | DevOps | 

## Recursos relacionados
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-resources"></a>

**Referências**
+ [Nuvem AWS Development Kit](https://aws.amazon.com/cdk/)
+ [AWS CDK em GitHub](https://github.com/aws/aws-cdk)
+ [Trabalhar com pilhas aninhadas](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-nested-stacks.html)
+ [Exemplo de exemplo da AWS – Análise em tempo real com tecnologia sem servidor](https://github.com/aws-samples/serverless-realtime-analytics)

## Mais informações
<a name="deploy-multiple-stack-applications-using-aws-cdk-with-typescript-additional"></a>

**Detalhes do diretório e do arquivo**

Esse padrão configura as três pilhas a seguir.
+ `parent-cdk-stack.ts`: essa pilha atua como pilha principal e chama os dois aplicativos secundários de pilhas aninhadas. 
+ `real-time-analytics-poc-stack.ts`: essa pilha aninhada contém a infraestrutura e o código do aplicativo.
+ `real-time-analytics-web-stack.ts`: essa pilha aninhada contém somente o código estático do aplicativo web.

*Arquivos importantes e suas funcionalidades*
+ `bin/real-time-analytics-poc.ts`: ponto de entrada do aplicativo AWS CDK. Ele carrega todas as pilhas definidas em `lib/`.
+ `lib/real-time-analytics-poc-stack.ts`: definição da pilha (`real-time-analytics-poc`) do aplicativo AWS CDK.
+ `lib/real-time-analytics-web-stack.ts`: definição da pilha (`real-time-analytics-web-stack`) do aplicativo AWS CDK.
+ `lib/parent-cdk-stack.ts`: definição da pilha (`parent-cdk`) do aplicativo AWS CDK.
+ `package.json`: manifesto do módulo npm, que inclui o nome, a versão e as dependências do aplicativo.
+ `package-lock.json`: mantido pelo npm.
+ `cdk.json`: kit de ferramentas para executar o aplicativo.
+ `tsconfig.json`— A TypeScript configuração do projeto.
+ `.gitignore`: lista de arquivos que o Git deve excluir do controle de origem.
+ `node_modules`: mantido pelo npm; inclui as dependências do projeto.

A seção de código a seguir na pilha principal chama os aplicativos secundários como pilhas de CDK aninhadas da AWS.

```
import * as cdk from '@aws-cdk/core';
import { Construct, Stack, StackProps } from '@aws-cdk/core';
import { RealTimeAnalyticsPocStack } from './real-time-analytics-poc-stack';
import { RealTimeAnalyticsWebStack } from './real-time-analytics-web-stack';


export class CdkParentStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);


    new RealTimeAnalyticsPocStack(this, 'RealTimeAnalyticsPocStack');
    new RealTimeAnalyticsWebStack(this, 'RealTimeAnalyticsWebStack');
  }
}
```

**Código para teste**

```
session={{date.now('YYYYMMDD')}}|sequence={{date.now('x')}}|reception={{date.now('x')}}|instrument={{random.number(9)}}|l={{random.number(20)}}|price_0={{random.number({"min":10000, "max":30000})}}|price_1={{random.number({"min":10000, "max":30000})}}|price_2={{random.number({"min":10000, "max":30000})}}|price_3={{random.number({"min":10000, "max":30000})}}|price_4={{random.number({"min":10000, "max":30000})}}|price_5={{random.number({"min":10000, "max":30000})}}|price_6={{random.number({"min":10000, "max":30000})}}|price_7={{random.number({"min":10000, "max":30000})}}|price_8={{random.number({"min":10000, "max":30000})}}|
```

**Teste o API Gateway**

No console do API Gateway, teste o API Gateway usando o método `GET`. 

![\[Console do API Gateway, com a opção GET escolhida em OPTIONS.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/0ac29a11-1362-4084-92ed-6b85205763ca/images/452e5b8f-6d61-401d-8484-e5a436cb6f1b.png)


 

## Anexos
<a name="attachments-0ac29a11-1362-4084-92ed-6b85205763ca"></a>

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: [ attachment.zip](samples/p-attach/0ac29a11-1362-4084-92ed-6b85205763ca/attachments/attachment.zip)