<?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: Kleber Bonassi</title>
    <description>The latest articles on DEV Community by Kleber Bonassi (@kbonassi).</description>
    <link>https://dev.to/kbonassi</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%2F1200539%2F22504ef2-cef0-4574-a299-525f5766cf55.jpg</url>
      <title>DEV Community: Kleber Bonassi</title>
      <link>https://dev.to/kbonassi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kbonassi"/>
    <language>en</language>
    <item>
      <title>DevOps, como começar? ...e por que?</title>
      <dc:creator>Kleber Bonassi</dc:creator>
      <pubDate>Thu, 21 Mar 2024 00:55:27 +0000</pubDate>
      <link>https://dev.to/kbonassi/devops-como-comecar-e-por-que-3ke5</link>
      <guid>https://dev.to/kbonassi/devops-como-comecar-e-por-que-3ke5</guid>
      <description>&lt;p&gt;Talvez a pergunta inicial seria: "Por que eu, um engenheiro de software (ou desenvolvedor, ou backend, ou frontend, ou QA, ou etc...) devo conhecer DevOps?" e uma possível resposta direta seria algo como: "porque você que desenvolve deveria saber como entregar e cuidar de seu desenvolvimento em produção, faz parte do ciclo", o chamado deploy e onde entra o QA que coloquei na pergunta acima? Ora, o QA entra principalmente em contribuir com a automação de testes na esteira de CI/CD, além de que conhecimento e como dizem, canja de galinha, não faz mal a ninguém.&lt;/p&gt;

&lt;p&gt;DevOps é uma cultura que deve ser difundida no time todo, mas também na comunidade, na tribo e até mesmo na sua empresa como um todo.&lt;/p&gt;

&lt;p&gt;Como regra geral, pelo que vejo no mercado, grandes corporações e com a TI bem estruturada, por vezes, tem times especializados em DevOps/SRE, o que na minha opinião é super saudável, pois em teoria, estas pessoas são o oráculo sobre este assunto. Computação é uma área tão grande que temos especialistas em áreas diversas, mas o time de desenvolvimento precisa ter ao menos o conhecimento básico sobre este tema. Tenho a mesma opinião sobre QA/Testes, mas ainda vou escrever um artigo sobre isto.&lt;/p&gt;

&lt;p&gt;Resumindo de forma bem simples DevOps é a junção de Desenvolvimento e Operações então podemos entender ainda de forma simplificada, como desenvolver, colocar em produção, acompanhar (não só no deploy, mas por toda a vida útil da aplicação, através da observabilidade) e ajustar o leme do navio para manter a aplicação no ar e saudável para que comporte atender as requisições necessárias. Tudo isso com automatizações.&lt;/p&gt;

&lt;p&gt;Pra termos uma ideia do tamanho e importância do assunto, algumas bigtechs, com times de altíssima performance, fazem milhares de deploys por dia, dando uma grandeza de deploys a cada alguns segundos!!! Agora te pergunto: como isso seria possível, sem automação, sem a cultura DevOps?? Bem, a história nos mostra que não seria possível sem DevOps. E pra que isso tudo? Pra entregar antes e frequentemente, desta forma permitindo entregas estratégicas quanto ao mercado, trazendo velocidade das empresas perante seus concorrentes.&lt;/p&gt;

&lt;p&gt;Com a grande notoriedade da arquitetura de microsserviços, mais ainda que DevOps se faz necessário.&lt;/p&gt;

