<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ana Carolina Manzan</title>
    <description>The latest articles on DEV Community by Ana Carolina Manzan (@devsnasnuvens).</description>
    <link>https://dev.to/devsnasnuvens</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F333927%2Fd71c3fc0-3cfe-434b-8401-87335246dc04.jpeg</url>
      <title>DEV Community: Ana Carolina Manzan</title>
      <link>https://dev.to/devsnasnuvens</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devsnasnuvens"/>
    <language>en</language>
    <item>
      <title>Implementando Blue-Green deployment com Deployment slots do Azure Web App</title>
      <dc:creator>Ana Carolina Manzan</dc:creator>
      <pubDate>Thu, 23 Jan 2025 01:02:13 +0000</pubDate>
      <link>https://dev.to/devsnasnuvens/implementando-blue-green-deployment-com-deployment-slots-do-azure-web-app-o48</link>
      <guid>https://dev.to/devsnasnuvens/implementando-blue-green-deployment-com-deployment-slots-do-azure-web-app-o48</guid>
      <description>&lt;p&gt;Você já passou pela experiência de planejar os seus deployments fora de horário comercial por causa da indisponibilidade que o deployment pode causar? &lt;/p&gt;

&lt;p&gt;Ou então, depois de finalizar o deployment, você se deu conta de que a nova versão tem problemas que não deveriam chegar ao ambiente produtivo e precisou realizar um rollback para a versão anterior?&lt;/p&gt;

&lt;p&gt;Neste artigo, eu quero mostrar uma solução simples para este problema utilizando a estratégia &lt;strong&gt;&lt;em&gt;blue-green deployment&lt;/em&gt;&lt;/strong&gt; com os deployment slots do Azure App Service.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que são &lt;em&gt;deployment slots&lt;/em&gt;?
&lt;/h2&gt;

&lt;p&gt;Primeiramente, precisamos entender o que são os &lt;em&gt;deployment slots&lt;/em&gt; e como eles podem nos auxiliar a aplicar a estratégia Blue-green.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/azure/app-service/deploy-staging-slots?wt.mc_id=studentamb_234887" rel="noopener noreferrer"&gt;Deployment slots&lt;/a&gt; é uma funcionalidade específica do recurso Azure App Service que facilita a implantação da aplicação seguindo a estratégia blue-green. Ele nos permite criar uma réplica, um ambiente duplicado atrelado ao Web App original que irá se comportar como um ambiente de preparação que irá receber novas versões da nossa aplicação.&lt;/p&gt;

&lt;h3&gt;
  
  
  E como isso se relaciona com a estratégia blue-green?
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;blue-green&lt;/strong&gt; é uma estratégia de deployment que consiste em termos uma réplica do ambiente produtivo, na qual iremos implantar as novas versões da aplicação. Depois da implantação, chaveiam-se os ambientes e todas as requisições para a aplicação são encaminhadas para esta nova versão, liberando assim o acesso a todos os usuários. &lt;/p&gt;

&lt;p&gt;Uma de suas vantagens é que, em caso de erros na nova versão, basta redirecionar as requisições dos usuários de volta para a versão anterior.&lt;/p&gt;

&lt;p&gt;Vou usar uma &lt;strong&gt;analogia&lt;/strong&gt; para explicar melhor: Imagine que você tem 2 cozinhas em seu restaurante: uma azul e uma verde. A cozinha azul é utilizada para preparar as refeições e servir os seus clientes, enquanto a cozinha verde está passando por uma reforma. Quando a reforma da cozinha verde é finalizada, você volta a utilizá-la para preparar as refeições e servir seus clientes, e, se tudo correr bem, você então irá desativar a cozinha azul.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vamos à prática
&lt;/h2&gt;

&lt;p&gt;Para utilizar os deployment slots, é necessário criar um Web App atrelado a um App Service Plan na camada Standard, no mínimo. As camadas Premium e Isolated de precificação também oferecem a funcionalidade de Deployment Slots.&lt;/p&gt;

&lt;p&gt;Para facilitar esta etapa, vamos usar o &lt;strong&gt;Azure CLI&lt;/strong&gt; para criar os recursos.&lt;/p&gt;

&lt;p&gt;Quero deixar uma explicação breve sobre o código de criação de recursos abaixo: da linha 1 até a linha 5, criamos variáveis que vão conter as informações dos recursos, como por exemplo, a região onde o recurso deve ser criado, o nome do grupo de recursos, do App Service Plan, do web app e do deployment slot. Você pode trocar os valores das variáveis de acordo com o nome que desejar para seus recursos.&lt;/p&gt;

