Olá pessoal, sejam muito bem-vindos a este novo módulo. E bom, até aqui nós temos aprendido bastante sobre o Terraform. Nós focamos então nosso aprendizado de infraestrutura como código no Terraform, que com certeza é uma ferramenta fantástica, é a ferramenta mais utilizada quando nós falamos principalmente de provisionamento, mas não se limita a isso, tá? Nós vimos que nós podemos também configurar, podemos fazer deployment, então é uma ferramenta bastante complexa e que vai te atender na maioria dos cenários, se não em todos os cenários dos projetos com os quais você está trabalhando. Mas, como eu citei lá no começo do curso, existem muitas outras ferramentas, existem muitas outras formas de nós trabalharmos com infraestrutura como código. Então, para nós não nos limitarmos somente ao Terraform e pensarmos que existe somente o Terraform, que é a melhor ferramenta, eu gostaria de trazer uma outra ferramenta. E eu decidi trazer aqui uma ferramenta que utiliza uma abordagem um pouco diferente. Ela não vai trabalhar com código declarativo, assim como nós fizemos ali com o Terraform, onde nós simplesmente colocamos o estado final da nossa infraestrutura. E beleza, o Terraform se encarrega de provisionar os recursos, de garantir que o estado da nossa infraestrutura estará de acordo com o que foi definido naquele código declarativo. Eu quis trazer aqui agora uma outra ferramenta, uma ferramenta que vai utilizar um código imperativo. Então nós vamos trabalhar com um código imperativo para declarar a nossa infraestrutura. E não só isso, nós vamos utilizar uma linguagem que é a nossa linguagem preferida, que é a linguagem com a qual nós já trabalhamos no nosso dia a dia. Porque o CDK nada mais é do que um package um package disponível para a seguinte linguagem está escrito javascript python java se charpe e gol são as linguagens mais comuns então muito provavelmente uma dessas linguagens já é a linguagem com a qual você trabalha no seu dia a dia então você já está totalmente familiarizado com essas linguagens são são linguagens muito comuns. E é por isso que o CDK é bastante utilizado, porque você não precisa aprender uma nova linguagem, você vai trabalhar com aquele com o qual você já está acostumado. A questão é que o CDK é específico da AWS, nós não conseguimos utilizar o CDK para provisionar recursos em um outro Cloud Provider. Mas, considerando que a AWS é o maior Cloud Provider que nós temos hoje, que está sempre crescendo, é um Cloud Provider gigante, eu acho que vale a pena nós aprendermos sobre CDK. Novamente, eu não vou entrar muito em detalhes sobre a AWS. Vou tentar trazer conceitos da AWS de uma forma mais abstrata. Vou tentar abstrair esse conhecimento para que caso você não tenha esse conhecimento prévio de AWS, você ainda consiga seguir o curso e entender a ideia por trás dessa ferramenta. E bom, é claro que existem outras ferramentas também que utilizam código imperativo, porém elas trabalham de uma forma um pouco diferente que o AWS CDK. Existem, por exemplo, as ferramentas AWS CLI, existe também o Azure, quando nós trabalhamos com o Azure nós temos o Azure CLI, temos também o Azure PowerShell. São todas ferramentas que utilizam código imperativo. que utilizam código imperativo. A questão é que é muito difícil nós garantirmos a idempotência utilizando essas ferramentas de command line. Porque no AWS CLI ou no Azure CLI, por exemplo, nós temos comandos para criar uma máquina virtual. Porém, se nós rodarmos esse script várias vezes, essa máquina virtual, novas máquinas virtuais estarão sendo criadas. Então, ele não consegue fazer o gerenciamento do estado de forma automática, ele não sabe que aquele comando é na verdade para atualizar uma máquina que já existe. Se aquela máquina existe eu não quero criá-la novamente, agora se ela não existe, beleza, eu quero criar. Não, isso a gente não consegue fazer de uma forma muito simples com essas ferramentas de command line. Já o Terraform, como nós vimos, tem esse gerenciamento de estado, ele tem ali o TF State, que mantém como se fosse um snapshot da nossa infraestrutura, e por isso quando nós rodamos Terraform Apply, ele simplesmente compara aquele snapshot com o nosso novo estado, com o estado desejado de acordo com o código que nós declaramos e aplica somente aquilo que foi alterado. Então nós temos esse gerenciamento de estado lá no Terraform como nós já vimos em detalhes. Aqui no CDK, apesar de nós estarmos trabalhando com uma ferramenta que utiliza um código interativo, nós temos o gerenciamento de estado. Então nós vamos garantir que se nós rodarmos o mesmo código duas vezes, nós não vamos criar recursos duplicados, nós não teremos conflitos, nem nada do tipo. Ele consegue identificar aquilo que foi alterado e aplicar somente aquilo que foi alterado. Então, essa também é uma ferramenta muito fantástica. E essa ferramenta está muito ligada, está muito relacionada com o CloudFormation, que é um serviço da AWS sobre o qual nós falaremos em mais detalhes na próxima aula, tá? Mas se você já ouviu falar em CloudFormation, você pode até ficar um pouco confuso, né? Porque CloudFormation, geralmente nós utilizamos ali templates que utilizam um código declarativo, mas você vai entender em detalhes como funciona essa conexão entre o código imperativo do CDK e o código declarativo do CloudFormation, tá? Então, não preocupe que nós vamos entender isso na prática. Então, é isso. O CDK, ele nos oferece aí uma flexibilidade muito grande, tá? Porque nós podemos utilizar a nossa linguagem de programação favorita, isso nos permite criar infraestruturas muito complexas, tá? Então, se nós temos ali, por exemplo, às vezes um determinado ambiente em desenvolvimento, você quer criar uma pipeline de continuous integration, continuous deployment, que não precise de uma aprovação manual. Esse seria um exemplo, tá? Já em produção, você quer um stage de aprovação manual. Esse seria um exemplo. Já em produção, você quer um stage de aprovação manual. Isso é muito fácil de você configurar ali no seu CDK. É muito simples você ter um IF e colocar essas condições de acordo com o ambiente, algo que às vezes pode não ser tão simples de você fazer ali num template CloudFormation ou no Terraform. Isso foi simplesmente um exemplo, mas você pode utilizar FOR, você pode utilizar, por exemplo, classes, como nós podemos trabalhar com linguagens que são orientadas a objetos, nós podemos utilizar todos os recursos da orientação a objetos e isso nos permite criar módulos, nos permite criar classes que vão ser reutilizadas. Então, eu vou dar um exemplo próprio. No projeto em que eu trabalho atualmente, nós provisionamos a nossa infraestrutura exclusivamente com a AWS CDK. Então, todos os recursos que nós criamos é com a AWS CDK. E ao longo do tempo, nós identificamos que a maioria dos projetos tinham algumas coisas em comum. Então, nós, por exemplo, trabalhamos muito com arquitetura orientada a eventos e nesses casos, geralmente, nós criávamos uma função Lambda, que é um serviço de service de software as a service da própria AWS, onde nós nos preocupamos simplesmente com o código, então é um serverless da AWS, nós sempre utilizávamos uma função dessa, uma função lambda, serverless, e nós geralmente recebíamos o evento de uma fila do SQS, por exemplo, que seria correspondente a um Wrapped MQ, caso você não tenha ouvido falar de SQS. Então nós tínhamos sempre esse cenário, era bastante comum, e ali nós tínhamos várias linhas de código para provisionar esses recursos. Como nós vimos que isso era algo bastante comum, nós resolvemos abstrair essa lógica. Então, nós criamos ali uma classe que utiliza o design pattern builder, e nós agora disponibilizamos essa função, esse Builder, onde nós podemos criar uma função Lambda que se inscreve em uma fila SQS com três ou quatro linhas de código. Então, nós conseguimos provisionar a nossa infraestrutura de forma muito rápida. E essas classes que nós fomos, claro que nós criamos muitas outras classes também, nós criamos constantes para referenciar a nossa VPC, as subnetos em cada ambiente e assim por diante. Então, nós colocamos isso em classes que são reutilizadas em todos os projetos e para facilitar, nós publicamos todas essas classes em um projeto único lá no nosso Code Artifact, que é o nosso repositório de código-fonte, nosso repositório de bibliotecas. Então, nós temos lá e sempre que nós precisamos criar um novo projeto, nós simplesmente instalamos esse package lá no nosso novo projeto e nós temos essas funções auxiliares baseadas em CDK que nos permitem criar a nossa infraestrutura de uma forma muito mais simples, muito mais rápida, atendendo a nossa necessidade. Então, existe muita flexibilidade trabalhando com AWS e CDK. Mas, isso aqui foi simplesmente para dar uma introdução, para falar sobre a existência dessa ferramenta, porque muita gente não conhece, mostrar as linguagens que são compatíveis. Aqui tem um detalhe importante, nós falaremos sobre isso nas próximas aulas, mas apesar de nós podermos trabalhar com qualquer linguagem, nós precisamos ter o Node.js instalado na nossa máquina. Mas nós falaremos sobre esses requerimentos com mais detalhes nas próximas aulas. Espero que vocês tenham gostado, que vocês estejam gostando,