&lt;p&gt;Pra colocar a cultura DevOps, a filosofia DevOps, em prática, é necessário conhecimento e ferramentas. No mercado existem várias ferramentas semelhantes ou que fazem parte do trabalho comum entre elas. O objetivo deste artigo é trazer pra você leitor, um caminho das pedras bem inicial, te guiando no que é importante aprender, buscar conhecimento, pra entrar no mundo do DevOps e claro, com o passar do tempo, com a experiência adquirida, você deve se aperfeiçoar, buscar outras ferramentas complementares e ainda experimentar outras ferramentas semelhantes a estas que indicarei, pra então, com o seu julgo, entender quais fazem mais sentido pra sua realidade do dia-a-dia. O fato é que entendendo a importância e conhecendo algumas das principais ferramentas, você terá o conhecimento básico e necessário que você, desenvolvedor, precisa ter.&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%2Fwa99r5eusaa8sui2koxx.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%2Fwa99r5eusaa8sui2koxx.png" alt="Image description" width="621" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Então vamos lá:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GNU/Linux&lt;/strong&gt;: Com mais de 30 anos de existência, o GNU/Linux está mais do que comprovado sobre sua segurança, competência, qualidade e sendo um software livre e de código fonte aberto e em geral sem um licenciamento pago, é mandatário para fazer funcionar a principal peça da arquitetura de microsserviços, o próprio microsserviço. Entender a estrutura de diretórios do sistema operacional, entender sobre o agendamento de tarefas, entre outras coisas que é importante aprender sobre o sistema operacional, se faz necessário. Portanto ter conhecimento em GNU/Linux é algo essencial. Vale uma leitura deste outro &lt;a href="https://dev.to/kbonassi/linux-para-desenvolvedores-qual-o-melhor-34nd"&gt;link&lt;/a&gt; pra que você, dê uma chance de aprendizado deste grande sistema operacional. Caso você não possa ou não queira substituir o GNU/Linux como seu sistema operacional padrão no seu computador, crie uma máquina virtual, para poder estuda-lo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bash&lt;/strong&gt;: O Bash é um dos possíveis shells (linha de comando) para o GNU/Linux, existem outros, mas o Bash é o shell padrão de muitas distribuições GNU/Linux. É importante saber sobre o shell, para necessidades tais como, cópia de arquivos, criação de diretórios, verificar o conteúdo de arquivos, logs, iniciar e parar serviços (daemons), entre outras tantas funcionalidades que o shell nos oferece. O fato é que o shell é o console para que você possa interagir com o sistema operacional GNU/Linux.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt;: Mais uma vez falando de microsserviços, a utilização de containers também é algo essencial e eu diria que talvez é a grande sacada pra poder funcionar este tipo de arquitetura, e o Docker é a ferramenta mais utilizada para a construção de containers, saber Docker é fundamental para o DevOps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kubernetes&lt;/strong&gt;: O Kubernetes é um orquestrador de containers desenvolvido pela Google e com o uso dele, temos a possibilidade escalar nossas aplicações de forma automatizada, aumentando a disponibilidade da aplicação quando necessário e diminuindo-a quando possível, permitindo o balanceamento de carga da aplicação, entre diversas outras funcionalidades que o Kubernetes nos trás. E você pode aprender tudo isso diretamente do seu computador pessoal, com o uso de "distribuições" Kubernetes, tais como o K3s, MiniKube, Kind, MicroK8s, entre outros.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Git&lt;/strong&gt;: O Git é desde alguns anos atrás o principal versionador de código. Existem as ferramentas muito utilizadas que fazem o versionamento e trazem mais algumas features interessantes, como o Github, Gitlab, Bitbucket, é importante conhece-las, mas antes de tudo é importante conhecer o Git mesmo, portanto, baixe-o, instale-o em seu computador e estude-o, principalmente as funcionalidades mais triviais. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ansible&lt;/strong&gt;: O Ansible, uma ferramenta desenvolvida pela Redhat, que nos permite gerenciar o ciclo de vida das aplicações, desde o provisionamento até o deploy, automatizando tarefas como criação de usuários, backup, provisionamento de ambientes (dev, hml e prd), gerenciamento de servidores, etc. Enfim, também é uma ferramenta importante para o DevOps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Jenkins&lt;/strong&gt;: Jenkins é a ferramenta responsável por automatizar toda a cadeia de integração contínua e entrega contínua, o CI/CD. Com ele podemos definir esteiras que automatizam todo o processo de CI/CD, ou seja, desde o ponto que o desenvolvedor termina o desenvolvimento até o deploy deste desenvolvimento, passando por etapas como compilação, testes automatizados, verificações estáticas, entre outras automatizações que ele nos permite.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enfim, existem tantas outras ferramentas que depois que você estiver adaptado a estas apresentadas, deve conhecer também, tais como Terraform, Vagrant, Podman, Grafana, Splunk, Prometheus, Jaeger Kibana, etc, a lista é longa, mas comece pelas apresentadas, tenha foco inicialmente nestas pois não adianta querem abraçar o mundo de uma única vez, estas já lhe darão o empurrão inicial para este conhecimento.&lt;/p&gt;