&lt;p&gt;Da linha 7 até a linha 10 do código, vamos criar o grupo de recursos, o App Service Plan, o Web App e o Deployment Slot acoplado ao Web App.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Os comandos acima podem ser executados diretamente no seu computador (após instalar o &lt;a href="https://learn.microsoft.com/en-us/cli/azure/install-azure-cli?wt.mc_id=studentamb_234887" rel="noopener noreferrer"&gt;Azure CLI&lt;/a&gt;) ou no portal do Azure usando o cloud shell.&lt;/p&gt;

&lt;p&gt;Depois de executar os comandos, esse é o resultado que esperamos no portal do Azure, com todos os recursos criados:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2bewrxhsyz5rphfcaco.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe2bewrxhsyz5rphfcaco.png" alt="Image description" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Logo após a criação dos recursos, o Web App (à esquerda) e o Deployment Slot (à direita) exibirão uma mensagem aguardando pelo código que será implantado neles, conforme a imagem abaixo: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5ng2ckcpu5wrt7w4ydw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm5ng2ckcpu5wrt7w4ydw.png" alt="Image description" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora com a infraestrutura pronta, precisamos criar uma pipeline que fará a implantação (o deployment) da aplicação no Web App, e depois disso, fará a operação de troca do Web App com o Deployment Slot.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;No código acima, temos as tarefas que farão as operações de deployment e troca de ambientes. Vamos focar nestas duas tarefas da pipeline por ora, mas disponibilizei o código completo da pipeline &lt;a href="https://github.com/devsnasnuvens/blue-green-with-web-apps/blob/main/deployment/azure-pipelines.yml" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; e o código completo do projeto &lt;a href="https://github.com/devsnasnuvens/blue-green-with-web-apps" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A primeira tarefa da pipeline será utilizada para implantar a nossa aplicação no Web App. Nesta tarefa, o código da aplicação será enviado diretamente ao deployment slot chamado &lt;strong&gt;stage&lt;/strong&gt; do Web App &lt;strong&gt;bgapp&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Depois que o código for implantado no deployment slot, na segunda tarefa vamos realizar a operação de troca dos ambientes (swap). Nesta etapa, trocamos o deployment slot &lt;strong&gt;stage&lt;/strong&gt; de lugar com o Web App que está em produção, e então, disponibilizaremos aos nossos usuários a versão mais atual da aplicação.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Observe que neste cenário, sempre que tivermos uma implantação, a troca também acontecerá logo depois dela. Se desejar ou se for aplicável ao seu cenário, você também pode executar a operação de troca manualmente no portal do Azure.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  É hora de testar!
&lt;/h2&gt;

&lt;p&gt;Agora que finalizamos as implementações, configure e execute a pipeline diretamente no Azure DevOps pela primeira vez e valide então o resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi182p3dvtmj4xeoan1sq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi182p3dvtmj4xeoan1sq.png" alt="Image description" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após a primeira execução da pipeline, implantamos a versão da aplicação que contém a funcionalidade &lt;strong&gt;blue&lt;/strong&gt;, como podemos confirmar na imagem acima.&lt;/p&gt;

&lt;p&gt;Agora, iremos implementar a funcionalidade &lt;strong&gt;green&lt;/strong&gt; e implantar novamente com a nossa pipeline. Altere o código fonte para exibir a funcionalidade &lt;strong&gt;green&lt;/strong&gt;, faça o commit e o push para o Azure DevOps, e então, a pipeline será acionada pelas mudanças realizadas na branch main.&lt;/p&gt;

