<?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: andremulin</title>
    <description>The latest articles on DEV Community by andremulin (@andremulin).</description>
    <link>https://dev.to/andremulin</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%2F310324%2Faa046dfd-b8dc-4f30-9ef9-39345b8996ec.png</url>
      <title>DEV Community: andremulin</title>
      <link>https://dev.to/andremulin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andremulin"/>
    <language>en</language>
    <item>
      <title>ASDF - Painel de Ferramentas</title>
      <dc:creator>andremulin</dc:creator>
      <pubDate>Wed, 15 Sep 2021 01:57:08 +0000</pubDate>
      <link>https://dev.to/andremulin/asdf-painel-de-ferramentas-3bdh</link>
      <guid>https://dev.to/andremulin/asdf-painel-de-ferramentas-3bdh</guid>
      <description>&lt;p&gt;Se você trabalha com Terraform em múltiplos ambientes, é provável que você já tenha se deparado com versões diferentes do Terraform. Dai é ficar trocando de versão em cada projeto. Isso é chato.&lt;br&gt;
O mesmo ocorre quando vc possui projetos com versões diferentes de Nodejs entre outros.&lt;br&gt;
O melhor dos mundos seria ter todas as versões utilizamos instaladas e serem automaticamente selecionadas em cada projeto, sem ter que utar um executável diferente. Melhor ainda, que fosse algo fácil de utilizar em time, fazendo com que todos possam ter a mesma caixa de ferramentas.&lt;/p&gt;

&lt;p&gt;É ai que o &lt;strong&gt;asdf&lt;/strong&gt; entra em ação. Com objetivo de gerenciar multiplos versões de runtimes em um único lugar, o &lt;strong&gt;asdf&lt;/strong&gt; facilita a instalação de múltiplas versões e seleção de da versão necessária dependendo do contexto de utilização.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://asdf-vm.com/"&gt;https://asdf-vm.com/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Instalação
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;asdf&lt;/strong&gt; possui apenas duas dependências, o &lt;strong&gt;curl&lt;/strong&gt; e o &lt;strong&gt;git&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Faça o clone do repositório do projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/asdf-vm/asdf.git ~/.asdf &lt;span class="nt"&gt;--branch&lt;/span&gt; v0.8.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure o bash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.asdf/asdf.sh
&lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.asdf/completions/asdf.bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, o &lt;strong&gt;asdf&lt;/strong&gt; já estará disponível. &lt;/p&gt;

&lt;p&gt;Caso você utilize macOS ou queria outras formas de instalação, acesse &lt;a href="https://asdf-vm.com/guide/getting-started.html#_3-install-asdf"&gt;https://asdf-vm.com/guide/getting-started.html#_3-install-asdf&lt;/a&gt; para mais opções.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adicionando plugins
&lt;/h2&gt;

&lt;p&gt;Os runtimes ou ferramentas gerenciadas pelo &lt;strong&gt;asdf&lt;/strong&gt; são chamadas de plugins. Sendo assim, para que o &lt;strong&gt;asdf&lt;/strong&gt; gerencie uma ferramenta, é necessário que seja adicionar o plugin da mesma. &lt;br&gt;
Abaixo segue o exemplo do plugin terraform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf plugin add terraform
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de adicionar o plugin, será necessário efetuar a instalação de uma das versões.&lt;/p&gt;

&lt;p&gt;Abaixo segue o exemplo da instalação da última versão do terraform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;terraform latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso queria instalar alguma versão especifica, basta informar o número ao invés de latest. Ex.:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf &lt;span class="nb"&gt;install &lt;/span&gt;terraform 0.15.31
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pronto, já temos duas versões do terraform instaladas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;asdf list terraform
0.15.4
1.0.6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A lista completa de plugins disponíveis pode ser acessada em &lt;a href="https://github.com/asdf-vm/asdf-plugins"&gt;https://github.com/asdf-vm/asdf-plugins&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurando
&lt;/h2&gt;