&lt;p&gt;That's all folks!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>developer</category>
      <category>cicd</category>
      <category>deploy</category>
    </item>
    <item>
      <title>Instalando Podman no Ubuntu 22.04 LTS</title>
      <dc:creator>Kleber Bonassi</dc:creator>
      <pubDate>Thu, 15 Feb 2024 18:54:37 +0000</pubDate>
      <link>https://dev.to/kbonassi/instalando-podman-no-ubuntu-2204-lts-3nfa</link>
      <guid>https://dev.to/kbonassi/instalando-podman-no-ubuntu-2204-lts-3nfa</guid>
      <description>&lt;p&gt;Neste artigo veremos como instalar o gerenciador de containers Podman no Ubuntu Linux 22.04 LTS.&lt;/p&gt;

&lt;p&gt;O Podman está presente nos repositórios do Ubuntu, portanto a instalação é muito simples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install podman podman-docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Também é interessante instalar o podman-compose. Para isso é necessário termos instalado o Python e o PIP que é o gerenciador de dependências do Python. Então caso você não tenha instalado o Python e o PIP, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install python3.11 python3-pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o Python e o PIP instalados, podemos verificar a necessidade de atualizar o PIP com o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 -m pip install --upgrade pip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Caso já tenha o PIP instalado e este precise ser atualizado, o comando acima vai fazer esta atualização.&lt;/p&gt;

&lt;p&gt;E agora podemos instalar o podman-compose, com o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pip3 install podman-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora com estas ferramentas instaladas, o uso do podman é basicamente através dos mesmos comandos do Docker, substituindo o comando docker por podman.&lt;/p&gt;

&lt;p&gt;Isso é tudo pessoal. Valeu! :)&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>podman</category>
      <category>docker</category>
      <category>container</category>
    </item>
    <item>
      <title>Linux para desenvolvedores. Qual o melhor?</title>
      <dc:creator>Kleber Bonassi</dc:creator>
      <pubDate>Wed, 14 Feb 2024 19:20:29 +0000</pubDate>
      <link>https://dev.to/kbonassi/linux-para-desenvolvedores-qual-o-melhor-34nd</link>
      <guid>https://dev.to/kbonassi/linux-para-desenvolvedores-qual-o-melhor-34nd</guid>
      <description>&lt;p&gt;Nestes mais de 30 anos de existência do kernel Linux, muita coisa aconteceu. Tivemos algumas revoluções que talvez não foram notadas mas que tiveram sua importância.&lt;/p&gt;

&lt;p&gt;Por muito anos o MS Windows é o sistema operacional mais utilizado no geral, porém podemos observar comportamentos diferentes em determinadas áreas. Servidores Web desde meados da década de 1990 rodam em sua grande maioria o GNU/Linux. Com a "revolução" da arquitetura de microsserviços e o advento da "containeirização", mais ainda que o GNU/Linux se fortaleceu como sistema operacional para esta finalidade, por suas qualidades, segurança e também por ser um sistema operacional livre e opensource. Mesmo o MacOS ganhou uma fatia do mercado de desktops nestes últimos tempos, mas o que mais tenho visto são desenvolvedores rodando o sistema operacional GNU/Linux.&lt;/p&gt;

&lt;p&gt;No desktop o GNU/Linux também evoluiu muito desde seu desenvolvimento inicial. De bons anos pra cá instalar um GNU/Linux é tão simples e intuitivo quanto instalar um MS Windows e o GNU/Linux tem à disposição muitas ferramentas, inclusive de console, que trazem muitas vantagens e produtividade às pessoas desenvolvedoras que optam por ter este sistema operacional como seu sistema padrão de uso diário. Outro ponto super positivo que considero para o GNU/Linux é a liberdade que você tem de deixar o sistema operacional dá forma que melhor lhe convém. Se você prefere o Gnome pode usa-lo, se prefere o KDE, XFCE, Mate, também pode. Se você se adapta melhor ao Bash, ok, se prefere o KSH ou o ZSH, tudo bem também, se usa o sistema de particionamento de disco Ext4, legal, se gosta mais do ZFS, JFS ou ReiserFS, perfeito, ou seja, você consegue customizar da melhor forma pra ti.&lt;/p&gt;