&lt;p&gt;Durante a execução da pipeline, o código será implantando no deployment slot &lt;strong&gt;stage&lt;/strong&gt; inicialmente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasdnxxpphkme3ewxllb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fasdnxxpphkme3ewxllb6.png" alt="Image description" width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E depois que a operação de troca de ambientes acontecer, teremos então o resultado final da nossa nova implementação:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq9oaj3cj5p7xgmae07d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq9oaj3cj5p7xgmae07d.png" alt="Image description" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;À esquerda na imagem acima, temos o nosso ambiente produtivo do Web App com a versão da aplicação que contém a funcionalidade &lt;strong&gt;green&lt;/strong&gt;. À direita, temos o slot stage com a versão anterior que contém a funcionalidade &lt;strong&gt;blue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Espero que este conteúdo possa contribuir para sua jornada, e se você gostou, deixe um comentário ou entre em contato comigo no &lt;a href="https://linkedin.com/in/anamanzandev" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Até mais! 👋&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Automatizando a inclusão de certificados ao Key Vault usando Azure DevOps Secure Files com Terraform</title>
      <dc:creator>Ana Carolina Manzan</dc:creator>
      <pubDate>Thu, 21 Nov 2024 20:12:07 +0000</pubDate>
      <link>https://dev.to/devsnasnuvens/automatizando-a-inclusao-de-certificados-ao-key-vault-usando-azure-devops-secure-files-com-terraform-3lm5</link>
      <guid>https://dev.to/devsnasnuvens/automatizando-a-inclusao-de-certificados-ao-key-vault-usando-azure-devops-secure-files-com-terraform-3lm5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fakoldbm5zedr1sjvjq3t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fakoldbm5zedr1sjvjq3t.jpg" alt="Image description" width="612" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao trabalharmos com certificados de autoridade certificadora, quando por exemplo, configuramos o SSL no Azure Application Gateway ou no Azure API Management, podemos nos deparar com a necessidade de adicionar os certificados ao Azure Key Vault. Neste artigo, veremos um método de adicionar os certificados automaticamente ao Key Vault, sem a necessidade de intervenções manuais que podem causar interrupções no processo de automação. Para alcançarmos este objetivo, vamos utilizar o Secure Files do Azure DevOps e Terraform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurações no Azure DevOps
&lt;/h2&gt;

&lt;p&gt;Vamos trabalhar com um cenário onde já temos um um certificado no formato &lt;strong&gt;.pfx&lt;/strong&gt; e uma senha para o certificado. Para começar, vamos fazer o upload do nosso certificado na seção Secure Files do Azure DevOps. Acesse &lt;strong&gt;&lt;code&gt;https://dev.azure.com/&amp;lt;nome_da_organizacao&amp;gt;/&amp;lt;nome_do_projeto&amp;gt;/_library?itemType=SecureFiles&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdotgnzmizvvojzkcs3bw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdotgnzmizvvojzkcs3bw.png" alt="Image description" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como na imagem acima, clique no botão &lt;code&gt;+ Secure File&lt;/code&gt; para fazer o upload do seu certificado. Para o exemplo do artigo, criei um dummy certificate (veja como criar &lt;a href="https://allenvisser.azurewebsites.net/2023/07/27/how-to-quickly-create-a-dummy-self-signed-certificate-for-sandbox-testing/" rel="noopener noreferrer"&gt;aqui&lt;/a&gt; ou &lt;a href="https://gist.github.com/mrcunninghamz/4f4ebbeeb4cfa9667870b8af4db24dc6" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;) com o nome &lt;strong&gt;&lt;em&gt;certificate.pfx&lt;/em&gt;&lt;/strong&gt;, fiz o upload para o Secure Files e renomeei o arquivo para &lt;strong&gt;certificate&lt;/strong&gt; (Removi a extensão .pfx do arquivo para facilitar o uso do nome do certificado em variáveis). &lt;/p&gt;

&lt;p&gt;Depois de realizar o upload, acesse o arquivo do certificado para dar permissão à pipeline na qual você deseja usá-lo. Siga os passos conforme a imagem:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Face8r61tte3i9y8f6cep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Face8r61tte3i9y8f6cep.png" alt="Image description" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como faremos o deployment da infraestrutura através de uma pipeline yaml, vamos adicionar duas variáveis ao grupo de variáveis que vamos utilizar para este artigo: &lt;em&gt;CERTIFICATE_NAME&lt;/em&gt; e &lt;em&gt;CERTIFICATE_PASSWORD&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvezk90pjxhoexhwjbx1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvezk90pjxhoexhwjbx1d.png" alt="Image description" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Código Terraform
&lt;/h2&gt;

&lt;p&gt;Vamos agora trazer o código terraform para a criação do Key Vault.&lt;br&gt;
No código abaixo, temos a criação do Key Vault contendo políticas de acesso que vão permitir que a nossa Service Principal crie (Create), importe (&lt;em&gt;Import&lt;/em&gt;) e obtenha (&lt;em&gt;Get&lt;/em&gt;) certificados.&lt;/p&gt;

&lt;p&gt;Além disso, no bloco &lt;strong&gt;azurerm_key_vault_certificate&lt;/strong&gt; temos a criação do certificado em si, obtendo o conteúdo do certificado através da função &lt;a href="https://developer.hashicorp.com/terraform/language/functions/filebase64" rel="noopener noreferrer"&gt;filebase64&lt;/a&gt; e da variável &lt;em&gt;certificate_path&lt;/em&gt; que contém o caminho para o arquivo do certificado.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Pipeline
&lt;/h2&gt;

