Implemente aplicativos de várias pilhas usando o AWS CDK com TypeScript - 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á.

Implemente aplicativos de várias pilhas usando o AWS CDK com TypeScript

Criado pelo Dr. Rahul Sharad Gaikwad (AWS)

Ambiente: produção

Tecnologias: Modernização; Migração; DevOps

Workload: todas as outras workloads

Serviços da AWS: Amazon API Gateway; AWS Lambda; Amazon Kinesis

Resumo

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

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.

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

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.

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.

Ferramentas

Ferramentas

  • O AWS Amplify Console é 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 é 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) é 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 é 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 é um serviço web que acelera a distribuição de conteúdo web estático e dinâmico, como arquivos.html, .css, .js e de imagem. 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 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 é 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 é um serviço totalmente gerenciado para fornecer dados de streaming 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 é um serviço para coleta e processamento de grandes fluxos de registros de dados em tempo real.

  • O ‭‬AWS Lambda‭ é 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) é 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

TarefaDescriçãoHabilidades 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
TarefaDescriçãoHabilidades necessárias

Configurar credenciais.

Para configurar as credenciais, execute o comando aws configure e siga as instruções.

$aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: your_secret_access_key Default region name [None]: Default output format [None]:
DevOps
TarefaDescriçãoHabilidades 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
TarefaDescriçãoHabilidades necessárias

Faça o bootstrap do ambiente.

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.

DevOps
TarefaDescriçãoHabilidades 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.

TarefaDescriçãoHabilidades 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
TarefaDescriçãoHabilidades 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.

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

Referências

Mais informações

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 GET escolhido em OPÇÕES.

Anexos

Para acessar o conteúdo adicional associado a este documento, descompacte o seguinte arquivo: attachment.zip