&lt;p&gt;A configuração do &lt;strong&gt;asdf&lt;/strong&gt; é simples. Através de um arquivo com nome &lt;strong&gt;.tool-versions,&lt;/strong&gt; que quando existente na pasta, faz com que o &lt;strong&gt;asdf&lt;/strong&gt; utilize a versão indicada da ferramenta ou runtime.&lt;/p&gt;

&lt;p&gt;O conteúdo do &lt;strong&gt;.tool-versions&lt;/strong&gt; deverá conter o nome do plugin e a versão que deverá ser utilizada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform 0.15.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Link: &lt;a href="https://github.com/andremulin/asdf-example/blob/main/terraform/.tool-versions"&gt;https://github.com/andremulin/asdf-example/blob/main/terraform/.tool-versions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A configuração Local é utilizada em cada projeto com objetivo de definirmos uma versão especifica dos runtimes ou ferramentas para o projeto em questão. &lt;/p&gt;

&lt;p&gt;Já para definir globalmente quais versões você quer utilizar, o arquivo &lt;strong&gt;.tool-version&lt;/strong&gt; precisará ser criado na pasta home do seu usuário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;~/.tool-versions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resumo
&lt;/h2&gt;

&lt;p&gt;Tendo seguido essas passos, sua estação de trabalho já terá a capacidade de alternar entre versões diferentes de Terraform. Agora você precisa adicionar o arquivo &lt;strong&gt;.tool-versions&lt;/strong&gt; em seus projetos para que o &lt;strong&gt;asdf&lt;/strong&gt; possa reconhecer a versão a ser utilizada.&lt;/p&gt;

</description>
      <category>asdf</category>
      <category>terraform</category>
      <category>iac</category>
    </item>
    <item>
      <title>AWS Route 53 - Zona Privada em Multi VPC, Multi Account ou Hibrido.</title>
      <dc:creator>andremulin</dc:creator>
      <pubDate>Fri, 10 Sep 2021 02:15:51 +0000</pubDate>
      <link>https://dev.to/andremulin/route-53-zona-privada-em-multi-vpc-multi-account-ou-hibrido-2jl</link>
      <guid>https://dev.to/andremulin/route-53-zona-privada-em-multi-vpc-multi-account-ou-hibrido-2jl</guid>
      <description>&lt;h1&gt;
  
  
  Route 53 - Multi Account or Hibrid with Private Zone
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Matéria&lt;/strong&gt;
Estratégias de utilização do Route 53 em ambientes Multi Account ou Hibridos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Descrição&lt;/strong&gt;
Como planejar e utilizar o Route 53 em ambientes Multi Account ou Hibiridos, provendo acesso a resolução privada de nomes em ambientes com multiplas Contas ou em ambientes hibridos, sendo datacenters ou usuários por meio de VPN.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Objetivo&lt;/strong&gt;
Saber qual é a melhor estratégia a ser utilizada para resolução de nomes em ambientes privados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ferramentas&lt;/strong&gt;
AWS Route 53
DNS
NSLOOKUP&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Route 53
&lt;/h1&gt;

&lt;p&gt;O Route 53 é um dos Core Services, sendo de grande importância em ambientes escaláveis e resilientes. É um serviço gerenciado pela AWS, auto escalável e com alta disponibilidade em multi region. &lt;/p&gt;

&lt;p&gt;Em sua função básica, o Route 53 pode hospedar zonas Publicas ou Privadas, as quais seus registros podem usufruir de recursos como DNS Failover, Weighted Round Robin, entre outros.&lt;br&gt;
Neste artigo, irei explorar as estratégias de utilização de PHZ em ambientes multi account ou hibrid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Private Hosted Zone (PHZ)
&lt;/h2&gt;