&lt;p&gt;Na pipeline, precisamos realizar o download do arquivo do certificado que está dentro do Secure Files. Para isso, usaremos a tarefa &lt;a href="https://learn.microsoft.com/azure/devops/pipelines/tasks/reference/download-secure-file-v1?wt.mc_id=studentamb_234887" rel="noopener noreferrer"&gt;DownloadSecureFile@1&lt;/a&gt;. Esta é uma tarefa relativamente simples, que recupera um arquivo do Secure Files a partir do seu nome. &lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Neste bloco de código, podemos observar que a tarefa tem dois parâmetros importantes: &lt;em&gt;name&lt;/em&gt; e &lt;em&gt;secureFile&lt;/em&gt; (dentro do bloco inputs). &lt;br&gt;
O parâmetro &lt;strong&gt;name&lt;/strong&gt; vai nos servir como uma variável para obter as saídas da tarefa (como o caminho para onde o arquivo foi baixado, por exemplo).&lt;br&gt;
Já o parâmetro &lt;strong&gt;secureFile&lt;/strong&gt; vai receber o valor da variável &lt;em&gt;CERTIFICATE_NAME&lt;/em&gt; que criamos anteriormente no nosso grupo de variáveis.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Já na tarefa que executa o comando &lt;strong&gt;terraform apply&lt;/strong&gt;, como vemos acima, vamos passar o caminho do certificado para a variável &lt;em&gt;certificate_path&lt;/em&gt; utilizando o mesmo valor do parâmetro name da tarefa DownloadSecureFile@1, e referenciando o valor de saída com o &lt;em&gt;.secureFilePath&lt;/em&gt;. Neste exemplo, o resultado é &lt;strong&gt;$(certificate_secure_file.secureFilePath)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Excluindo o arquivo do certificado
&lt;/h3&gt;

&lt;p&gt;Podemos realizar a exclusão do arquivo do certificado de dentro do agente de deployment usando a tarefa &lt;a href="https://learn.microsoft.com/azure/devops/pipelines/tasks/reference/delete-files-v1?wt.mc_id=studentamb_234887" rel="noopener noreferrer"&gt;DeleteFiles@1&lt;/a&gt;. Esta tarefa faz a exclusão de arquivos e/ou pastas a partir do caminho apontado a ela no parâmetro Contents. Aqui também vamos utilizar a variável &lt;strong&gt;$(certificate_secure_file.secureFilePath)&lt;/strong&gt; para garantir que depois de utilizado pelo terraform, o nosso certificado será excluído do agente.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Você pode encontrar o código completo do exemplo deste artigo &lt;a href="https://github.com/devsnasnuvens/az-devops-certificates-keyvault" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Este é artigo traduzido e adaptado do &lt;a href="https://medium.com/@t.costantini89/add-certificates-in-key-vault-from-azure-devops-secure-files-with-terraform-fd075417e8d0" rel="noopener noreferrer"&gt;artigo original&lt;/a&gt; escrito por T. Constantini.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Observabilidade à uma tela com Dashboards</title>
      <dc:creator>Ana Carolina Manzan</dc:creator>
      <pubDate>Wed, 16 Oct 2024 23:40:26 +0000</pubDate>
      <link>https://dev.to/devsnasnuvens/observabilidade-a-uma-tela-com-dashboards-48c2</link>
      <guid>https://dev.to/devsnasnuvens/observabilidade-a-uma-tela-com-dashboards-48c2</guid>
      <description>&lt;p&gt;Este artigo foi escrito, em uma iniciativa conjunta no curso de Observabilidade da comunidade WomakersCode, por:&lt;/p&gt;

&lt;p&gt;Ana Carolina Manzan - &lt;a href="https://www.linkedin.com/in/anamanzandev/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;br&gt;
Daniela Farias - &lt;a href="https://www.linkedin.com/in/daniela-farias-dev/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
Gabriela Tavares - &lt;a href="https://www.linkedin.com/in/gabrielatavaresv/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
Natacsha Melo - &lt;a href="http://linkedin.com/in/natacsha" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Quando falamos sobre o assunto observabilidade, é natural pensarmos em pilares e em ferramentas que possam tornar os nossos sistemas observáveis. Nossos sistemas podem ser observados através de logs, métricas e traces, e estes podem ser instrumentados através de ferramentas de monitoramento como os &lt;strong&gt;dashboards&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é um dashboard?
&lt;/h2&gt;

