<?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: Vilmara</title>
    <description>The latest articles on DEV Community by Vilmara (@vilmarap).</description>
    <link>https://dev.to/vilmarap</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%2F897997%2Fd499d334-c6bc-414d-a5d3-c9c8017ec06d.jpg</url>
      <title>DEV Community: Vilmara</title>
      <link>https://dev.to/vilmarap</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vilmarap"/>
    <language>en</language>
    <item>
      <title>Azure: Autenticando o Terraform</title>
      <dc:creator>Vilmara</dc:creator>
      <pubDate>Fri, 19 Jan 2024 04:26:42 +0000</pubDate>
      <link>https://dev.to/vilmarap/azure-autenticando-o-terraform-8cc</link>
      <guid>https://dev.to/vilmarap/azure-autenticando-o-terraform-8cc</guid>
      <description>&lt;p&gt;Quando comecei a trabalhar com Azure tive uma certa dificuldade com o processo de autenticação do Terraform na Cloud da Azure. Pois no contexto da AWS você facilmente consegue exportar a &lt;a href="https://docs.aws.amazon.com/pt_br/IAM/latest/UserGuide/id_credentials_access-keys.html"&gt;Access keys&lt;/a&gt; e começar a provisionar novos recursos.&lt;/p&gt;

&lt;p&gt;Na Azure o processo é parecido, o meio mais comum é por meio de Service principal / App Registration. &lt;/p&gt;

&lt;p&gt;Essa parte do nome é bem confusa, mas nesse link tem uma documentação mais aprofundada do objetivo de cada uma.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Utilizando o Terraform local&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instale o &lt;a href="https://learn.microsoft.com/pt-br/cli/azure/install-azure-cli"&gt;azure-cli&lt;/a&gt; na máquina&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após instalação digite o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;az login&lt;/code&gt;&lt;br&gt;
&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%2Fm4qcj0nh18d65pefrwu6.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%2Fm4qcj0nh18d65pefrwu6.png" alt="Exemplo do terminal digitando az login" width="800" height="31"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Você será redirecionado para página da Microsoft para autenticar utilizando seu e-mail e senha. Após concluir o processo, a tela do seu terminal atualizará e você poderá executar o &lt;code&gt;terraform init&lt;/code&gt; em problemas.&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%2Fi5uo10mcabhsvzoeqn06.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%2Fi5uo10mcabhsvzoeqn06.png" alt="Exemplo de redirecionamento do terminal" width="800" height="577"&gt;&lt;/a&gt;&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%2Fxsmmkbukn4ku1kn0ga8d.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%2Fxsmmkbukn4ku1kn0ga8d.png" alt="Retorno do processo de autenticação na azure da página" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após concluir o processo na tela será impresso o conclusão da autenticação conforme print 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%2Fpi5z6mipyx568bdiq9rg.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%2Fpi5z6mipyx568bdiq9rg.png" alt="Retorno do processo de autenticação na azure no terminal" width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Utilizando o Terraform por meio de automação&lt;/strong&gt;&lt;/u&gt;&lt;br&gt;
As variáveis abaixo precisam ser exportadas como variável de ambiente e não podem ser modificadas, caso contrário o Terraform não conseguirá interpreta-las e o código não será aplicado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export ARM_CLIENT_ID="00000000-0000-0000-0000-000000000000"
export ARM_CLIENT_SECRET="12345678-0000-0000-0000-000000000000"
export ARM_TENANT_ID="10000000-0000-0000-0000-000000000000"
export ARM_SUBSCRIPTION_ID="20000000-0000-0000-0000-000000000000"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;u&gt;&lt;strong&gt;Referências&lt;/strong&gt;&lt;/u&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/entra/identity-platform/app-objects-and-service-principals?tabs=browser"&gt;Service Principal&lt;/a&gt;&lt;br&gt;
&lt;a href="https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/service_principal_client_secret#configuring-the-service-principal-in-terraform"&gt;Service Principal no Terraform&lt;/a&gt;&lt;/p&gt;