&lt;p&gt;Bem, existem muitos sabores de GNU/Linux e vira e mexe aparece algum novo, bem como deixa de existir outro. Isso aconteceu muito ao longo destes mais de 30 anos. Fato é que algumas distribuições permanecem firmes e fortes desde o inicio, outras mudaram o leme do navio. No momento da escrita deste artigo eu gostaria de citar algumas distros que considero muito boas e que vejo um fortalecimento grande no mercado, são elas: Debian, Ubuntu, Redhat/Fedora e Oracle. Vamos dar uma repassada em cada uma delas para que você leitor possa traçar um plano de escolha coerente com a sua realidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debian
&lt;/h2&gt;

&lt;p&gt;Uma das mais antigas distribuições GNU/Linux ainda em atividade, juntamente a Redhat. A Debian é uma distro de muita importância visto que ela é base para muitas distros que vieram depois, tal como o Ubuntu. A Debian com o kernel Linux (existe também a opção de rodar com kernel Hurd, FreeBSD e NetBSD, que não são Linux) está disponível para 9 arquiteturas oficiais, sendo atualmente a AMD64 a principal, mas também disponível para ARM, PowerPC, etc. Ela conta com mais de 59000 pacotes disponíveis na versão stable, sendo que praticamente qualquer software livre e opensource já está empacotado para instalação e uso com o Debian de forma muito fácil a um simples comando &lt;em&gt;apt-get install&lt;/em&gt;. Uma característica muito marcante da Debian é que ela não tem uma empresa por trás, a Debian é gerida pela comunidade, porém de forma super organizada, inclusive tendo eleições para quem irá comandar os rumos da distro em cada período, outra característica importante é que a distro prima pela segurança. A Debian tem sempre 3 versões em linha: stable, testing e unstable. Stable é a versão estável, que tem os pacotes mais seguros (e por vezes mais antigos). Para instalação num servidor esta é a versão mais indicada. A segunda é a Testing, que traz os pacotes mais novos e talvez essa seja uma boa escolha pra executar num desktop justamente por ter pacotes mais atuais e por fim a unstable que é uma versão que pode estar completamente quebrada pois é justamente nesta que os pacotes entram primeiro para serem incluídos na Debian. Enfim, a Debian tem grande utilização em servidores e  no meio acadêmico, mas também em desktops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ubuntu
&lt;/h2&gt;

&lt;p&gt;Ubuntu utiliza a Debian como base, daí vem os pacotes .deb e o gerenciador apt, ou seja, funciona de forma muito semelhante ao Debian. O Ubuntu tem a empresa Canonical como sua gestora. Quando o Ubuntu chegou ao mercado no começo dos anos 2000, causou grande alvoroço pois ela trouxe grande facilidade no processo de instalação e uso no desktop. Ganhou muitos fãs e hoje em dia tem inclusive, distribuição em novos computadores Dell (isso também é encontrado no Brasil). Assim como o Ubuntu e outras distros que utilizam o Debian como base, existem distros que utilizam o Ubuntu como base. Repare como as ramificações são criadas. O Ubuntu tem um ciclo de desenvolvimento definido, as versões LTS (Long-Term Support) são disponibilizadas a cada 2 anos e com suporte e atualizações de segurança por 5 anos, mas também conta com versões intermediárias que são lançadas a cada 6 meses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Redhat/Fedora
&lt;/h2&gt;

&lt;p&gt;A Redhat também é uma distro dos primórdios do Linux, diferentemente da Debian, a Redhat sempre foi uma distro comercial, com uma empresa gerindo a distro. Sempre a Redhat foi muito bem vista no mundo corporativo e chegou um momento em que ela se firmou neste mercado com o Redhat Enterprise Linux (RHEL) com uma distro voltada ao mercado corporativo, fornecendo um suporte amplo. Neste ponto da história, quando a Redhat optou por seguir exclusivamente com o mercado corporativo, ela criou um "galho" onde ela suportou, chamado Fedora. Tocado pela comunidade, apoiado pela Redhat e este voltado ao público em geral. Assim como Debian e Ubuntu, a Redhat/Fedora também são base para outras distros Linux. Aqui o padrão de empacotamento de pacotes é o .rpm, cujo sistema tem as mesmas facilidades do .deb. Desde uns bons anos a Redhat foi adquirida pela IBM, mas a Redhat continua seguindo seus caminhos e inovando, como sempre.&lt;/p&gt;

