Observabilidade em Aplicações Go

A observabilidade é uma parte essencial do desenvolvimento de software, e é especialmente importante para aplicações Go. Por ser uma linguagem de programação compilada estaticamente, alguns tipos de erros podem ser difíceis de encontrar e corrigir.

Nesses casos, a observabilidade pode ajudar a identificar e resolver problemas rapidamente, reduzindo o tempo de inatividade e melhorando a experiência do usuário.

Boas Práticas

Existem várias boas práticas que você pode seguir para melhorar a observabilidade de suas aplicações, dentre elas, podemos citar:

Leia mais »

Como escalar horizontalmente uma aplicação no Kubernetes

Se você já se deparou com gargalos de performance ou custos exorbitantes na sua jornada com Kubernetes, prepare-se para conhecer seu novo melhor amigo: o Horizontal Pod Autoscaler (HPA). Neste post, vamos mergulhar no universo do HPA, desvendando seus segredos e te equipando com o conhecimento necessário para otimizar seus clusters.

O que é o HPA?

A função básica do HPA é monitorar sua aplicação em tempo real, e ajustar automaticamente o número de pods em ação para garantir a melhor experiência possível para seus usuários. Em outras palavras, esse recurso mágico do Kubernetes permite escalar horizontalmente seus workloads de forma inteligente e eficiente.

Leia mais »

Como fazer upload e gerar url assinada para o Google Cloud Storage

Gerenciar permissão de acesso pode ser uma grande dor de cabeça. Verificar se o usuário precisa estar logado, se tem acesso aquele recurso ou funcionalidade, se o link acessado ainda é válido, dentre outras coisas.

Atualmente quando falamos de permissão de acesso a arquivos em buckets, alguns cloud providers oferecem um recurso conhecido como URLs assinadas (Signed URL). Tal recurso nos permite configurar um controle de acesso temporário a arquivos dentro de buckets privados.

Nesse post, vou mostrar como fazer upload de um arquivo para um bucket privado e gerar uma URL assinada para acesso temporário.

Upload do arquivo

Para fazer o upload, assumo que você já tenha um bucket privado criado no Google Cloud Storage (GCS) e que sua aplicação já tenha acesso a ele.

Leia mais »

Configurações seguras com Secrets

Dando continuidade a nossa série de posts sobre Kubernetes, assim como dito no post sobre ConfigMap, nesse post vamos falar um pouco sobre como mandar uma configuração segura utilizando o recurso Secrets.

Esse recurso, como você já deve estar pensando, é utilizado para guardar dados sensíveis, como senhas, tokens de acesso ou chaves de API que sua aplicação precisa para funcionar, mas que não devem ser armazenadas diretamente no código, no manifesto do Deployment ou em ConfigMap.

Criando uma Secret

Assim como o recurso ConfigMap, Secrets são bem simples de serem criados, já que basicamente só precisamos nos preocupar com o atributo data.

Leia mais »
package html/template

Como renderizar templates HTML em Go

Dando continuidade ao post sobre como criar websites em Go, vamos nos aprofundar um pouco mais no package html/template, ou seja, vamos ver como renderizar variáveis, criar condicionais e loop dentro de um template HTML.

Variáveis

No package html/template, as variáveis permitem injetar conteúdo dinâmico nos seus templates HTML.

Um variável é identificada no template por {{.NomeDaVariavel}}. Por exemplo:

<title>{{.Titulo}}</title>
Leia mais »

Como criar um website com Golang

A linguagem Go é sem dúvidas uma das linguagens mais versáteis que temos nos dias de hoje. Embora algumas pessoas tenham a idéia que ela só serve para desenvolvimento de APIs, nesse post vou mostrar para vocês, como podemos utilizá-la para criar um website.

Servidor

Assim como quando desenvolvemos uma API, o primeiro passo para o desenvolvimento de um website em Go é criar um servidor utilizando o package net/http.

Leia mais »

Como implementar mTLS em aplicações Go

Hoje vamos explorar como implementar o mTLS (Mutual TLS), que é uma técnica de segurança para autenticação mútua entre cliente e servidor, em uma aplicação Go.

Mas antes de começar, vamos entender um pouco melhor o que é TLS (Transport Layer Security) e qual sua diferença com mTLS.

TLS vs mTLS

O TLS é usado para criptografar a comunicação entre cliente e servidor. Nele, comumente usado em conexões HTTPS, apenas o servidor se autentica perante o cliente, usando um certificado digital para garantir que o cliente está se comunicando com o servidor correto.

Leia mais »

Dicas e práticas sobre error handling em Go

Hoje vamos falar sobre um tópico crucial em Go, como lidar com erros. Em Go, erros são valores importantes e devem ser tratados com cuidado.

Definindo um error

Primeiramente, em Go, um erro é qualquer valor que implementa a interface error. Esta interface tem um único método: Error() string.

type MyError struct {
    Message string
    Code    int
}

func (e *MyError) Error() string {
    return fmt.Sprintf("error: %s, code: %d", e.Message, e.Code)
}
Leia mais »

Qual a finalidade e como utilizar ConfigMap

Depois de muito tempo sem postar nada sobre Kubernetes, nesse post, vamos falar um pouco sobre o recurso ConfigMap.

ConfigMap é o principal recurso para armazenar dados de configuração. De fácil configuração, um ConfigMap é basicamente uma estrutura chave/valor, onde o valor, pode ser inclusive, um arquivo inteiro, como por exemplo, o arquivo de configuração para o nginx.

Quando olhamos para o ConfigMap de forma isolada, ele não parece trazer muito benefícios para um cluster Kubernetes. No entanto, quando o utilizamos junto a um recurso do tipo deploy, os benefícios ficam mais do que evidentes.

Mas antes de entrar nessa parte, vamos primeiro criar um ConfigMap.

ConfigMap

O início de um manifesto do tipo ConfigMap, é praticamente igual a todos os outros do Kubernetes. Em outras palavras, nessa parte, declaramos a apiVersion, kind e metadata.

Leia mais »

Como executar testes rápidos em Go

Se você trabalha ou já trabalhou em um grande projeto com uma alta cobertura de testes, com certeza você já passou raiva na hora de executar os testes da aplicação localmente.

Isso por que, quanto maior o projeto e mais bem coberto por testes, maior o tempo para executar todas as validações.

Pois bem, hoje venho te mostrar duas formas de continuar com uma ótima cobertura de testes, porém economizar um bom tempo na hora de executá-los localmente ou na abertura de PRs.

Leia mais »