&lt;p&gt;Um dashboard é um painel personalizado para exibição de informações, que permite unir informações e dados para apresentação visual, geralmente em forma de gráfico ou tabelas, e a partir da junção deles é possível fazer várias análises desses dados. Um dashboard conta uma história, ao olharmos para ele é possível identificar o que está sendo transmitido.&lt;/p&gt;

&lt;p&gt;O dashboard nos permite ver os dados em tempo real, podendo fazer a análise dos dados de maneira eficiente e assertiva, que também é uma ferramenta muito importante na tomada de decisões.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quais ferramentas usar para a criação de um dashboard?
&lt;/h2&gt;

&lt;p&gt;Agora que já entendemos o que é um dashboard, conheceremos quais ferramentas podemos utilizar para a construção dos dashs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.tableau.com/" rel="noopener noreferrer"&gt;Tableau&lt;/a&gt;&lt;/strong&gt;: É uma ferramenta de visualização de dados mais popular disponível atualmente. Suporta um número grande de dados, e permite flexibilidade no manipulação dos dados&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.microsoft.com/power-platform/products/power-bi?wt.mc_id=studentamb_234887" rel="noopener noreferrer"&gt;Microsoft Power BI&lt;/a&gt;&lt;/strong&gt;: Uma ferramenta líder de mercado na construção de dashs, que permite a integração com outros produtos da Microsoft como Excel e Azure. Oferece recursos robustos na visualização de dados, interativos e podem ser compartilhados com outros usuários.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://sentry.io/welcome" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;&lt;/strong&gt;: É uma ferramenta que rastreia erros e mostra as falhas na pilha de código quando elas ocorrem, e também, oferece dashboards configuráveis que permitem visualizar métricas de erro, desempenho e tendências ao longo do tempo. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://grafana.com" rel="noopener noreferrer"&gt;Grafana&lt;/a&gt;&lt;/strong&gt;: É uma ferramenta na qual permite a criação de dashboards dinâmicos, pois possui suporte para diversos tipos de fonte de dados, possibilitando a visualização e monitoramento dos dados do sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://learn.microsoft.com/azure/azure-monitor/app/app-insights-overview?wt.mc_id=studentamb_234887" rel="noopener noreferrer"&gt;Azure Application Insights&lt;/a&gt;&lt;/strong&gt;: O Application Insights é uma funcionalidade do Azure Monitor, e é um produto do Azure que nos fornece perspectivas de nossas aplicações, como por exemplo: visão de performance e saúde da aplicação, visualização de métricas em tempo real, rastreio de traces e transações específicas, dentre outras funcionalidades que o caracterizam como uma ótima opção quando falamos sobre dashboards. &lt;/p&gt;

&lt;h2&gt;
  
  
  Como utilizar dashboards?
&lt;/h2&gt;

&lt;p&gt;Para exemplificarmos a utilização de dashboards e algumas práticas comuns, vamos utilizar aqui no artigo o &lt;strong&gt;Sentry&lt;/strong&gt; para exemplos.&lt;/p&gt;