&lt;h2&gt;
  
  
  Oracle
&lt;/h2&gt;

&lt;p&gt;A Oracle que é uma empresa super conhecida mundialmente pelo seu sistema gerenciador de bancos de dados (SGBD) de mesmo nome da empresa e ainda pelo Java, também em um momento da história decidiu ter a sua distribuição Linux. O Oracle Linux é baseado no Redhat Enterprise Linux, portanto segue o padrão de empacotamento .rpm. Também é visto com bons olhos no mercado corporativo e é a distro padrão em sua nuvem Oracle Cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curiosidade
&lt;/h2&gt;

&lt;p&gt;Porque GNU/Linux e não apenas Linux? Linux é o kernel do sistema operacional, uma parte fundamental, mas um sistema operacional precisa de muitas outras peças de software e o que temos nas distribuições GNU/Linux são o kernel Linux e as outras peças que foram desenvolvidas pelo projeto GNU, portanto é bastante justo citar também o nome deles, que entregaram tanto para que pudessemos ter este sistema operacional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Veredito
&lt;/h2&gt;

&lt;p&gt;A escolha de uma distribuição Linux para utilização pelos desenvolvedores se dá muito pelo conhecimento de cada um e por se sentir confortável com seu uso no dia-a-dia. Fato é que as distros Linux vem ano a ano ganhando a confiança e a preferência da comunidade Dev.&lt;/p&gt;

&lt;p&gt;Em minha opinião estas distros apresentadas neste artigo são excelentes escolhas para uso no desenvolvimento de software e como citei o leitor poderá customiza-las conforme sua necessidade. Se você ainda não usa GNU/Linux na sua máquina para desenvolvimento, acho que é um bom momento para dar essa chance e se surpreender com a qualidade deste sistema operacional e das ferramentas disponíveis para utilização nele.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.debian.org/"&gt;https://www.debian.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ubuntu.com/"&gt;https://ubuntu.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux"&gt;https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fedoraproject.org/"&gt;https://fedoraproject.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oracle.com/br/linux/"&gt;https://www.oracle.com/br/linux/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gnu.org/"&gt;https://www.gnu.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linux</category>
      <category>developers</category>
      <category>development</category>
      <category>opensource</category>
    </item>
    <item>
      <title>SDKMAN! Instalando e utilizando várias versões do Java e de seus amigos</title>
      <dc:creator>Kleber Bonassi</dc:creator>
      <pubDate>Wed, 31 Jan 2024 23:32:41 +0000</pubDate>
      <link>https://dev.to/kbonassi/sdkman-instalando-e-utilizando-varias-versoes-do-java-e-de-seus-amigos-1c51</link>
      <guid>https://dev.to/kbonassi/sdkman-instalando-e-utilizando-varias-versoes-do-java-e-de-seus-amigos-1c51</guid>
      <description>&lt;p&gt;Atualmente a melhor maneira de instalar a JDK e também o Kotlin, o Maven, o Gradle e mais alguns outros "amigos" do Java, para os desenvolvedores destas stacks, é através do SDKMAN!&lt;/p&gt;

&lt;p&gt;O SDKMAN! é um instalador e gerenciador das versões destas ferramentas. É multiplataforma, funcionando perfeitamente em GNU/Linux, MacOS e Windows. Ele foi construído por desenvolvedores, para desenvolvedores, então essa galera sabe bem o que nós desenvolvedores precisamos no dia-a-dia.&lt;/p&gt;

&lt;p&gt;Por vezes precisamos manter mais de uma versão da JDK, por exemplo mantendo Java 8, mas também queremos o Java 17, versões LTS, ou mesmo versões intermediárias, como o Java 19, sem contar que podemos instalar versões diferentes da JDK e de vendors também, como a OpenJDK, GraalVM, Zulu, Corretto entre outras e quando precisamos ter estas versões diversas instaladas na mesma máquina, acabamos tendo um trabalho para mudar a versão no path ou utilizarmos de artíficios como ter um script para fazer este trabalho. Com o SDKMAN! tudo fica muito fácil e organizado, desde a instalação destas ferramentas e posterior troca da versão que você deseja utilizar naquele momento. Neste artigo vamos ver como podemos ter essa mágica à disposição.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalação
&lt;/h2&gt;