&lt;p&gt;De modo simples, uma PHZ é uma zona de DNS como qualquer outra, entretanto ela só será resolvida internamente nas VPCs, desde que o seu DHCP Options utilize a opção &lt;strong&gt;AmazonProvidedDNS&lt;/strong&gt; como &lt;strong&gt;Domain name servers&lt;/strong&gt; e habilitar o &lt;strong&gt;DNS resolution&lt;/strong&gt; na VPC. Caso precise utilizar algum ambiente com Domain Controller, o &lt;strong&gt;Domain name servers&lt;/strong&gt; precisará apontar para os seus servidores, dessa forma, configure o DNS Server dos Domain Controllers para fazer o forwarder para o IP 169.254.169.253 ou para o segundo IP da VPC (Ex.: VPC CIDR utilizando 10.1.0.0/16, o segundo IP será 10.1.0.2).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rVH3OOLp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8a4eco9omzxnepixrxcj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rVH3OOLp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8a4eco9omzxnepixrxcj.png" alt="Diagrama 1 - Apresentação da utilização inicial do Route 53 com Private Hosted Zones"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diagrama 1 - Apresentação da utilização inicial do Route 53 com Private Hosted Zones&lt;/p&gt;

&lt;p&gt;Garantindo essas configurações iniciais na VPC, Private Hosted Zones poderão ser criadas e associadas as VPCs da conta, independente da region. &lt;/p&gt;

&lt;p&gt;Até aqui temos uma implementação simples, mas que já funcional para ambientes com múltiplas VPCs que precisam ter acesso as zonas de DNS privadas para acessarem os recursos internos. Vou incrementando os cenários e apresentando as soluções possíveis.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Custo: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;US$ 0,50 por hosted zone por mês&lt;/li&gt;
&lt;li&gt;US$ 0,40 por milhões de queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo em Terraform:&lt;br&gt;
&lt;a href="https://github.com/andremulin/aws_route53_strategies_article/tree/main/simple"&gt;https://github.com/andremulin/aws_route53_strategies_article/tree/main/simple&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Private Hosted Zone in Multi Account
&lt;/h2&gt;

&lt;p&gt;Em muitos casos, se faz necessário a utilização de múltiplas contas, para que se possa segmentar os ambientes para obter maior segurança. Contudo, apesar da separação administrativa, existem serviços comuns a todas as contas ou aplicações que precisam se comunicar e resolver os DNS privados já existentes. &lt;/p&gt;

&lt;p&gt;A melhor opção que temos é o associar as private hosted zones existentes as VPCs das demais contas. O gerenciamento das private hosted zones continuará na conta onde ela foi criada, mas as VPCs que foram associadas, conseguirão resolver os endereços como as VPCs da conta principal. &lt;/p&gt;

&lt;p&gt;Dessa forma, nenhum trafego adicional precisará ser liberado entre as contas, pois a resolução de nome será realizada pelo Route 53 localmente na VPC.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1Z5HPZVP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f1kujpmirt4l3ucfepyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1Z5HPZVP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f1kujpmirt4l3ucfepyx.png" alt="Diagrama 2 - Private Hosted Zones compartilhadas entre contas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diagrama 2 - Private Hosted Zones compartilhadas entre contas&lt;/p&gt;

&lt;p&gt;Para associar uma Private Hosted Zone a uma VPC de outra conta, siga os passos abaixo:&lt;/p&gt;

&lt;p&gt;Conta A: Possui a PHZ e criará a associação&lt;br&gt;
Conta B: Aceitará a associação da PHZ&lt;/p&gt;