&lt;p&gt;O Sentry, como dito anteriormente, por ser uma ferramenta forte de rastreamento de erros, pode ser utilizado para criar dashboards interessantes, e como a ferramenta também é amplamente utilizada na observabilidade do front-end de aplicações.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftax77amtr4hdrxxsx2nb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftax77amtr4hdrxxsx2nb.png" alt="Image description" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Já de início eles oferecem templates prontos para dashboards gerais, front-end, back-end e mobile.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnj4az29krrek72bovubx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnj4az29krrek72bovubx.png" alt="Image description" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usando como exemplo os modelos de dashboards do Sentry, vamos passar pelo uso de cada um e no que seria útil de tê-lo para visualização no dia-a-dia. Começando pelos dashboards gerais, são dashs que permitem a ampla visão de usuários afetados pelos erros e suas informações mais críticas que podem ser usadas para estratégias da empresa e correção de bugs.&lt;br&gt;
Como a quantidade de usuários afetados, localização dos usuários, quantidade de erros, quantidade de issues criadas a partir de erros e suas atribuições, que permite maior controle de tarefas de uma equipe, horários que os erros mais afetaram, navegadores, endpoint e entre outros.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5r9calx2s8i29cczo4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn5r9calx2s8i29cczo4d.png" alt="Image description" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Um dash de front-end pode nos dar informações importantes que afetam experiência do usuário, rapidez do sistema, estratégias de SEO, e também, ao nos mostrar facilmente rotas mais afetadas, seja por erros ou lentidão, ajuda a mobilização dos desenvolvedores na resolução de problemas e melhorias, e ajuda a empresa e o time a traçar estratégias de otimização e sustentabilidade maior da aplicação.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ttuo7a3jrzbzy2f9ogj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ttuo7a3jrzbzy2f9ogj.png" alt="Image description" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No back-end o uso no Sentry é similar a depender dos dados escolhidos ao criar um dashboard para observar e monitorar, focando na satisfação e experiência do usuário, ele mostra tempos de respostas, horários e quantidade de usuários afetados, os endpoints mais afetados para rápida identificação no time desenvolvimento, entre outros. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rs3zrpsdpf2bo8om6yg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5rs3zrpsdpf2bo8om6yg.png" alt="Image description" width="800" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para aplicações &lt;em&gt;mobile&lt;/em&gt; os dados normalmente mostrados nos dashs são quantidades de crashes, quantidade de usuários únicos afetados, horários, tempo de inicialização do aplicativo e sistemas operacionais mais afetados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhbz983i3av1u1i2t4cm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhbz983i3av1u1i2t4cm.png" alt="Image description" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com essa facilidade de criação de dashboards separadas por funções, aos exemplos acimas, facilidade de visualização desses dashs e o vínculo da criação de issues e atribuição a equipe, dado esse que também pode ser colocada em um dash, torna o Sentry uma ferramenta completa que nos permite organizar dados e métricas para observá-los, assim como outras diversas ferramentas disponíveis no mercado e aqui citadas.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Fundamentos de Observabilidade</title>
      <dc:creator>Ana Carolina Manzan</dc:creator>
      <pubDate>Sun, 29 Sep 2024 21:31:47 +0000</pubDate>
      <link>https://dev.to/devsnasnuvens/fundamentos-de-observabilidade-345c</link>
      <guid>https://dev.to/devsnasnuvens/fundamentos-de-observabilidade-345c</guid>
      <description>&lt;p&gt;Este artigo foi escrito, em uma iniciativa conjunta no curso de Observabilidade da comunidade WomakersCode, por:&lt;/p&gt;

&lt;p&gt;Ana Carolina Manzan - &lt;a href="https://www.linkedin.com/in/anamanzandev/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;br&gt;
Daniela Farias - &lt;a href="https://www.linkedin.com/in/daniela-farias-dev/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
Gabriela Tavares - &lt;a href="https://www.linkedin.com/in/gabrielatavaresv/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;br&gt;
Natacsha Melo - &lt;a href="http://linkedin.com/in/natacsha" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Observabilidade versus Monitoramento
&lt;/h2&gt;

&lt;p&gt;Quando ouvimos a palavra observabilidade, é natural que façamos algumas referências e analogias diretas ao termo monitoramento. Afinal, através de alguns pilares da observabilidade, como as métricas, por exemplo, podemos monitorar alguns aspectos das nossas aplicações.&lt;/p&gt;

&lt;p&gt;Mas qual a diferença entre um sistema &lt;strong&gt;"monitorado"&lt;/strong&gt; e um sistema &lt;strong&gt;"observável"&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;Ao tentar entender a diferença entre os dois termos, buscamos alguns significados para os mesmos diretamente da língua inglesa, de onde eles surgiram e de onde obteremos algumas explicações que podem vir a ser ilustrativas: &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Observe&lt;/strong&gt;&lt;/em&gt;: notice or perceive (something) and register it as being significant.&lt;br&gt;
&lt;strong&gt;Observar&lt;/strong&gt;: notar ou perceber (algo) e registrá-lo como significativo.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Monitor&lt;/strong&gt;&lt;/em&gt;: an instrument or device used for observing, checking, or keeping a continuous record of a process or quantity.&lt;br&gt;
&lt;strong&gt;Monitor/monitorar&lt;/strong&gt;: um instrumento ou dispositivo usado para observar, verificar ou manter um registro contínuo de um processo ou quantidade.&lt;/p&gt;

&lt;p&gt;A partir da definição em inglês e da tradução livre, podemos concluir então que o monitoramento nada mais é do que um meio, um recurso e/ou instrumento a ser usado para observar um sistema, mas não define o conceito de observabilidade inteiramente e por si só.&lt;/p&gt;

&lt;p&gt;Um sistema pode ser observado por meio de monitoramento, alertas, comportamentos, estados, logs, métricas, traces e telemetria. &lt;strong&gt;A observação de um sistema requer diversos olhares e mapeamento para identificar dados relevantes.&lt;/strong&gt; Filtrar esses dados é crucial, pois a observabilidade vai além do monitoramento, trazendo benefícios como resolução de bugs, melhorias e maior qualidade de código. Por exemplo, ao monitorar logs, uma equipe pode detectar um status 403 inesperado e resolver o problema antes de uma reclamação formal do usuário, demonstrando a diferença entre observabilidade e monitoramento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os 3 pilares da Observabilidade
&lt;/h2&gt;