&lt;p&gt;Aqui estou cobrindo a instalação e uso do SDKMAN! no Ubuntu GNU/Linux, mas como mencionei acima, é possível te-lo rodando no Windows e no MacOS. Estou executando o Ubuntu 22.04 LTS, se você usa outro sabor de GNU/Linux ou mesmo outra versão do Ubuntu, os comandos podem ser diferentes.&lt;/p&gt;

&lt;p&gt;No Ubuntu antes de instalar o SDKMAN! propriamente dito, precisamos ter instalado o &lt;em&gt;curl&lt;/em&gt;. Para isto, no terminal,  execute o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sudo apt install curl

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

&lt;/div&gt;



&lt;p&gt;Após ter o &lt;em&gt;curl&lt;/em&gt; instalado, podemos seguir com a instalação do SDKMAN! com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
curl -s "https://get.sdkman.io" | bash

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

&lt;/div&gt;



&lt;p&gt;A saída deste comando será algo como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
...
Set version to 5.18.2 ...
Set native version to 0.4.6 ...
Attempt update of interactive bash profile on regular UNIX...
Added sdkman init snippet to /home/kleber/.bashrc
Attempt update of zsh profile...
Updated existing /home/kleber/.zshrc



All done!


You are subscribed to the STABLE channel.

Please open a new terminal, or run the following in the existing one:

    source "/home/kleber/.sdkman/bin/sdkman-init.sh"

Then issue the following command:

    sdk help

Enjoy!!!

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

&lt;/div&gt;



&lt;p&gt;Então temos ao final da saída do comando acima, que devemos executar outro comando (substitua USUARIO pelo seu usuário):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
source "/home/USUARIO/.sdkman/bin/sdkman-init.sh"

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

&lt;/div&gt;



&lt;p&gt;Feito isto o SDKMAN! está instalado, agora vamos instalar algumas versões de JDK e alguns complementos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalação da JDK
&lt;/h2&gt;

&lt;p&gt;No terminal, podemos executar o comando abaixo para listar as JDKs disponíveis para instalação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk list java 

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

&lt;/div&gt;



&lt;p&gt;Ao executar o comando acima, teremos uma saída como a abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
================================================================================
Available Java Versions for Linux 64bit
================================================================================
Vendor         | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
Corretto       |     | 21.0.2       | amzn    |            | 21.0.2-amzn         
               |     | 21.0.1       | amzn    |            | 21.0.1-amzn         
               |     | 17.0.10      | amzn    |            | 17.0.10-amzn        
               |     | 17.0.9       | amzn    |            | 17.0.9-amzn         
               |     | 11.0.22      | amzn    |            | 11.0.22-amzn        
               |     | 11.0.21      | amzn    |            | 11.0.21-amzn        
               |     | 8.0.402      | amzn    |            | 8.0.402-amzn        
               |     | 8.0.392      | amzn    |            | 8.0.392-amzn        
Dragonwell     |     | 17.0.9       | albba   |            | 17.0.9-albba        
:

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

&lt;/div&gt;



&lt;p&gt;Teclando  as próximas páginas serão exibidas e podemos ver que temos a nossa disposição várias versões da JDK de vários vendors, como Oracle, OpenJDK, Amazon, Zulu, Microsoft entre outras.&lt;/p&gt;

&lt;p&gt;Então por exemplo vamos instalar a versão 21 da OpenJDK, para isto execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk install java 21.0.2-open

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

&lt;/div&gt;



&lt;p&gt;E teremos uma saída como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Downloading: java 21.0.2-open

In progress...

######################################################################### 100,0%

Repackaging Java 21.0.2-open...

Done repackaging...

Installing: java 21.0.2-open
Done installing!


Setting java 21.0.2-open as default.

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

&lt;/div&gt;



&lt;p&gt;Se agora executarmos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
java --version

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

&lt;/div&gt;



&lt;p&gt;Poderemos confirmar que temos a JVM instalada bem como a JDK que pode ser confirmada com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javac --version

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

&lt;/div&gt;



&lt;p&gt;Agora vamos supor que gostaríamos também de ter instalada a versão 17 da GraalVM. Então vamos instalar a GraalVM concomitantemente ao OpenJDK. Para isto execute agora:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk install java 17.0.9-graalce

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

