Olá pessoal, sejam muito bem-vindos a mais uma aula. E bom, quando nós estávamos falando sobre Terraform, eu mostrei algumas abordagens que nós temos para nós trabalharmos com múltiplos ambientes. Então, às vezes nós definimos a infraestrutura e nós queremos utilizar aqueles mesmos módulos, aquelas mesmas definições em diferentes ambientes, no ambiente de homologação e no ambiente de produção, por exemplo. Às vezes os ambientes estarão em diferentes contas, às vezes não estarão na mesma conta, porém, quando eles estão na mesma conta, eu quero que os meus recursos tenham um nome diferente, eles tenham um prefixo diferente, dependendo do ambiente. Se eles estiverem em contas diferentes, eu vou ter parâmetros também que devem ser diferentes, que devem ser diferenciados uns dos outros, como eu mostrei, por exemplo, o CiderBlock, que pode ser diferente de um ambiente para outro, ou qualquer outra propriedade. Então, nós falamos sobre múltiplos diretórios e falamos também sobre Workspaces. Agora eu gostaria de mostrar qual é a alternativa que nós temos quando nós estamos trabalhando aqui com o CDK. É lógico que, como nós estamos trabalhando com Python, uma linguagem muito dinâmica, muito poderosa, nós temos várias opções, nós temos diferentes abordagens para nós atingirmos o mesmo objetivo. Eu vou mostrar aqui uma opção. Então, vamos supor que a gente queira fazer o deploy da nossa stack, essa website stack que nós criamos, agora para um ambiente de desenvolvimento. E vamos supor que nós queremos criar esse ambiente de desenvolvimento na mesma conta. Nós queremos recursos específicos para desenvolvimento, porém na mesma conta. Bom, nós podemos fazer o seguinte. De forma muito simples, basta nós duplicarmos a nossa stack. Nós criamos uma outra instância da nossa stack. Nesse caso, nós precisamos dar um nome diferente para a stack. Então, nós temos aqui em primeiro lugar a stack de dev. Então, nós teremos dev, website, stack e teremos aqui prod, website, stack. Nós podemos mudar o prefixo dos nossos recursos, porque para relembrarmos, nós temos aqui na nossa stack, no construtor, o recebimento do parâmetro prefixo e esse parâmetro ele é utilizado através de todos os nossos módulos, através do módulo de Network e através também do módulo de Cluster e ele é repassado para os recursos criados em cada um desses módulos. Então nós podemos passar um prefixo diferente dessa forma, cada componente, cada recurso da nossa infraestrutura terá um nome diferente, evitando qualquer colisão de nome. Então nós podemos colocar dev-website e prod-website para stack de produção. Simples assim. Quando nós salvamos, nós podemos rodar aqui o comando cdkls, que se eu não me engano já mostrei para vocês esse comando, mas basicamente ele vai sintetizar aqui o nosso projeto e ele vai identificar quais são as stacks que foram definidas nesse projeto e aqui ele vai identificar quais são as stacks que foram definidas nesse projeto, e aqui ele já mostra para nós as stacks dev website stack e prod website stack. Então nós fazemos o deploy muito simples, nós rodamos aqui cdk deploy, como eu já mostrei, nós passamos agora de forma obrigatória o nome da stack, e nós informamos o nosso profile, caso seja necessário, mas eu não vou fazer o deploy agora, porque eu gostaria de mostrar para vocês que nós conseguimos ir além e definir também quantas diferentes para essas stacks. Nós podemos utilizar aqui o Env, o Environment, que existe disponível para nós passarmos aqui para a nossa stack. Nós estamos aqui estendendo o comportamento dessa stack e essa stack recebe aqui vários argumentos os quais nós podemos customizar então nós podemos informar aqui este carinha, o parâmetro env onde nós passamos a conta e a região então eu vou passar aqui a conta e a região para este ambiente de desenvolvimento então eu vou fazer deploy nessa conta e nessa região específica agora para a produção é uma outra conta, então eu tenho uma outra conta aqui e eu vou utilizá-la neste exemplo. Então, estou passando aqui uma conta diferente, a região vai ser a mesma, mas estamos falando de uma outra conta. E a ideia é a mesma, então agora nós podemos rodar o deploy utilizando um profile que tenha permissão de acesso para a respectiva conta e beleza, nós teremos a nossa infraestrutura replicada em dev e em produção em contas diferentes. Agora, você pode se perguntar aí, mas e se eu quiser customizar alguma coisa específica dos recursos de acordo com o ambiente? Então vamos supor aqui que a gente queira um CiderBlock diferente no ambiente de dev. Eu não quero o mesmo CiderB block que eu estou utilizando em produção. Isso é muito simples, nós podemos utilizar parâmetros, assim como nós temos o prefixo, que muda de acordo com o ambiente, nós podemos ter o CIDER block. Poderíamos ter aqui um outro parâmetro CIDER block e informar este parâmetro no momento da instanciação da nossa stack. É claro que à medida que nós aumentamos a quantidade de parâmetros, o código começa a perder um pouco de legibilidade, fica um pouco difícil de trabalhar. Portanto, nós podemos definir uma classe com todos esses parâmetros customizáveis e nós populamos essa classe de acordo com cada ambiente e passamos essa instância dessa classe para a sua respectiva stack. Então, é bem dinâmico, lembre-se que você está trabalhando com uma linguagem de código imperativo, você está trabalhando com Python, então você tem total controle aqui sobre a sua aplicação, você pode utilizar tudo que o Python te oferece, beleza? Bom, eu não vou customizar mais nada aqui, mas eu vou fazer o deploy para mostrar para vocês de fato que eu não estou mentindo. Então o primeiro comando que eu vou rodar aqui é o cdk deploy, vou passar o nome da nossa stack, no caso eu vou primeiro fazer o deploy da dev website stack, e vou passar aqui meu profile, que no caso para esta conta específica é o profile default. Então como nós estamos trabalhando com aquelas credenciais, no arquivo config, no arquivo credentials, nós precisamos passar aqui geralmente um profile diferente para cada conta, tá? A não ser que você esteja trabalhando com SSO, e aí você tem rows, às vezes, que tem permissões cross-account, às vezes você pode utilizar o mesmo profile, tá? Vai depender aí do seu cenário. Mas, o que você tem que garantir é que seu profile tenha acesso a essa conta específica. E eu vou colocar aqui para fazer o deploy. É claro que esse deploy demora, então eu vou pausar a aula. Depois eu farei o deploy também da nossa stack de produção. E ao finalizar o deploy dessas duas stacks, eu vou mostrar para vocês o resultado. Preciso colocar uma confirmação. Beleza, vou aguardar aqui. Daqui a pouco eu já volto após a finalização do deploy após alguns minutos o deploy de ambas as stacks foi finalizado tá, então nós temos aqui prod website stack, deployment type 193 segundos e temos também a nossa dev website stack deployment time 199 segundos, beleza, então temos aqui as nossas duas stacks que já subiram. Nós estamos falando de ambientes diferentes, de contas diferentes. Então, nós vamos verificar se isso de fato aconteceu. Nós temos a primeira conta, que é a conta que se inicia com 590. Essa daqui é a nossa conta de produção. Nós temos aqui a nossa PROD website stack, nós podemos acessá-la, nós podemos navegar até recursos, e nós vemos todos os nossos recursos criados aqui. Então, nós temos PROD website IGW, que é o nosso internet gateway, temos o internet gateway attachment, e nós podemos verificar que todos os IDs dos nossos recursos possuem esse prefixo PROD website, diferenciando na nossa stack de desenvolvimento. Então, eu vou navegar até a minha outra conta, deixa eu verificar se eu consigo encontrá-la aqui, perfeito. Dar um refresh, essa conta aqui para nós confirmarmos é a conta 304, só para nós conferirmos também o nosso projeto na conta 304 conta de deve beleza nós vamos navegar até a nossa esteque até recursos e nós temos aqui todos os dias os nossos recursos né começando com o nosso interesse de ter porém agora deve traço website internet do youtube utilizando o mesmo projeto utilizando os mesmos módulos nós muito facilmente conseguimos replicar o as stacks para diferentes ambientes para diferentes contas para diferentes regiões de uma forma extremamente simples sabe eu diria que às vezes até mais simples do que em terraform pela praticidade pelo dinamismo que nós temos a utilizar python e pela forma como o cdk funciona de forma geral tá então acho que ficou bem claro é bem simples como já ficou a como já mostrei pra vocês e agora para finalizar eu não sei se eu já havia mostrado anteriormente mas nós temos aqui o comando cdk destrói onde nós podemos destruir como o próprio nome sugere claro as nossas stacks nós vamos informar aqui o nome das nossas stacks, primeiro eu vou informar dev website stack passando o profile respectivo, que no meu caso é o profile default, para essa conta específica é claro que a gente poderia fazer o delete de todas as stacks ao mesmo tempo porém nós precisamos de profiles diferentes para cada uma dessas stacks, é por isso que aqui no meu caso não vai funcionar, tá? mas em determinadas situações podemos fazer o excluir todas as stacks de uma única vez precisamos confirmar e é claro que não preciso nem dizer que essa é uma operação irreversível tá? Então todos os seus recursos serão de fato destruídos e se você não consegue voltar, você teria que fazer o deploy novamente. Beleza? Então dessa forma nós finalizamos aqui o assunto sobre CDK, sobre múltiplos ambientes. Eu realmente espero que você tenha gostado e nós nos vemos em uma próxima aula.