&lt;p&gt;Utilizando o AWS CLI, execute o comando abaixo na conta que possui a PHZ. O VPCRegion e o VPCid devem ser da VPC da Conta B, que receberá a associação da PHZ. As credenciais devem ser da Conta A.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;aws route53 create-vpc-association-authorization --hosted-zone-id &amp;lt;hosted-zone-id&amp;gt; --vpc VPCRegion=&amp;lt;region&amp;gt;,VPCId=&amp;lt;vpc-id&amp;gt; --region us-east-1&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Depois de criar a associação é necessário aceitar a associação. Para isso, execute o comando abaixo na Conta B, que receberá a associação. Lembre-se de alterar as credenciais ou perfis de acesso do AWS CLI. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws route53 associate-vpc-with-hosted-zone --hosted-zone-id &amp;lt;hosted-zone-id&amp;gt; --vpc VPCRegion=&amp;lt;region&amp;gt;,VPCId=&amp;lt;vpc-id&amp;gt; --region us-east-1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Pronto, esses dois comandos sendo executados de maneira correta, a PHZ já estará disponível para resolução na VPC da outra Conta. Como boa prática, é indicado remover a associação que foi aberta, isso prevenirá uma nova recriação da associação. Execute esse comando abaixo na Conta A:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws route53 delete-vpc-association-authorization --hosted-zone-id &amp;lt;hosted-zone-id&amp;gt; --vpc VPCRegion=&amp;lt;region&amp;gt;,VPCId=&amp;lt;vpc-id&amp;gt; --region us-east-1&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Custo: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;US$ 0,50 por hosted zone por mês&lt;/li&gt;
&lt;li&gt;US$ 0,40 por milhões de queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo em Terraform:&lt;br&gt;
&lt;a href="https://github.com/andremulin/aws_route53_strategies_article/tree/main/multi_account"&gt;https://github.com/andremulin/aws_route53_strategies_article/tree/main/multi_account&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Private Hosted Zone in Hibrid Environment
&lt;/h2&gt;

&lt;p&gt;Até aqui, a resolução de endereços só foi possível dentro das VPCs, contudo, em alguns casos se faz necessário resolução de endereços fora da VPCs, ou seja, em datacenters ou por colaboradores através de VPNs.&lt;br&gt;
Nesses casos, temos um ambiente Hibrid, para tal, será necessário utilizar um recurso adicional chamado Route 53 Resolver Endpoint.  Este recurso cria interfaces de rede em uma VPC que é capaz de receber e enviar consultas DNS. &lt;/p&gt;

&lt;p&gt;Utilize uma de suas VPCs que já possua acesso a PHZ desejada e acesso para o seu datacenter ou usuários de VPN. Este Endpoint pode ser utilizado de direção Inbound, onde a resolução de endereços é realizada dentro da VPC, ou Outbound, onde a resolução de endereços é realizada fora da VPC. Para fornecer acesso a resolução de endereços do PHZ, utilize Inbound.&lt;br&gt;
Tendo criado o Endpoint, configure o DNS Forward de seus servidores DNS para encaminhar a resolução de nomes de suas PHZ para os IPs do Resolver Endpoint que foi criado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--em7Bmhku--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gf76t9ntid90r89u1rx3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--em7Bmhku--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gf76t9ntid90r89u1rx3.png" alt="Diagrama 3 - Private Hosted Zone acessível por meio de Route 53 Resolver Endpoint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Diagrama 3 - Private Hosted Zone acessível por meio de Route 53 Resolver Endpoint&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Custo: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;US$ 0,125 por ENI por hora. São necessárias no mínimo duas ENI.&lt;/li&gt;
&lt;li&gt;US$ 0,50 por hosted zone por mês&lt;/li&gt;
&lt;li&gt;US$ 0,40 por milhões de queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo em Terraform:&lt;br&gt;
&lt;a href="https://github.com/andremulin/aws_route53_strategies_article/tree/main/hibrid"&gt;https://github.com/andremulin/aws_route53_strategies_article/tree/main/hibrid&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Resumo
&lt;/h2&gt;

&lt;p&gt;Neste artigo apresentei 3 estratégias para utilização de Private Hosted Zones do Route 53, cada uma para uma arquitetura. &lt;br&gt;
Utilizando uma dessas estratégias, você conseguirá fornecer acesso a resolução de endereços de sua PHZ a outras VPCs, outras contas, ambientes locais ou legados.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>route53</category>
      <category>dns</category>
    </item>
  </channel>
</rss>