&lt;/div&gt;



&lt;p&gt;Ao instalar mais de uma JDK, somos questionados se queremos que esta nova instalação seja a default ou não:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Do you want java 17.0.9-graalce to be set as default? (Y/n):

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

&lt;/div&gt;



&lt;p&gt;No meu exemplo vou colocar para a GraalVM ser a default e então se confirmarmos com o mesmo comando que fizemos para a OpenJDK, a saída agora será um pouco diferente pois estará mostrando que estamos utilizando a GraalVM, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
java --version

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

&lt;/div&gt;



&lt;p&gt;E como saída teremos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
openjdk 17.0.9 2023-10-17
OpenJDK Runtime Environment GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22)
OpenJDK 64-Bit Server VM GraalVM CE 17.0.9+9.1 (build 17.0.9+9-jvmci-23.0-b22, mixed mode, sharing)

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

&lt;/div&gt;



&lt;p&gt;Repare que agora temos como saída a informação que nosso Java é a versão 17 da GraalVM.&lt;/p&gt;

&lt;p&gt;Certo, e como podemos utilizar a outra JDK que temos instalada? Com o comando abaixo definimos qual JDK queremos utilizar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk use java 21.0.2-open

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

&lt;/div&gt;



&lt;p&gt;Para saber qual JDK está setada atualmente, também podemos executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk current

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

&lt;/div&gt;



&lt;p&gt;Com estes poucos comandos fica demonstrado o quão simples é o gerenciamento de versões diferentes da JDK, bem como de vendors distintos, para utilização na mesma máquina. Um exemplo de uso disto é quando precisamos desenvolver algo novo em uma nova versão da JDK, mas por vezes temos o compromisso de manter código de uma versão anterior, na vida real, existem muitos projetos ainda rodando em Java 8 ou 11.&lt;/p&gt;

&lt;h2&gt;
  
  
  Complementos
&lt;/h2&gt;

&lt;p&gt;Para trabalhar com Java é quase sempre necessário o uso de um gerenciador de dependências, em geral, Maven ou Gradle.&lt;/p&gt;

&lt;p&gt;Em nosso exemplo vamos instalar também o Maven, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk install maven 3.9.6

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

&lt;/div&gt;



&lt;p&gt;E se quisermos confirmar, podemos executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
mvn --version

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

&lt;/div&gt;



&lt;p&gt;E teremos uma saída como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /home/kleber/.sdkman/candidates/maven/current
Java version: 21.0.2, vendor: Oracle Corporation, runtime: /home/kleber/.sdkman/candidates/java/21.0.2-open
Default locale: pt_BR, platform encoding: UTF-8
OS name: "linux", version: "6.5.0-15-generic", arch: "amd64", family: "unix"

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

&lt;/div&gt;



&lt;p&gt;O lance de poder ter versões distintas para a JDK também vale para tudo o que é possível instalar e gerenciar pelo SDKMAN!, portanto se aplica também ao Maven, por exemplo.&lt;/p&gt;

&lt;p&gt;Quer listar as possibilidades de instalação de versões do Maven? Execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk list maven

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

&lt;/div&gt;



&lt;p&gt;Quer listar tudo o que está disponível para ser instalado e gerenciado pelo SDKMAN!? Execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk list

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

&lt;/div&gt;



&lt;p&gt;Bem, o objetivo deste artigo era apresentar o SDKMAN! e suas possibilidades, que ajudam muito no dia-a-dia dos desenvolvedores da stack Java e derivados.&lt;/p&gt;

&lt;p&gt;Como dica final, pra se aprofundar mais nos comandos do SDKMAN!, o help pode contribuir muito e para acessa-lo basta executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
sdk help

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

&lt;/div&gt;



