Começar a usar o AWS CDK

GUIA DE CONCEITOS BÁSICOS

Módulo 3: Criar o primeiro projeto do AWS CDK

Neste módulo, você usará o AWS Cloud Development Kit (CDK) para criar a infraestrutura.

Introdução

Neste guia, você usará a CLI do AWS CDK para criar um projeto de infraestrutura com o TypeScript. Também aprenderemos a escrever um recurso simples e a sintetizar e implantar o código do CDK. A sintetização permite que o CDK transforme o código da infraestrutura em modelos do AWS CloudFormation.

O que você aprenderá

  • Criar um projeto do CDK com o TypeScript.
  • Escrever um recurso simples no CDK (VPC).
  • Sintetizar o código do CDK em um modelo do CloudFormation.
  • Implantar a infraestrutura na sua conta da AWS.

 Tempo para a conclusão

15 minutos

 Pré-requisitos do módulo

  • Conta da AWS com acesso de administrador**
  • Navegador recomendado: versão mais recente do Chrome ou Firefox

[**]Talvez as contas criadas nas últimas 24 horas ainda não tenham acesso aos serviços necessários para este tutorial.

Implementação

Criar um projeto do CDK

Para criar um projeto do CDK, usaremos a CLI dele. Primeiro, crie um diretório vazio no sistema e acesse-o. Usaremos cdk init para criar um projeto do CDK com o TypeScript:

mkdir cdk-demo
cd cdk-demo
cdk init --language typescript

A estrutura de pastas será criada, e os módulos necessários para o projeto do CDK com o TypeScript serão instalados. A saída deve ter esta aparência:

Applying project template app for typescript
# Welcome to your CDK TypeScript project!

This is a blank project for TypeScript development with CDK.

The `cdk.json` file tells the CDK Toolkit how to execute your app.

## Useful commands

 * `npm run build`   compile typescript to js
 * `npm run watch`   watch for changes and compile
 * `npm run test`    perform the jest unit tests
 * `cdk deploy`      deploy this stack to your default AWS account/region
 * `cdk diff`        compare deployed stack with current state
 * `cdk synth`       emits the synthesized CloudFormation template

Initializing a new git repository...
Executing npm install...
npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated
npm WARN deprecated sane@4.1.0: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added
npm notice
npm notice New minor version of npm available! 7.19.0 -> 7.20.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v7.20.1
npm notice Run npm install -g npm@7.20.1 to update!
npm notice
✅ All done!

Também serão apresentados comandos necessários para ajudar você a iniciar o projeto do CDK. Agora vamos escrever o primeiro código do CDK para criar a infraestrutura.

Criar a infraestrutura

Para começar a criar o projeto, crie uma rede virtual logicamente isolada definida por você, chamada de Amazon Virtual Private Cloud (VPC). Antes de criar a primeira VPC, precisamos entender os arquivos criados pelo comando cdk init.

Criar e implantar a aplicação do CDK

├── bin
│   └── cdk-demo.ts
├── cdk.json
├── jest.config.js
├── lib
│   └── cdk-demo-stack.ts
├── package.json
├── package-lock.json
├── README.md
├── test
│   └── cdk-demo.test.ts
└── tsconfig.json