</description>
      <category>azure</category>
      <category>terraform</category>
      <category>azurerm</category>
    </item>
    <item>
      <title>Azure: Usando Resources ID com Terraform</title>
      <dc:creator>Vilmara</dc:creator>
      <pubDate>Fri, 19 Jan 2024 04:00:36 +0000</pubDate>
      <link>https://dev.to/vilmarap/azure-usando-resources-id-com-terraform-623</link>
      <guid>https://dev.to/vilmarap/azure-usando-resources-id-com-terraform-623</guid>
      <description>&lt;p&gt;Quando estamos provisionando a infraestrutura Azure com o terraform nos deparamos com cenários que precisamos passar o resource id de determinados recursos. Existem algumas formas de obter o resource Id &lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "azurerm_subnet_network_security_group_association" "example" {
  subnet_id                 = azurerm_subnet.example.id
  network_security_group_id = azurerm_network_security_group.example.id
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Datasource&lt;/p&gt;

&lt;p&gt;Em casos que utilizamos &lt;a href="https://www.gitkraken.com/blog/git-multi-repo-vs-git-mono-repo"&gt;multi repo&lt;/a&gt; para declaração da infraestrutura, você poderia utilizar o &lt;a href="https://developer.hashicorp.com/terraform/language/data-sources"&gt;data source&lt;/a&gt;, ele é fornecido pelo &lt;a href="https://learn.microsoft.com/en-us/rest/api/virtualnetwork/subnets/get?tabs=HTTP"&gt;provider &lt;/a&gt; para coletar a informação e passar no argumento subnet_id. Também, é possível inseri-lo no output e buscar usando o &lt;a href="https://developer.hashicorp.com/terraform/language/state/remote-state-data"&gt;data source&lt;/a&gt; do remote state. &lt;/p&gt;

&lt;p&gt;Resource ID&lt;br&gt;
Conforme sua infraestrutura vai crescendo e você possui diferentes resources e precisa passar os ids, vai ficando complexo e em alguns casos obtém erro de cycle por estar utilizando muitos datasources combinados com for_each (que foi o meu caso). &lt;/p&gt;

&lt;p&gt;Uma solução que usei e achei que ajudou bastante e reduziu a quantidade de erros dis códigos que estávamos declarando, foi montar o resource id de acordo com a minha necessidade.&lt;/p&gt;

&lt;p&gt;Resource Id de uma subnet&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;subnet_id      = "/subscriptions/${local.subscriptionid}/resourceGroups/${local.rg}/providers/Microsoft.Network/virtualNetworks/${local.vnet}/subnets/${local.subnet_name}"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse exemplo o path do resource id é padrão, as mudanças envolvem subscriptionId, resource group, virtual network e nome da subnet. Os valores são declarados via variável local e o path é montado de acordo com o ambiente de aplicação.   &lt;/p&gt;

&lt;p&gt;Exemplo completo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#main.tf
locals {


# Variáveis do resource id
subscriptionid = "3120-3120-3120-3120-312031203120"
rg             = "rg-test"
vnet           = "vnet-test"
subnet_name    = "snet-test"
nsg_name       = "nsg-test"


# Resources IDs
subnet_id      = "/subscriptions/${local.subscriptionid}/resourceGroups/${local.rg}/providers/Microsoft.Network/virtualNetworks/${local.vnet}/subnets/${local.subnet_name}"
}
sg_id = "/subscriptions/${local.subscriptionid}/resourceGroups/${local.rg}/providers/Microsoft.Network/networkSecurityGroups/${local.nsg_name}

# Declaração do recurso
resource "azurerm_subnet_network_security_group_association" "snet_test" {
  subnet_id                 = local.subnet_id
  network_security_group_id = local.sg_id azurerm_network_security_group.example.id
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>azure</category>
      <category>terraform</category>
      <category>iac</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