&lt;p&gt;Isso é tudo pessoal!&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://sdkman.io/"&gt;https://sdkman.io/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sdkman.io/usage"&gt;https://sdkman.io/usage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>maven</category>
      <category>gradle</category>
      <category>kotlin</category>
    </item>
    <item>
      <title>Localstack, a "AWS" local para desenvolvimento em cloud</title>
      <dc:creator>Kleber Bonassi</dc:creator>
      <pubDate>Thu, 09 Nov 2023 18:59:46 +0000</pubDate>
      <link>https://dev.to/kbonassi/localstack-a-aws-local-para-desenvolvimento-em-cloud-55n1</link>
      <guid>https://dev.to/kbonassi/localstack-a-aws-local-para-desenvolvimento-em-cloud-55n1</guid>
      <description>&lt;p&gt;Neste artigo vamos abordar a Localstack, que simula localmente  alguns dos serviços da cloud AWS.&lt;/p&gt;

&lt;p&gt;Assim como o uso de containers tornou-se um padrão de ambiente para desenvolvimento de software desde alguns anos atrás, creio que podemos dizer o mesmo da Localstack quando o foco                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            é o desenvolvimento para a cloud AWS.&lt;/p&gt;

&lt;p&gt;A Localstack é um conjunto de ferramentas que simula o ambiente cloud AWS, com isto podemos desenvolver e testar localmente soluções como microsserviços ou funções, acessando serviços existentes na AWS, em nossa própria máquina para então quando estiver tudo ok, fazer o deploy na cloud AWS.&lt;/p&gt;

&lt;p&gt;A maneira que considero mais fácil e rápida para termos a Localstack rodando, é fazendo uso da imagem oficial para containers. Para isso podemos criar um arquivo com o nome compose.yml para o Podman com o conteúdo abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: "3.8"

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack:1.3.1
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559"  # external services port range
    environment:
      - DEBUG=${DEBUG-}
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Aqui estou usando o gerenciador de containers Podman, caso você utilize o Docker nomeie o arquivo acima como docker-compose.yml&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;E então via podman-compose subir o container com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;podman-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Novamente, se você usa Docker substitua no comando acima podman-compose por docker-compose&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Certo, agora temos a Localstack operante em nossa máquina local, mas como podemos interagir com ela? Bem, da mesma forma que interagimos com a cloud AWS. Pode ser pela AWS CLI, por AWS SDK e outra forma que muitas pessoas gostam é através de uma console web e para isso temos uma console &lt;a href="https://app.localstack.cloud/sign-in"&gt;disponível&lt;/a&gt;, onde você pode fazer um cadastro gratuito e então essa console web interage com a sua Localstack rodando na sua máquina local. Alguns "serviços" requerem uma assinatura paga para utilização, mas vários serviços trivais são gratuitos.&lt;/p&gt;

&lt;p&gt;Para a instalação do AWS CLI, que é super fácil, você pode seguir o tutorial da própria AWS, link nas referências ao final do artigo.&lt;/p&gt;

&lt;p&gt;Creio que seja uma boa prática você criar um perfil próprio para a Localstack pois facilita a separação do seu Localstack para uma possível conta na cloud AWS e você pode criar este perfil com o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws configure --profile localstack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sugestão de preenchimento dos valores que são pedidos na criação do perfil:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Access Key ID [None]: teste_access_id
AWS Secret Access Key [None]: teste_access_secret
Default region name [None]: us-east-1
Default output format [None]: json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora para testar vamos criar um bucket S3 na nossa Localstack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws s3api create-bucket \
    --endpoint=http://localhost:4566 \
    --bucket meu-bucket \
    --profile localstack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A saída deste comando deverá ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Location": "/meu-bucket"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E para listarmos nossos buckets S3 utilizamos o comando abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws s3 ls \
    --endpoint=http://localhost:4566 \
    --profile localstack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E teríamos uma saída como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2023-11-05 15:20:06 meu-bucket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Era isso que eu queria trazer neste artigo, mostrar mesmo que de forma superficial o poder e a utilidade da Localstack para podermos desenvolver e testar localmente antes de subirmos para a cloud AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://localstack.cloud/"&gt;https://localstack.cloud/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/localstack/localstack"&gt;https://github.com/localstack/localstack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/pt_br/cli/latest/userguide/getting-started-install.html"&gt;https://docs.aws.amazon.com/pt_br/cli/latest/userguide/getting-started-install.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/reference/"&gt;https://docs.aws.amazon.com/cli/latest/reference/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.localstack.cloud/sign-in/"&gt;https://app.localstack.cloud/sign-in/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>localstack</category>
      <category>cloud</category>
      <category>development</category>
    </item>
  </channel>
</rss>