Confira os arquivos importantes e saiba para que eles servem:

  • bin/cdk-project.ts: é o ponto de partida para a aplicação do CDK. Ele carregará/criará todas as pilhas definidas em lib/*.
  • lib/cdk-project-stack.ts: é nele que você define a pilha principal de aplicações do CDK. Seus recursos e propriedades podem ser inseridos aqui.
  • package.json: é nele que você define as dependências do projeto, informações adicionais e scripts de compilação (npm buildnpm testnpm watch).
  • cdk.json: esse arquivo indica ao toolkit como ele deve executar a aplicação, além de configurações e parâmetros adicionais relacionados ao CDK e ao projeto.

O foco deste guia será os arquivos lib/cdk-demo.ts e bin/cdk-demo.ts, que servem para criar a infraestrutura. Vamos adicionar o código.

Definir aspectos da aplicação

Antes de definirmos a VPC na pilha principal, precisamos garantir que a implantação será realizada na conta e na região certas. O CDK recupera as informações da configuração aws cli local, mas é melhorar defini-las manualmente no código do CDK para evitar valores incorretos quando a configuração for alterada. Neste guia, elas serão necessárias devido às configurações definidas na VPC. Se você não especificá-las, a pilha ficará independente do ambiente, mas alguns recursos e consultas de contexto não funcionarão. Para obter mais informações, consulte ambientes na documentação.

Modifique a pilha bin/cdk-demo.ts para que ela fique da forma a seguir. Lembre-se de substituir o ID da conta da AWS pelo número correto e escolha a região adequada. Sugerimos escolher us-east-1 ou eu-west-1 para este guia.

#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { CdkDemoStack } from '../lib/cdk-demo-stack';

const app = new cdk.App();
new CdkDemoStack(app, 'CdkDemoStack', {
  env: { account: '123456789012', region: 'eu-west-1' },

});

Agora você já pode escrever o primeiro recurso.

Criar o código da VPC

Criaremos uma VPC com duas subnets públicas distribuídas entre duas zonas de disponibilidade. Antes de começarmos a escrever o código, precisamos explicar e instalar os módulos da biblioteca de construções. Diferentes serviços são agrupados em módulos para permitir que você só adicione as dependências necessárias à infraestrutura provisionada. Os módulos podem ser referentes a apenas um serviço, como o AWS Amplify, ou a vários serviços, como o Amazon EC2. Neste guia, precisaremos do módulo do Amazon EC2, que também inclui suporte para VPCs da AWS.

Para instalar o módulo, usaremos npm. Execute o seguinte comando no diretório do projeto:

npm install @aws-cdk/aws-ec2

Ele instalará todos os módulos necessários. Veja que ele também foi adicionado ao arquivo package.json.

Agora já podemos criar a VPC. Abra a definição da pilha em lib/cdk-demo.ts. Ao abrir o arquivo, você deverá ver o seguinte:

import * as cdk from '@aws-cdk/core';

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

    // The code that defines your stack goes here
  }
}

Esse é o esqueleto do projeto. Se você executasse o CDK nesse momento, nenhum recurso seria criado, pois ainda não os definimos. Para começar a configurar a VPC, precisamos importar o módulo instalado e referenciar os módulos do código. Importaremos as classes Vpc SubnetType.

import * as cdk from '@aws-cdk/core';

// CHANGE: This is where you import the classes from the module:
import { Vpc, SubnetType } from '@aws-cdk/aws-ec2';

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

    // The code that defines your stack goes here
  }
}

No momento da criação da VPC, é possível definir várias propriedades para atender a nossas necessidades. Por padrão, uma VPC será criada em três availability zones (AZs – Zonas de Disponibilidade) com subnets públicas e privadas (com um único internet gateway e três NAT gateways). Neste guia, criaremos uma configuração bem simples com duas AZs e uma subnet pública para cada uma. Leia este este documento para conferir uma explicação mais detalhada sobre as diferenças. 

Para criar a VPC, especificaremos duas AZs e os detalhes para criar uma subnet pública, conforme indicado abaixo:

import * as cdk from '@aws-cdk/core';
import { Vpc, SubnetType } from '@aws-cdk/aws-ec2';

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

    // The code that defines your stack goes here
    // CHANGE: We have created the vpc object from the Vpc class.
    const vpc = new Vpc(this, 'MainVpc',{
    
    // CHANGE: this is where we define how many AZs to use
    maxAzs: 2,
      
   // CHANGE: We define a single subnet configuration per AZ.
      subnetConfiguration:  [
        {
          // CHANGE: this is it's CIDR mask so 255.255.255.0
          cidrMask: 24,

          // CHANGE: a name for each of these subnets
          name: 'public-subnet',

          // CHANGE: and the subnet type to be used - here we will have
          // a public subnet. There are other options available here.
          subnetType: SubnetType.PUBLIC
        },
      ]
    });
  }
}

Agora já podemos implantar a alteração da infraestrutura na conta.

Tempo de implementação

É hora de testar a implementação. Para ver se o código é válido, execute npm build para compilar o TypeScript no JavaScript. Caso a ação seja bem-sucedida, você poderá executar o comando deploy:

cdk deploy

Ele compilará o TypeScript no JavaScript e criará um conjunto de alterações do CloudFormation para implantar a alteração. O CDK faz tudo isso por você , além de carregar o arquivo do modelo no S3 e usar o CloudFormation para executá-lo. A saída será semelhante à seguinte:

# cdk deploy
CdkDemoStack: deploying...
CdkDemoStack: creating CloudFormation changeset...
[··························································] (0/13)

3:50:17 PM | CREATE_IN_PROGRESS   | AWS::CloudFormation::Stack            | CdkDemoStack
3:50:21 PM | CREATE_IN_PROGRESS   | AWS::EC2::InternetGateway             | MainVpc/IGW
3:50:21 PM | CREATE_IN_PROGRESS   | AWS::EC2::VPC                         | MainVpc
3:50:22 PM | CREATE_IN_PROGRESS   | AWS::CDK::Metadata                    | CDKMetadata/Default

Após alguns minutos, você verá um sinal de visto em verde com o nome do recurso da Amazon (ARN) da pilha recém-criada do CloudFormation. A nova VPC foi implantada e já pode ser usada.

Limpar os recursos (opcional)

A VPC criada neste guia não gera custos mensais, mas há uma cota que limita cada região de uma conta, permitindo apenas cinco VPCs. Se necessário, você pode abrir um chamado de suporte para aumentar o limite. Caso você queira remover os recursos recém-criados, execute o comando cdk destroy pela pilha do CloudFormation criada anteriormente.

cdk destroy

Você deve receber o aviso abaixo. Depois de pressionar y e Enter, ele começará a remover toda a infraestrutura e fornecerá atualizações. Após a conclusão do processo, você verá o seguinte:

Are you sure you want to delete: CdkEcsInfraStack (y/n)? y
CdkEcsInfraStack: destroying...

✅  CdkEcsInfraStack: destroyed

Conclusão

Parabéns! Você chegou ao fim do guia Conceitos básicos do AWS CDK. Neste guia, criamos uma VPC para gerar o primeiro projeto do AWS CDK no TypeScript. Vimos como inicializar um novo projeto do CDK e usá-lo para criar a infraestrutura. O código do CDK e a VPC serão usados nos próximos guias, então recomendamos que você confira como implantar a primeira aplicação Web. 

Caso você queira saber mais sobre conceitos como estruturas de pastas, construções, pilhas e aplicações, recomendamos que leia a documentação

Envie seus comentários.

Agradecemos por seus comentários
Ficamos satisfeitos por esta página ter ajudado você. Deseja compartilhar detalhes adicionais para nos ajudar a continuar melhorando?
Fechar
Agradecemos por seus comentários
Lamentamos que esta página não tenha ajudado você. Deseja compartilhar detalhes adicionais para nos ajudar a continuar melhorando?
Fechar