&lt;p&gt;A observabilidade é construída sobre três pilares principais — &lt;strong&gt;logs, métricas e traces&lt;/strong&gt; — que, juntos, ajudam a garantir que possamos entender e diagnosticar problemas em sistemas em  ambientes de produção com rapidez e eficiência. Com a crescente complexidade dos sistemas modernos, onde uma simples falha pode afetar várias partes interconectadas, ter esses três pilares bem implementados se torna fundamental.&lt;/p&gt;

&lt;p&gt;Os &lt;strong&gt;logs&lt;/strong&gt; são o primeiro pilar, registrando os eventos que ocorrem no sistema. Eles detalham o que está acontecendo nos bastidores, fornecendo informações sobre erros, warnings e eventos importantes. Para desenvolvedores, os logs são a primeira linha de investigação quando algo sai do controle, oferecendo uma visão clara do que aconteceu em determinado momento. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Métricas&lt;/strong&gt; é um dos pilares da observabilidade, entram com uma visão mais quantitativa, permitindo que possamos monitorar a saúde do sistema em tempo real, podemos dizer que métrica é uma informação pré estruturada.Elas ajudam a identificar anomalias em recursos como CPU, memória, latência e throughput, que permitem ao longo do tempo fazer o acompanhamento de determinados comportamentos que possam se tornar problemas maiores.&lt;/p&gt;

&lt;p&gt;Por último, os &lt;strong&gt;traces&lt;/strong&gt; são o mapa que revela o caminho percorrido por uma requisição dentro do sistema. Eles ajudam a entender como uma solicitação passa por diferentes serviços e onde possíveis gargalos podem estar ocorrendo, como por exemplo onde uma requisição pode atravessar dezenas de microsserviços, os traces são cruciais para detectar problemas de performance e otimizar o fluxo entre serviços.&lt;/p&gt;

&lt;p&gt;Dessa forma, ao combinar logs, métricas e traces, desenvolvedores conseguem ter uma visão completa do sistema, tornando o processo de identificação, diagnóstico e resolução de problemas muito mais ágil e eficaz.  Além de apoiar também na tomada de decisão.&lt;/p&gt;

&lt;h2&gt;
  
  
  Próximos passos: Como colocar o conceito de observabilidade em prática?
&lt;/h2&gt;

&lt;p&gt;Uma das formas de aplicarmos a observabilidade é por meio da construção de &lt;strong&gt;troubleshootings&lt;/strong&gt; e &lt;strong&gt;runbooks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Os &lt;strong&gt;troubleshootings&lt;/strong&gt; são guias que auxiliam na identificação e resolução de problemas, oferecendo uma abordagem sistemática para diagnosticar falhas em sistemas complexos. Eles ajudam a mapear possíveis causas de um incidente e oferecem soluções potenciais com base em dados e métricas disponíveis.&lt;/p&gt;

&lt;p&gt;Já os &lt;strong&gt;runbooks&lt;/strong&gt; são conjuntos de procedimentos operacionais padronizados que descrevem as ações a serem tomadas em resposta a situações específicas, muitas vezes integrando métricas de observabilidade para auxiliar na automação e na rápida resolução de incidentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;A partir dos conceitos e ferramentas apresentadas neste artigo, podemos concluir que a observabilidade é essencial para a saúde e a performance das nossas aplicações. Deixamos aqui também alguns links úteis para que os nossos leitores possam dar continuidade aos seus estudos sobre este tema essencial para profissionais de tecnologia.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/gitlab-com/runbooks" rel="noopener noreferrer"&gt;Guia para a criação de runbooks do GitLab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://charity.wtf" rel="noopener noreferrer"&gt;Blog Charity Majors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sre.google/sre-book/table-of-contents/" rel="noopener noreferrer"&gt;Google - Site Reliability Engineering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Potencialize o desenvolvimento da sua IaC com terraform console</title>
      <dc:creator>Ana Carolina Manzan</dc:creator>
      <pubDate>Wed, 14 Aug 2024 01:24:47 +0000</pubDate>
      <link>https://dev.to/devsnasnuvens/potencialize-o-desenvolvimento-da-sua-iac-com-terraform-console-21jc</link>
      <guid>https://dev.to/devsnasnuvens/potencialize-o-desenvolvimento-da-sua-iac-com-terraform-console-21jc</guid>
      <description>&lt;p&gt;Olá dev! &lt;/p&gt;

&lt;p&gt;Se você é usuário do Terraform, provavelmente já utilizou as funções built-in da ferramenta, como por exemplo &lt;strong&gt;&lt;em&gt;concat&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;map&lt;/em&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;em&gt;format&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Enquanto utilizava alguma delas, &lt;strong&gt;você já se perguntou qual seria o resultado da função ou até mesmo gostaria de testá-la antes de incorporá-la ao seu código&lt;/strong&gt;? Se sim, hoje estou aqui para te mostrar como você pode testar essas funções de maneira prática usando o próprio CLI do Terraform!&lt;/p&gt;

&lt;h2&gt;
  
  
  O comando terraform console
&lt;/h2&gt;

&lt;p&gt;É através do comando &lt;code&gt;terraform console&lt;/code&gt;, que, nos fornecendo um console interativo, poderemos testar as funções. &lt;/p&gt;

&lt;p&gt;Para começar, inicie seu terminal e digite &lt;code&gt;terraform console&lt;/code&gt; e pressione enter. Após executar o comando, o prompt do console será imediatamente disponibilizado. Começaremos testando a função &lt;strong&gt;&lt;code&gt;max(8,5,42,12)&lt;/code&gt;&lt;/strong&gt; com uma lista de valores como no exemplo abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysflsnfzfth7f4fqp9qu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fysflsnfzfth7f4fqp9qu.png" alt="Image description" width="646" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Neste simples teste, validamos que utilizando a função &lt;strong&gt;&lt;em&gt;max&lt;/em&gt;&lt;/strong&gt; com o input &lt;em&gt;8, 5, 42, 12&lt;/em&gt; obteremos o resultado &lt;em&gt;42&lt;/em&gt;, o maior número presente nesta lista.&lt;/p&gt;

&lt;p&gt;Em outro cenário, com a função &lt;strong&gt;&lt;code&gt;split(“,”, “Testing,terraform,functions”)&lt;/code&gt;&lt;/strong&gt; teremos o nosso texto dividido a cada vírgula, e transformado em uma lista de palavras, como na imagem abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi29gfo4sp4mpon4zrcdp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi29gfo4sp4mpon4zrcdp.png" alt="Image description" width="742" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em resumo: além do output, o &lt;code&gt;terraform console&lt;/code&gt; também nos informa qual o formato do mesmo, como podemos ver acima com a lista representada pelo &lt;em&gt;tolist([...])&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interação com arquivos
&lt;/h2&gt;

&lt;p&gt;Mais do que apenas testar funções, ainda podemos utilizar o &lt;code&gt;terraform console&lt;/code&gt; para interagir com arquivos Terraform.&lt;/p&gt;

&lt;p&gt;Para exemplificar, criei um arquivo variables.tf no diretório onde estou realizando os testes, e nele incluí a declaração de uma variável chamada &lt;strong&gt;&lt;em&gt;cidr&lt;/em&gt;&lt;/strong&gt;, como na imagem a seguir:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3p1ujf4nlp0ru2071x3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy3p1ujf4nlp0ru2071x3.png" alt="Image description" width="800" height="280"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Na variável configurei o valor padrão de 10.1.0.0/16, pois com ela quero calcular endereços de sub-rede; Para calcular esses endereços, vou utilizar a função &lt;strong&gt;&lt;em&gt;cidrsubnet&lt;/em&gt;&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Quero aproveitar e trazer junto ao exemplo uma forma diferente de utilizarmos o terraform console. Para isso, vou utilizá-lo adicionando um pipe após a chamada da função desejada: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;echo '[for i in range(1, 5) : cidrsubnet(var.cidr, 8, i)]' | terraform console&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E ao executar o código acima, obteremos o resultado como no exemplo abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqw9rbrwxewqx99b1x6vw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqw9rbrwxewqx99b1x6vw.jpeg" alt="Image description" width="800" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;O terraform console pode se transformar em uma ferramenta valiosa em nosso dia-a-dia, à medida em que nossa infraestrutura cresce. Ele é um poderoso aliado quando precisamos garantir que o código que estamos desenvolvendo produzirá os resultados que esperamos.&lt;/p&gt;

&lt;p&gt;Espero que o conteúdo tenha te ajudado, e se você gostou do post deixe o seu comentário ou venha bater um papo comigo no &lt;a href="https://www.linkedin.com/in/anamanzandev/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Até mais 👋&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>infrastructureascode</category>
      <category>devops</category>
      <category>devsnasnuvens</category>
    </item>
  </channel>
</rss>
