<?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: Rafael Conceição</title>
    <description>The latest articles on DEV Community by Rafael Conceição (@rafaelonline).</description>
    <link>https://dev.to/rafaelonline</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%2F651107%2F6d1a8b84-31e0-44cd-a0d3-26c1d0f4a8de.jpeg</url>
      <title>DEV Community: Rafael Conceição</title>
      <link>https://dev.to/rafaelonline</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rafaelonline"/>
    <language>en</language>
    <item>
      <title>Update Addons AWS EKS</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Tue, 06 May 2025 10:08:35 +0000</pubDate>
      <link>https://dev.to/rafaelonline/update-addons-aws-eks-i7o</link>
      <guid>https://dev.to/rafaelonline/update-addons-aws-eks-i7o</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/eks/latest/userguide/update-cluster.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;export CLUSTER=&lt;br&gt;
export AWS_REGION=&lt;br&gt;
export AWS_ACCOUNT_ID=$(aws sts get-caller-identity | jq --raw-output ".Account")&lt;br&gt;
export ENV=&lt;/p&gt;

&lt;h2&gt;
  
  
  Amazon VPC CNI
&lt;/h2&gt;

&lt;p&gt;kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3&lt;/p&gt;

&lt;p&gt;Deve ser &amp;gt;= 1.8.0&lt;/p&gt;

&lt;p&gt;kubectl get daemonset aws-node -n kube-system -o yaml &amp;gt; aws-k8s-cni-old.yaml&lt;/p&gt;

&lt;p&gt;eksctl create iamserviceaccount \&lt;br&gt;
  --name aws-node \&lt;br&gt;
  --namespace kube-system \&lt;br&gt;
  --cluster $CLUSTER \&lt;br&gt;
  --attach-policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \&lt;br&gt;
  --approve \&lt;br&gt;
  --role-only \&lt;br&gt;
  --role-name "AmazonEKSVPCCNIRole-${ENV}"&lt;/p&gt;

&lt;p&gt;aws eks create-addon \&lt;br&gt;
  --cluster-name $CLUSTER \&lt;br&gt;
  --addon-name vpc-cni \&lt;br&gt;
  --service-account-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/AmazonEKSVPCCNIRole-${ENV} \&lt;br&gt;
  --resolve-conflicts OVERWRITE&lt;/p&gt;

&lt;p&gt;eksctl get addon --name vpc-cni --cluster $CLUSTER&lt;/p&gt;

&lt;p&gt;aws eks update-addon \&lt;br&gt;
  --addon-name vpc-cni \&lt;br&gt;
  --addon-version v1.15.1-eksbuild.1 \&lt;br&gt;
  --cluster-name $CLUSTER \&lt;br&gt;
  --service-account-role-arn arn:aws:iam::${AWS_ACCOUNT_ID}:role/AmazonEKSVPCCNIRole-${ENV}&lt;/p&gt;

&lt;h2&gt;
  
  
  CoreDNS
&lt;/h2&gt;

&lt;p&gt;kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3&lt;/p&gt;

&lt;p&gt;kubectl get deployment coredns -n kube-system -o yaml &amp;gt; aws-k8s-coredns-old.yaml&lt;/p&gt;

&lt;p&gt;aws eks create-addon \&lt;br&gt;
  --cluster-name $CLUSTER \&lt;br&gt;
  --addon-name coredns \&lt;br&gt;
  --resolve-conflicts OVERWRITE&lt;/p&gt;

&lt;p&gt;eksctl get addon --name coredns --cluster $CLUSTER&lt;/p&gt;

&lt;p&gt;aws eks update-addon \&lt;br&gt;
  --addon-name coredns \&lt;br&gt;
  --addon-version v1.9.3-eksbuild.21 \&lt;br&gt;
  --cluster-name $CLUSTER&lt;/p&gt;

&lt;h2&gt;
  
  
  Kube-proxy
&lt;/h2&gt;

&lt;p&gt;kubectl describe daemonset kube-proxy -n kube-system | grep kube-proxy: | cut -d : -f 3&lt;/p&gt;

&lt;p&gt;Deve ser max 2 versões para tras&lt;/p&gt;

&lt;p&gt;kubectl get daemonset kube-proxy -n kube-system -o yaml &amp;gt; aws-k8s-kube-proxy-old.yaml&lt;/p&gt;

&lt;p&gt;aws eks create-addon \&lt;br&gt;
 --cluster-name $CLUSTER \&lt;br&gt;
 --addon-name kube-proxy \&lt;br&gt;
 --resolve-conflicts OVERWRITE&lt;/p&gt;

&lt;p&gt;eksctl get addon --name kube-proxy --cluster $CLUSTER&lt;/p&gt;

&lt;p&gt;Atualizar apos upgrade do eks&lt;/p&gt;

&lt;p&gt;aws eks update-addon \&lt;br&gt;
  --addon-name kube-proxy \&lt;br&gt;
  --addon-version v1.25.9-eksbuild.1 \&lt;br&gt;
  --cluster-name $CLUSTER&lt;/p&gt;

&lt;h2&gt;
  
  
  ALB Controller
&lt;/h2&gt;

&lt;p&gt;kubectl describe deployment -n kube-system aws-load-balancer-controller | grep aws-alb-ingress-controller: | cut -d : -f 3&lt;/p&gt;

&lt;p&gt;kubectl get deployment -n kube-system aws-load-balancer-controller -o yaml &amp;gt; aws-k8s-aws-alb-ingress-controller-old.yaml&lt;/p&gt;

&lt;p&gt;kubectl set image deployment/aws-load-balancer-controller -n kube-system controller=public.ecr.aws/eks/aws-load-balancer-controller:v2.4.7&lt;/p&gt;

&lt;p&gt;k get pod -n kube-system | grep aws-load-balancer-controller&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Por que os times precisam de SLOs, SLIs e Error Budget?</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sun, 17 Mar 2024 18:06:28 +0000</pubDate>
      <link>https://dev.to/rafaelonline/por-que-os-times-precisam-de-slos-slis-e-error-budget-8di</link>
      <guid>https://dev.to/rafaelonline/por-que-os-times-precisam-de-slos-slis-e-error-budget-8di</guid>
      <description>&lt;p&gt;Os SLOs (Objetivos de Nível de Serviço) são um instrumento para auxiliar na definição de quais tarefas de engenharia devem ser priorizadas. Ao avaliar o impacto previsto em nosso orçamento de erros (Error Budget), podemos identificar qual projeto trará mais benefícios para os nossos usuários.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que um SLO deve ser e o que ele deve abranger.
&lt;/h2&gt;

&lt;p&gt;Um SLO estabelece um nível de confiabilidade alvo para os usuários do serviço. Acima deste limite, quase todos os usuários devem estar contentes com o seu serviço. No final do dia, a satisfação do usuário é o que importa (leia o texto:  &lt;a href="https://dev.to/rafaelonline/confiabilidade-um-dos-recursos-mais-importantes-de-um-sistema-2pad"&gt;Confiabilidade: um dos recursos mais importantes de um sistema&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;100% de confiabilidade é o alvo errado&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alguns motivos para essa afirmação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Mesmo que um sistema tenha 100% de disponibilidade, o cliente não experimenta os 100%. A jornada do cliente geralmente é longa e complexa, e qualquer um dos componentes ao longo do caminho pode falhar. À medida que você passa de 99% para 99,9% para 99,99% de confiabilidade, cada nove extra tem um custo maior, mas a utilidade para seus clientes se aproxima constantemente de zero.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se você conseguir criar uma experiência 100% confiável para seus clientes e quiser manter esse nível de confiabilidade, nunca poderá atualizar ou melhorar seu serviço. A principal fonte de interrupções são mudanças.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Um SLO de 100% significa que você só tem tempo para ser reativo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma vez que você tenha uma meta de SLO abaixo de 100%, ela precisa ser de propriedade de alguém na organização que esteja capacitado para fazer compensações entre velocidade e confiabilidade.&lt;/p&gt;

&lt;p&gt;Por mais que o time SRE possa ser o guardião do SLO, o time do produto e de negócios devem estar envolvidos em todo o ciclo, sedo co-responsáveis nas definições e ações.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que medir: usando SLIs e Error Budget
&lt;/h2&gt;

&lt;p&gt;SLI é um indicador do nível de serviço que você está fornecendo.&lt;/p&gt;

&lt;p&gt;Recomendamos tratar o SLI como a razão de dois números: o número de eventos bons dividido pelo número total de eventos. Por exemplo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Número de solicitações HTTP bem-sucedidas / total de solicitações HTTP&lt;br&gt;
(taxa de sucesso)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O SLO é uma porcentagem alvo e o orçamento de erro é 100% menos o SLO. Por exemplo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se você tiver um SLO de taxa de sucesso de 99,9%, um serviço que&lt;br&gt;
recebe 3 milhões de solicitações em um período de quatro semanas tem&lt;br&gt;
um orçamento de erros de 3.000 (0,1%) erros nesse período. Se uma&lt;br&gt;
única interrupção for responsável por 1.500 erros, esse erro custará&lt;br&gt;
50% do orçamento.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sua primeira tentativa de SLI e SLO não precisa ser perfeita; O objetivo mais importante é colocar algo em prática e medir, e configurar um ciclo de feedback para que você possa aprimorar a estratégia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Começando a definir SLIs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Escolha um aplicativo para o qual você deseja definir SLOs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decida claramente quem são os “usuários” nessa situação.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Considere as maneiras comuns como seus usuários interagem com seu sistema - tarefas comuns e atividades críticas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Desenhe um diagrama de arquitetura de alto nível do seu sistema; Mostre os principais componentes, o fluxo de solicitação, o fluxo de dados e as dependências críticas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Escolha um aspecto do seu sistema que seja relevante, mas fácil de medir - você sempre pode iterar e refinar mais tarde.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estratégia baseada no Error Budget
&lt;/h3&gt;

&lt;p&gt;Para implementar uma estratégia baseada em orçamento de erros, é necessário alcançar um estado onde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Os SLOs foram aprovados por todas as partes interessadas como adequados para o produto.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Os encarregados de assegurar o SLO concordaram que é viável atingir este SLO em condições normais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A organização se comprometeu a utilizar o orçamento de falhas para tomada de decisões e priorização.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Um processo para aprimorar o SLO deve ser definido.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso contrário, a conformidade com o SLO será apenas mais um indicador de desempenho em vez de uma ferramenta de tomada de decisão.&lt;/p&gt;

&lt;p&gt;Error Budget é um assunto que merece um texto dedicado sobre o assunto ;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprimorando o SLO
&lt;/h2&gt;

&lt;p&gt;Durante o processo de revisão de um SLO algumas perguntas podem ser feitas que irão nos ajudar a saber ser estamos no caminho correto ou não:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Consideramos o SLO determinado como sendo adequado e possível cumprir em circunstâncias normais?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O SLO tem ajudado a determinar qual trabalho de engenharia priorizar e qual projeto é mais benéfico para nossos usuários?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao refinar o SLO pense em como responder sim para essas perguntas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concluindo
&lt;/h2&gt;

&lt;p&gt;A implementação de SLOs, SLIs e Error Budget é uma estratégia essencial para equilibrar a confiabilidade do serviço e a velocidade de desenvolvimento. Ao estabelecer metas de confiabilidade realistas e mensuráveis, as equipes podem priorizar efetivamente o trabalho de engenharia e melhorar a satisfação do usuário.&lt;/p&gt;

&lt;p&gt;A chave para o sucesso é a colaboração entre todas as partes interessadas e a adoção de um ciclo de feedback contínuo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conheça os meus outros posts sobre SRE
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/contribuicoes-de-uma-equipe-de-sre-no-ciclo-de-vida-de-um-servico-l6k"&gt;Contribuições de uma equipe de SRE no ciclo de vida de um serviço&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/modelos-de-engajamentos-de-um-sre-com-um-grupo-de-trabalho-11b2"&gt;Modelos de engajamentos de um SRE com um grupo de trabalho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/compromissos-de-um-sre-em-um-grupo-de-trabalho-1m8f"&gt;Compromissos de um SRE em um grupo de trabalho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/razoes-para-monitorar-um-sistema-3jbo"&gt;Razões para monitorar um sistema&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sre</category>
      <category>devops</category>
      <category>cloud</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Por que os times precisam de SLOs, SLIs e Error Budget?</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sun, 17 Mar 2024 18:04:57 +0000</pubDate>
      <link>https://dev.to/rafaelonline/por-que-os-times-precisam-de-slos-slis-e-error-budget-1hlm</link>
      <guid>https://dev.to/rafaelonline/por-que-os-times-precisam-de-slos-slis-e-error-budget-1hlm</guid>
      <description>&lt;p&gt;Os SLOs (Objetivos de Nível de Serviço) são um instrumento para auxiliar na definição de quais tarefas de engenharia devem ser priorizadas. Ao avaliar o impacto previsto em nosso orçamento de erros (Error Budget), podemos identificar qual projeto trará mais benefícios para os nossos usuários.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que um SLO deve ser e o que ele deve abranger.
&lt;/h2&gt;

&lt;p&gt;Um SLO estabelece um nível de confiabilidade alvo para os usuários do serviço. Acima deste limite, quase todos os usuários devem estar contentes com o seu serviço. No final do dia, a satisfação do usuário é o que importa (leia o texto:  &lt;a href="https://dev.to/rafaelonline/confiabilidade-um-dos-recursos-mais-importantes-de-um-sistema-2pad"&gt;Confiabilidade: um dos recursos mais importantes de um sistema&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;100% de confiabilidade é o alvo errado&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alguns motivos para essa afirmação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Mesmo que um sistema tenha 100% de disponibilidade, o cliente não experimenta os 100%. A jornada do cliente geralmente é longa e complexa, e qualquer um dos componentes ao longo do caminho pode falhar. À medida que você passa de 99% para 99,9% para 99,99% de confiabilidade, cada nove extra tem um custo maior, mas a utilidade para seus clientes se aproxima constantemente de zero.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se você conseguir criar uma experiência 100% confiável para seus clientes e quiser manter esse nível de confiabilidade, nunca poderá atualizar ou melhorar seu serviço. A principal fonte de interrupções são mudanças.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Um SLO de 100% significa que você só tem tempo para ser reativo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma vez que você tenha uma meta de SLO abaixo de 100%, ela precisa ser de propriedade de alguém na organização que esteja capacitado para fazer compensações entre velocidade e confiabilidade.&lt;/p&gt;

&lt;p&gt;Por mais que o time SRE possa ser o guardião do SLO, o time do produto e de negócios devem estar envolvidos em todo o ciclo, sedo co-responsáveis nas definições e ações.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que medir: usando SLIs e Error Budget
&lt;/h2&gt;

&lt;p&gt;SLI é um indicador do nível de serviço que você está fornecendo.&lt;/p&gt;

&lt;p&gt;Recomendamos tratar o SLI como a razão de dois números: o número de eventos bons dividido pelo número total de eventos. Por exemplo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Número de solicitações HTTP bem-sucedidas / total de solicitações HTTP&lt;br&gt;
(taxa de sucesso)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O SLO é uma porcentagem alvo e o orçamento de erro é 100% menos o SLO. Por exemplo:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se você tiver um SLO de taxa de sucesso de 99,9%, um serviço que&lt;br&gt;
recebe 3 milhões de solicitações em um período de quatro semanas tem&lt;br&gt;
um orçamento de erros de 3.000 (0,1%) erros nesse período. Se uma&lt;br&gt;
única interrupção for responsável por 1.500 erros, esse erro custará&lt;br&gt;
50% do orçamento.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sua primeira tentativa de SLI e SLO não precisa ser perfeita; O objetivo mais importante é colocar algo em prática e medir, e configurar um ciclo de feedback para que você possa aprimorar a estratégia.&lt;/p&gt;

&lt;h3&gt;
  
  
  Começando a definir SLIs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Escolha um aplicativo para o qual você deseja definir SLOs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decida claramente quem são os “usuários” nessa situação.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Considere as maneiras comuns como seus usuários interagem com seu sistema - tarefas comuns e atividades críticas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Desenhe um diagrama de arquitetura de alto nível do seu sistema; Mostre os principais componentes, o fluxo de solicitação, o fluxo de dados e as dependências críticas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Escolha um aspecto do seu sistema que seja relevante, mas fácil de medir - você sempre pode iterar e refinar mais tarde.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estratégia baseada no Error Budget
&lt;/h3&gt;

&lt;p&gt;Para implementar uma estratégia baseada em orçamento de erros, é necessário alcançar um estado onde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Os SLOs foram aprovados por todas as partes interessadas como adequados para o produto.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Os encarregados de assegurar o SLO concordaram que é viável atingir este SLO em condições normais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A organização se comprometeu a utilizar o orçamento de falhas para tomada de decisões e priorização.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Um processo para aprimorar o SLO deve ser definido.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso contrário, a conformidade com o SLO será apenas mais um indicador de desempenho em vez de uma ferramenta de tomada de decisão.&lt;/p&gt;

&lt;p&gt;Error Budget é um assunto que merece um texto dedicado sobre o assunto ;)&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprimorando o SLO
&lt;/h2&gt;

&lt;p&gt;Durante o processo de revisão de um SLO algumas perguntas podem ser feitas que irão nos ajudar a saber ser estamos no caminho correto ou não:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Consideramos o SLO determinado como sendo adequado e possível cumprir em circunstâncias normais?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O SLO tem ajudado a determinar qual trabalho de engenharia priorizar e qual projeto é mais benéfico para nossos usuários?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao refinar o SLO pense em como responder sim para essas perguntas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concluindo
&lt;/h2&gt;

&lt;p&gt;A implementação de SLOs, SLIs e Error Budget é uma estratégia essencial para equilibrar a confiabilidade do serviço e a velocidade de desenvolvimento. Ao estabelecer metas de confiabilidade realistas e mensuráveis, as equipes podem priorizar efetivamente o trabalho de engenharia e melhorar a satisfação do usuário.&lt;/p&gt;

&lt;p&gt;A chave para o sucesso é a colaboração entre todas as partes interessadas e a adoção de um ciclo de feedback contínuo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conheça os meus outros posts sobre SRE
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/contribuicoes-de-uma-equipe-de-sre-no-ciclo-de-vida-de-um-servico-l6k"&gt;Contribuições de uma equipe de SRE no ciclo de vida de um serviço&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/modelos-de-engajamentos-de-um-sre-com-um-grupo-de-trabalho-11b2"&gt;Modelos de engajamentos de um SRE com um grupo de trabalho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/compromissos-de-um-sre-em-um-grupo-de-trabalho-1m8f"&gt;Compromissos de um SRE em um grupo de trabalho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/razoes-para-monitorar-um-sistema-3jbo"&gt;Razões para monitorar um sistema&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>sre</category>
      <category>devops</category>
      <category>cloud</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Contribuições de uma equipe de SRE no ciclo de vida de um serviço</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sat, 05 Aug 2023 14:38:16 +0000</pubDate>
      <link>https://dev.to/rafaelonline/contribuicoes-de-uma-equipe-de-sre-no-ciclo-de-vida-de-um-servico-l6k</link>
      <guid>https://dev.to/rafaelonline/contribuicoes-de-uma-equipe-de-sre-no-ciclo-de-vida-de-um-servico-l6k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante&lt;/strong&gt;: o texto a seguir é fruto de um exercício de criação de um time de SRE, onde os times de desenvolvedores seriam os responsáveis por criar e manter a infraestrutura e aplicações.&lt;br&gt;
Não existe um modelo certo ou errado, nem considere esse texto como uma verdade absoluta.&lt;br&gt;
 Boa parte desse material foi baseado nos livros: &lt;a href="https://sre.google/workbook/table-of-contents/" rel="noopener noreferrer"&gt;The Site Reliability Workbook&lt;/a&gt; e &lt;a href="https://sre.google/sre-book/table-of-contents/" rel="noopener noreferrer"&gt;Site Reliability Engineering&lt;/a&gt;. Você poderá encontrar frases ou partes do livros, nesse texto e nos outros.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nos posts anteriores abordei um pouco sobre os:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/compromissos-de-um-sre-em-um-grupo-de-trabalho-1m8f"&gt;Compromissos de um SRE com um grupo de trabalho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/modelos-de-engajamentos-de-um-sre-com-um-grupo-de-trabalho-11b2"&gt;Modelos de engajamentos de um SRE com um grupo de trabalho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/rafaelonline/confiabilidade-um-dos-recursos-mais-importantes-de-um-sistema-2pad"&gt;Confiabilidade: um dos recursos mais importantes de um sistema&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nesse post vamos ver como as contribuições de uma equipe de SRE, podem acontecer em várias fases do ciclo de vida de um serviço.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fase 1: Arquitetura e Design
&lt;/h2&gt;

&lt;p&gt;Como o SRE pode influenciar a arquitetura e o design de um sistema:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criação de práticas recomendadas, como resiliência a vários pontos únicos de falha&lt;/li&gt;
&lt;li&gt;Documentar prós e contras de um determinado sistema/infra, para que os desenvolvedores possam escolher com sabedoria&lt;/li&gt;
&lt;li&gt;Apoio a discussões para escolha de arquiteturas e design ajuda na validação de suposições e PoC&lt;/li&gt;
&lt;li&gt;Atuar junto com a equipe de desenvolvimento, participando do trabalho de desenvolvimento&lt;/li&gt;
&lt;li&gt;Co-projetando parte do serviço&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;O envolvimento precoce do SRE pode ajudar a evitar reformulações dispendiosas.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Fase 2: Desenvolvimento Ativo
&lt;/h2&gt;

&lt;p&gt;Nessa fase começa a produtização do serviço, para que possa ser liberado para produção. A produtização normalmente inclui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planejamento de capacidade&lt;/li&gt;
&lt;li&gt;Configuração de recursos extras para redundância&lt;/li&gt;
&lt;li&gt;Implementação de infraestrutura extra&lt;/li&gt;
&lt;li&gt;Planejamento para picos e sobrecargas&lt;/li&gt;
&lt;li&gt;Implementação de monitoramentos e alertas&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fase 3: Disponibilidade limitada
&lt;/h2&gt;

&lt;p&gt;Nessa fase o SRE pode ajudar a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Medir e avaliar a confiabilidade. &lt;/li&gt;
&lt;li&gt;Dimensionar o sistema criando um modelo de capacidade&lt;/li&gt;
&lt;li&gt;Garantir uma cobertura de monitoramento adequada&lt;/li&gt;
&lt;li&gt;Ajudar a criar alertas que correspondam idealmente aos próximos SLOs de serviço.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recomendável que sejam definidos os SLOs nesse ponto, para que se tenha uma medida objetiva de quão confiável é o serviço.&lt;/strong&gt; &lt;br&gt;
A equipe de produto ainda tem a opção de retirar um produto que não pode atingir sua confiabilidade alvo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fase 4: Disponibilidade geral
&lt;/h2&gt;

&lt;p&gt;Nessa fase o serviço já passou pelo PRR (Revisão de Prontidão da Produção) ou deverá passar.&lt;/p&gt;

&lt;p&gt;Os objetivos da PRR são os seguintes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verifica se um serviço atende aos padrões aceitos de configuração de produção e prontidão operacional&lt;/li&gt;
&lt;li&gt;Melhorar a confiabilidade do serviço de forma que minimize o número e a gravidade dos incidentes que podem ser esperados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A equipe de desenvolvedores deve continuar colocando em campo uma pequena parte de todo o trabalho operacional e de resposta a incidentes para que eles não percam a perspectiva sobre esses aspectos do serviço.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fase 5: Fim de suporte
&lt;/h2&gt;

&lt;p&gt;Não há mais usuários e o serviço foi desligado. O SRE pode ajudar a excluir referências ao serviço nas configurações de produção e na documentação, caso exista algum bloqueio.&lt;/p&gt;

</description>
      <category>sre</category>
      <category>devops</category>
    </item>
    <item>
      <title>Confiabilidade: um dos recursos mais importantes de um sistema</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sat, 15 Jul 2023 19:28:02 +0000</pubDate>
      <link>https://dev.to/rafaelonline/confiabilidade-um-dos-recursos-mais-importantes-de-um-sistema-2pad</link>
      <guid>https://dev.to/rafaelonline/confiabilidade-um-dos-recursos-mais-importantes-de-um-sistema-2pad</guid>
      <description>&lt;h2&gt;
  
  
  Definição de confiabilidade
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;qualidade do que é confiável;&lt;br&gt;
capacidade de uma unidade funcional desempenhar, sem falhas ou avarias, dada tarefa sob certas condições e dentro de um período determinado.&lt;br&gt;
(Definições de Oxford Languages)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A confiabilidade é a característica mais importante de qualquer sistema
&lt;/h2&gt;

&lt;p&gt;Desde que tenhamos cuidado para mostrar que a confiabilidade abrange uma grande área, as pessoas não discordam muito desta frase.&lt;/p&gt;

&lt;p&gt;Alguns argumentos simples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se um sistema não for confiável, os usuários não confiarão nele (simples assim).&lt;/li&gt;
&lt;li&gt;Se os usuários não confiarem em um sistema, quando tiverem escolha, eles não o usarão.&lt;/li&gt;
&lt;li&gt;Se um sistema não tem usuários, esse sistema não vale de nada.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Os usuários, não seu monitoramento, decidem sua confiabilidade
&lt;/h2&gt;

&lt;p&gt;Você é o que você mede, então escolha suas métricas com cuidado.&lt;/p&gt;

&lt;p&gt;Seu monitoramento, registros e alertas são valiosos apenas na medida em que ajudam você a perceber problemas antes que seus clientes o façam.&lt;/p&gt;

&lt;p&gt;Dizer que tudo parece bem não fará seus usuários mais felizes. Se eles estão experimentando seu sistema como instável, será disso que eles lembrarão na a hora de escolher entre você e seu concorrente, usar ou não seu sistema.&lt;/p&gt;

&lt;p&gt;O valor de qualquer sistema está relacionado com seus usuários. Sendo assim, no fim, a medida de confiabilidade que importa é como os usuários estão experimentando a confiabilidade.&lt;/p&gt;

</description>
      <category>sre</category>
      <category>devops</category>
    </item>
    <item>
      <title>Modelos de engajamentos de um SRE com um grupo de trabalho</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sat, 08 Jul 2023 19:33:24 +0000</pubDate>
      <link>https://dev.to/rafaelonline/modelos-de-engajamentos-de-um-sre-com-um-grupo-de-trabalho-11b2</link>
      <guid>https://dev.to/rafaelonline/modelos-de-engajamentos-de-um-sre-com-um-grupo-de-trabalho-11b2</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante&lt;/strong&gt;: o texto a seguir é fruto de um exercício de criação de um time de SRE, onde os times de desenvolvedores seriam os responsáveis por criar e manter a infraestrutura e aplicações.&lt;br&gt;
Não existe um modelo certo ou errado, nem considere esse texto como uma verdade absoluta.&lt;br&gt;
 Boa parte desse material foi baseado nos livros: &lt;a href="https://sre.google/workbook/table-of-contents/" rel="noopener noreferrer"&gt;The Site Reliability Workbook&lt;/a&gt; e &lt;a href="https://sre.google/sre-book/table-of-contents/" rel="noopener noreferrer"&gt;Site Reliability Engineering&lt;/a&gt;. Você poderá encontrar frases ou partes do livros, nesse texto e nos outros.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No post anterior abordei um pouco sobre os &lt;a href="https://dev.to/rafaelonline/compromissos-de-um-sre-em-um-grupo-de-trabalho-1m8f"&gt;Compromissos de um SRE com um grupo de trabalho&lt;/a&gt;. Nesse abordarei algumas formas que um time de SRE poderia se envolver com as equipes de desenvolvimento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os Modelos de Engajamento SRE
&lt;/h2&gt;

&lt;p&gt;Os SREs podem trabalham com equipes de desenvolvimento de produtos de acordo com os seguintes modelos de envolvimento diferentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Part Time, em projetos pontuais e/ou de forma temporária&lt;/li&gt;
&lt;li&gt;  Full time, com dedicação quase exclusiva e permanente&lt;/li&gt;
&lt;li&gt;  Suporte alternativo&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Part Time em projetos pontuais e/ou de forma temporária
&lt;/h3&gt;

&lt;p&gt;Os SREs junto com as lideranças avaliam a importância do serviço e a disponibilidade da equipe SRE. Se o serviço necessita do suporte e ambos concordam com os níveis de pessoal para facilitar esse suporte, um envolvimento Part Time é estabelecido.&lt;/p&gt;

&lt;p&gt;A etapa inicial do envolvimento do SRE é a &lt;strong&gt;Revisão de Prontidão de Produção (PRR)&lt;/strong&gt;, um processo que identifica as necessidades de confiabilidade de um serviço.&lt;/p&gt;

&lt;p&gt;Os objetivos da PRR são os seguintes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avaliar a maturidade da equipe em relação às práticas de SRE;&lt;/li&gt;
&lt;li&gt;Verificar se um serviço atende aos padrões aceitos de configuração de produção e prontidão operacional;&lt;/li&gt;
&lt;li&gt;Melhorar a confiabilidade do serviço na produção e minimizar o número e a gravidade dos incidentes que podem ser esperados.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O modelo de PRR segue as seguintes fases:&lt;/p&gt;

&lt;h4&gt;
  
  
  Avaliação
&lt;/h4&gt;

&lt;p&gt;A avaliação é o primeiro segmento do trabalho. Durante esta fase, os revisores do SRE aprendem sobre o serviço e começam a analisá-lo em busca de deficiências de produção. &lt;/p&gt;

&lt;p&gt;Visam aferir a maturidade do serviço ao longo dos vários eixos de preocupação da engenharia de confiabilidade. Eles também examinam o design e a implementação do serviço para verificar se ele segue as práticas recomendadas de produção.&lt;/p&gt;

&lt;p&gt;É utilizado um &lt;strong&gt;Guia de Produção&lt;/strong&gt;, que consiste em uma lista de verificação específica para o serviço e geralmente é baseada em conhecimento e experiência com sistemas relacionados ou semelhantes e com as melhores práticas.&lt;/p&gt;

&lt;p&gt;A equipe SRE também pode consultar outras equipes que tenham mais experiência com determinados componentes ou dependências do serviço, como times de arquitetura e produtos. &lt;/p&gt;

&lt;h4&gt;
  
  
  Melhorias e Refatoração
&lt;/h4&gt;

&lt;p&gt;A fase de Avaliação leva à identificação das melhorias recomendadas para o serviço. Esta próxima fase procede da seguinte forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As melhorias são priorizadas com base na importância para a confiabilidade do serviço;&lt;/li&gt;
&lt;li&gt;As prioridades são discutidas e negociadas com a equipe de desenvolvimento (negócio e produto também podem ser envolvidos), e um plano de execução é acordado;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A equipe de SRE e de desenvolvimento participam e ajudam umas às outras na refatoração de partes do serviço ou na implementação de recursos adicionais.&lt;/p&gt;

&lt;p&gt;Esta fase normalmente varia em duração e quantidade de esforço. A quantidade de tempo e esforço depende da disponibilidade de tempo de engenharia para refatoração, da maturidade e complexidade do serviço.&lt;/p&gt;

&lt;h4&gt;
  
  
  Terminando o envolvimento
&lt;/h4&gt;

&lt;p&gt;O envolvimento do SRE, nesse modelo, não é indefinido. O trabalho dos SREs deve gerar impacto e valor. Alguns motivos que podem levar ao fim do envolvimento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O serviço ter sido otimizado para um nível em que não é mais necessário o envolvimento ou um marco é atingido;&lt;/li&gt;
&lt;li&gt;A importância ou relevância do serviço diminuir.&lt;/li&gt;
&lt;li&gt;Fim do ciclo de vida do serviço.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Depois que o trabalho termina e a equipe de desenvolvimento está atuando por conta própria, realizamos a avaliação novamente para medir o valor que foi agregado pelo time de SRE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Full time, com dedicação quase exclusiva
&lt;/h2&gt;

&lt;p&gt;No modelo Part time, nem todas as equipes irão se beneficiar do envolvimento direto da equipe de SRE. O Suporte alternativo também nem sempre se mostra viável.&lt;/p&gt;

&lt;p&gt;Alguns fatores são levados em conta:&lt;/p&gt;

&lt;p&gt;Capacidade de atendimento da equipe de SRE&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Falta de conhecimento e maturidade do time de desenvolvimento;&lt;/li&gt;
&lt;li&gt;Alta demanda de correções necessárias no ambiente, novas funcionalidades e adoção de tecnologias emergentes na empresa;&lt;/li&gt;
&lt;li&gt;Devido às altas demandas, os times são obrigados a priorizar as entregas de negócios ao invés dos aspectos de confiabilidade, qualidade e resiliência.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Levando em consideração os pontos acima, um outro envolvimento é proposto: Full Time, com dedicação quase exclusiva.&lt;/p&gt;

&lt;p&gt;Esse envolvimento tem com objetivo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ter um (ou mais) integrante do time de SRE como responsável por atender dois ou três times relacionadas da empresa. Essa pessoa será responsável por: &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Suprir gaps de conhecimentos;&lt;/li&gt;
&lt;li&gt;Ajudar a fornecer foco e tempo para aliviar algum fardo das equipes de desenvolvimento;&lt;/li&gt;
&lt;li&gt;Envolvimento precoce em todo ciclo de vida da aplicação;&lt;/li&gt;
&lt;li&gt;Aplicar o Guia de Produção.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Os SREs não deverão atuar de forma isolada nos times, um elemento central será responsável por direcionar os objetivos e as ações com base nas necessidades comuns da empresa ou grupo de trabalho (por exemplo: reduzir tempo de incidente), respeitando sempre a necessidade do time, bem como ser um facilitador e gerador de evolução.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Suporte alternativo
&lt;/h3&gt;

&lt;p&gt;Nem todos os serviços recebem um envolvimento próximo do SRE. Alguns fatores podem ser levados em conta aqui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nem sempre os serviços precisam de alta confiabilidade e disponibilidade, portanto, o suporte pode ser fornecido por outros meios.&lt;/li&gt;
&lt;li&gt;O número de equipes de desenvolvimento que solicitam suporte SRE excede a capacidade disponível das equipes SRE&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando o SRE não pode fornecer suporte completo, ele fornece outras opções para fazer melhorias na produção, como documentações e consultorias.&lt;/p&gt;

&lt;h4&gt;
  
  
  Documentação
&lt;/h4&gt;

&lt;p&gt;Guias de desenvolvimento e configurações estão disponíveis para tecnologias internas e de sistemas amplamente utilizados. O Guia de Produção documenta as práticas recomendadas de produção para serviços, conforme determinado pelas experiências dos SRE e equipes demais equipes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Consultoria
&lt;/h4&gt;

&lt;p&gt;Os desenvolvedores também podem procurar a consultoria da equipe de SRE para discutir serviços específicos ou áreas problemáticas. A equipe de desenvolvimento leva até o time de SRE os pontos que precisam de atenção e então é realizada uma discussão sobre padrões conhecidos ou soluções que podem ser incorporadas para melhorar o serviço em produção. Porém não é estabelecido um envolvimento.&lt;/p&gt;

</description>
      <category>sre</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Compromissos de um SRE em um grupo de trabalho</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sun, 02 Jul 2023 16:04:07 +0000</pubDate>
      <link>https://dev.to/rafaelonline/compromissos-de-um-sre-em-um-grupo-de-trabalho-1m8f</link>
      <guid>https://dev.to/rafaelonline/compromissos-de-um-sre-em-um-grupo-de-trabalho-1m8f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Importante&lt;/strong&gt;: o texto a seguir é fruto de um exercício de criação de um time de SRE, onde os times de desenvolvedores seriam os responsáveis por criar e manter a infraestrutura e aplicações.&lt;br&gt;
Não existe um modelo certo ou errado, nem considere esse texto como uma verdade absoluta.&lt;br&gt;
 Boa parte desse material foi baseado nos livros: &lt;a href="https://sre.google/workbook/table-of-contents/" rel="noopener noreferrer"&gt;The Site Reliability Workbook&lt;/a&gt; e &lt;a href="https://sre.google/sre-book/table-of-contents/" rel="noopener noreferrer"&gt;Site Reliability Engineering&lt;/a&gt;. Você poderá encontrar frases ou partes do livros, nesse texto e nos outros.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Compromissos com os times
&lt;/h2&gt;

&lt;p&gt;A principal missão da função de SRE no grupo de Squads é capacitar as equipes de desenvolvimento de produtos com ferramentas e processos para maximizar a confiabilidade e a resiliência das aplicações que suportam o ecossistema desses produtos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compartilhando as expectativas
&lt;/h3&gt;

&lt;p&gt;Definir as expectativas certas é fundamental para cumprir os prazos e a conclusão da tarefa. Para isso, trabalhamos de acordo com os seguintes princípios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Enfatizamos que os proprietários das aplicações, não os SREs, são diretamente responsáveis por fazer alterações em um aplicativo.&lt;/li&gt;
&lt;li&gt;  O envolvimento com a equipe de SRE é para benefício de todas as Squads. Qualquer nova automação ou ferramental deve melhorar as ferramentas comuns e as automações usadas em todo grupo e evitando o desenvolvimento de soluções únicas&lt;/li&gt;
&lt;li&gt;  Os SREs devem dar à equipe de desenvolvedores um alerta sobre quaisquer novos processos que a empresa possa introduzir.&lt;/li&gt;
&lt;li&gt;  As mudanças propostas devem ser priorizadas conjuntamente pelos desenvolvedores e pelos SREs. Os desenvolvedores devem comprometer-se a dedicar uma porcentagem razoável de tempo de engenharia para corrigir e prevenir os pontos que estão quebrando a confiabilidade.&lt;/li&gt;
&lt;li&gt;  Os SREs não são engenheiros de operações tradicionais. Os proprietários das aplicações são responsáveis por desenvolver e suportar suas aplicações.&lt;/li&gt;
&lt;li&gt;  Parte do trabalho de SRE se concentra na entrega de ferramentas: para monitoramento, alertas, implementações, melhores práticas e listas de verificação.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Preocupações gerais
&lt;/h3&gt;

&lt;p&gt;O SRE se preocupa com vários aspectos de um serviço, dentre esses aspectos podemos destacar os seguintes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Instrumentação, métricas e monitoramento&lt;/li&gt;
&lt;li&gt;  Resposta de emergência&lt;/li&gt;
&lt;li&gt;  Planejamento de capacidade&lt;/li&gt;
&lt;li&gt;  Desempenho: disponibilidade, latência e eficiência&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Definindo o envolvimento
&lt;/h3&gt;

&lt;p&gt;Os SREs podem trabalham com equipes de desenvolvimento de produtos de acordo com os seguintes modelos de envolvimento diferentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Part Time, em projetos pontuais e/ou de forma temporária&lt;/li&gt;
&lt;li&gt;  Full time, com dedicação quase exclusiva&lt;/li&gt;
&lt;li&gt;  Suporte alternativo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando as equipes abordam os SREs para obter envolvimento, um dos fatores que é considerado ao priorizar uma solicitação é se um compromisso conjunto pode ajudar a reduzir a lista de pendências das Squads.&lt;/p&gt;

&lt;p&gt;Confira os &lt;a href="https://dev.to/rafaelonline/modelos-de-engajamentos-de-um-sre-com-um-grupo-de-trabalho-11b2"&gt;Modelos de engajamentos de um SRE com um grupo de trabalho&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sre</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>Explorando o Limit Range no Kubernetes para gerenciar recursos</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sun, 21 May 2023 11:31:54 +0000</pubDate>
      <link>https://dev.to/rafaelonline/explorando-o-limit-range-no-kubernetes-para-gerenciar-recursos-4i6</link>
      <guid>https://dev.to/rafaelonline/explorando-o-limit-range-no-kubernetes-para-gerenciar-recursos-4i6</guid>
      <description>&lt;h2&gt;
  
  
  Introdução:
&lt;/h2&gt;

&lt;p&gt;Uma das principais preocupações no ambiente Kubernetes é o gerenciamento eficiente dos recursos computacionais disponíveis. Nesse sentido, o Kubernetes oferece o conceito de Limit Range, que permite aos administradores definir limites e solicitações de recursos para os contêineres em um cluster. Abaixo, exploraremos o uso do Limit Range e forneceremos um exemplo prático para ilustrar seu funcionamento.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o Limit Range:
&lt;/h2&gt;

&lt;p&gt;O Limit Range é um objeto do Kubernetes que permite aos administradores definir políticas de limites e solicitações de recursos para pods em um namespace específico. Ele fornece uma maneira de garantir que os contêineres tenham acesso aos recursos necessários e impõe restrições para evitar o uso excessivo de recursos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemplo de utilização do Limit Range:
&lt;/h2&gt;

&lt;p&gt;Suponha que temos um namespace chamado "my-app" e desejamos definir limites de CPU e memória, e também adicionamos os valores mínimos e máximos para CPU e memória para os contêineres executados nesse namespace. Podemos criar um arquivo YAML contendo a definição do Limit Range da seguinte maneira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;LimitRange&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;resource-limits&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;default&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;500m&lt;/span&gt;
      &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;512Mi&lt;/span&gt;
    &lt;span class="na"&gt;defaultRequest&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;200m&lt;/span&gt;
      &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;256Mi&lt;/span&gt;
    &lt;span class="na"&gt;min&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;100m&lt;/span&gt;
      &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;128Mi&lt;/span&gt;
    &lt;span class="na"&gt;max&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
      &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1Gi&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Container&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima, definimos os limites e as solicitações de recursos para os contêineres do namespace "my-app". &lt;/p&gt;

&lt;p&gt;O limite padrão máximo de CPU é de 500 milicores, enquanto "512Mi" define o limite padrão máximo de memória. As solicitações de recursos padrão são definidas pelos valores "200m" para CPU e "256Mi" para memória. Esses valores serão usados como padrão caso nenhum limite ou solicitação específica seja definido para um contêiner individual.&lt;/p&gt;

&lt;p&gt;Além de definir os limites padrão e as solicitações de recursos, também adicionamos os valores mínimos e máximos para CPU e memória.&lt;/p&gt;

&lt;p&gt;O limite mínimo de CPU é de 100 milicores, enquanto "128Mi" define o limite mínimo de memória. Por outro lado, os valores "1" para CPU e "1Gi" para memória estabelecem o limite máximo permitido para esses recursos.&lt;/p&gt;

&lt;p&gt;Esses valores mínimos e máximos ajudam a controlar e garantir que os contêineres estejam dentro de intervalos aceitáveis de uso de recursos. Com essa definição, os administradores podem evitar que um contêiner utilize muito poucos recursos, o que pode prejudicar o desempenho do aplicativo, ou que um contêiner monopolize uma quantidade excessiva de recursos, prejudicando outros componentes do cluster.&lt;/p&gt;

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

&lt;p&gt;O uso do Limit Range é uma prática recomendada para garantir o uso eficiente dos recursos em um cluster. Ele permite aos administradores definir limites e solicitações de recursos de maneira granular, controlando o consumo e evitando problemas de alocação inadequada. Ao aplicar políticas adequadas de Limit Range, é possível otimizar o desempenho dos aplicativos e evitar gargalos de recursos em ambientes de produção.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saiba mais:
&lt;/h2&gt;

&lt;p&gt;Link para a documentação oficial do Kubernetes sobre Limit Ranges:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Documentação oficial do Kubernetes sobre Limit Ranges:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/concepts/policy/limit-range/" rel="noopener noreferrer"&gt;Limit Ranges&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>kubernetes</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
    <item>
      <title>Razões para monitorar um sistema</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Mon, 17 Apr 2023 19:21:28 +0000</pubDate>
      <link>https://dev.to/rafaelonline/razoes-para-monitorar-um-sistema-3jbo</link>
      <guid>https://dev.to/rafaelonline/razoes-para-monitorar-um-sistema-3jbo</guid>
      <description>&lt;h2&gt;
  
  
  Por que Monitorar?
&lt;/h2&gt;

&lt;p&gt;Algumas razões porquê você deve monitorar um sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analisar tendências de longo prazo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Qual o tamanho do meu storage e em quanto tempo estará cheio? Qual a taxa de crescimento de acessos ao meu site?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Comparações ao longo do tempo ou grupos de experimentos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Minhas consultas são mais rápidas usando o banco XPTO ou o Banco XYZ? Minha aplicação está mais lenta do que na semana passada?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Gerar Alertas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Algo parou de funcionar e precisa ser consertado. Ou algo está preste a parar de funcionar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Criar dashboards
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Os dashboards devem responder a perguntas básica sobre o estado do serviço. Normalmente abordam os quatro sinais de ouro (golden signals)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Realizar um debugging
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A latência de um serviço aumentou muito. O que mais estava ocorrendo no momento do evento?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O monitoramento também é útil para fornecer informações brutas sobre análises de negócios. Junto com os alertas permite que um sistema nos diga quando algo está quebrado, ou nos diga o que está prestes a quebrar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Os Quatro Sinais de Ouro
&lt;/h2&gt;

&lt;p&gt;Os quatro sinais de ouro do monitoramento são: latência, tráfego, erros e saturação.&lt;/p&gt;

&lt;h3&gt;
  
  
  Latência
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;O tempo que se leva para atender a uma solicitação. Importante separar a latência das solicitações bem sucedidas, das solicitações com falha.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tráfego
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Medida de quanta demanda está sendo colocada em seu sistema (quantidade de transações, requisições, execuções...)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Erros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Taxa de solicitações que apresentaram falha (erros 4xx/5xx, timeout...)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Saturação
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Uma medida da fração do sistema, enfatizando os recursos que são mais restritos. Exemplo, em um sistema com restrição de memória, mostrar a medição da memória.&lt;/li&gt;
&lt;li&gt;Quanto tráfego/processamento seu sistema pode lidar, antes de começar a apresentar degradação?&lt;/li&gt;
&lt;li&gt;As previsões de saturação iminente (espaço em disco, por exemplo) também são preocupações desse ponto.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Medir os quatros sinais dourados e gerar alertas quando um sinal apresentar problemas (ou quase problema), faz com que seu serviço esteja minimamente coberto pelo monitoramento.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Esse texto foi adaptado do capitulo 6 - &lt;a href="https://sre.google/sre-book/monitoring-distributed-systems/" rel="noopener noreferrer"&gt;Monitoring Distributed Systems - do livro&lt;/a&gt; - do livro Site Reliability Engineering&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Conheça também as metodologias RED e USE: &lt;a href="https://thenewstack.io/?p=22690467" rel="noopener noreferrer"&gt;Monitoring Methodologies: RED and USE&lt;/a&gt;&lt;/p&gt;

</description>
      <category>monitoring</category>
      <category>sre</category>
    </item>
    <item>
      <title>Gerenciando APIs obsoletas do Kubernetes com Pluto</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sun, 12 Mar 2023 20:01:33 +0000</pubDate>
      <link>https://dev.to/rafaelonline/gerenciando-apis-obsoletas-do-kubernetes-com-pluto-4am7</link>
      <guid>https://dev.to/rafaelonline/gerenciando-apis-obsoletas-do-kubernetes-com-pluto-4am7</guid>
      <description>&lt;h2&gt;
  
  
  O que é o Pluto
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/FairwindsOps/pluto" rel="noopener noreferrer"&gt;&lt;strong&gt;Pluto&lt;/strong&gt;&lt;/a&gt; é uma ferramenta desenvolvida pela &lt;a href="https://www.fairwinds.com/" rel="noopener noreferrer"&gt;FairwindsOps&lt;/a&gt; que ajuda na detecção de &lt;a href="https://kubernetes.io/docs/reference/using-api/deprecation-guide/" rel="noopener noreferrer"&gt;APIs obsoletas do Kubernetes &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mas antes de falarmos da ferramenta, vamos entender um pouco sobre as &lt;a href="https://kubernetes.io/docs/reference/using-api/api-concepts/" rel="noopener noreferrer"&gt;APIs do Kubernetes&lt;/a&gt; e porque devemos nos preocupar com elas.&lt;/p&gt;

&lt;h2&gt;
  
  
  As APIs do Kubernetes
&lt;/h2&gt;

&lt;p&gt;As APIs são a forma que podemos interagir com o cluster. Podemos então manipular e consultar os objetos (Pod, deployment...) através delas. Normalmente utilizamos o &lt;a href="https://kubernetes.io/docs/reference/kubectl/" rel="noopener noreferrer"&gt;kubectl&lt;/a&gt; para acessar as APIs, mas também é possível através de chamadas REST.&lt;/p&gt;

&lt;h3&gt;
  
  
  Substituições ou remoções das APIs do Kubernetes
&lt;/h3&gt;

&lt;p&gt;O Kubernetes está em constante evolução, sendo assim, alguns recursos novos são adicionados e outros precisam ser removidos, o mesmo acontece para as APIs.&lt;/p&gt;

&lt;p&gt;Como resultado, as APIs antigas são depreciadas e eventualmente removidas, a depreciação, nesse contexto, significa marcar uma API para eventual remoção.&lt;/p&gt;

&lt;p&gt;Para saber mais como o Kubernetes deprecia suas APIs veja na documentação da &lt;a href="https://kubernetes.io/docs/reference/using-api/deprecation-policy/" rel="noopener noreferrer"&gt;política de reprovação do Kubernetes&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Porque me preocupar com APIs obsoletas
&lt;/h3&gt;

&lt;p&gt;Ao definir uma configuração de Deployment, você especifica a versão da API (&lt;code&gt;apiVersion&lt;/code&gt;) do objeto Kubernetes a ser usado.&lt;/p&gt;

&lt;p&gt;Se você atualizar seu cluster, há chances de encontrar APIs do Kubernetes depreciadas se a versão para a qual você atualizou não oferecer suporte a elas.&lt;/p&gt;

&lt;p&gt;Nesse caso, provavelmente, seu Deployment pode não funcionar se a API depreciada tiver sido removida na nova versão do cluster.&lt;/p&gt;

&lt;p&gt;Para saber todas as APIs depreciadas e/ou removidas veja no &lt;a href="https://kubernetes.io/docs/reference/using-api/deprecation-guide/" rel="noopener noreferrer"&gt;guia de depreciação&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Também é possível verificar todos os grupos de API suportados na sua versão através do comando &lt;code&gt;kubectl api-versions&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O desafio é como verificar quais APIs estão depreciadas e quais, de todos os recursos em execução no cluster, estão sendo utilizadas. &lt;strong&gt;Nesse ponto que o Pluto entra para nos ajudar.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Características do Pluto
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ele lista todas as APIs que foram depreciadas ou removidas, não apenas do Kubernetes, mas também para outras ferramentas como Istio e CertManager.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detecta APIs depreciadas a partir de arquivos de configuração, helm instalados e/ou em todos os resources do cluster.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Também é possível utilizar num Workflow do Github Actions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como instalar
&lt;/h3&gt;

&lt;p&gt;Você pode instalar em sua estação &lt;a href="https://github.com/FairwindsOps/pluto/releases" rel="noopener noreferrer"&gt;baixando a versão apropriada&lt;/a&gt; para seu sistema.&lt;/p&gt;

&lt;p&gt;O Pluto possui versão para Windows, Linux e MacOs.&lt;/p&gt;

&lt;p&gt;Exemplo de instalação no MacOs:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;wget https://github.com/FairwindsOps/pluto/releases/download/v5.15.1/pluto_5.15.1_darwin_amd64.tar.gz -O /tmp/pluto_5.15.1_darwin_amd64.tar.gz&lt;br&gt;
tar -zxvf /tmp/pluto_5.15.1_darwin_amd64.tar.gz&lt;br&gt;
chmod +x /tmp/pluto&lt;br&gt;
cp /tmp/pluto /usr/local/bin&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Exemplo de uso
&lt;/h3&gt;

&lt;p&gt;Usando o comando &lt;code&gt;pluto detect-all-in-cluster&lt;/code&gt; em um cluster que roda na versão 1.21 do Kubernetes, podemos ver que temos o recurso &lt;code&gt;HPA Operator&lt;/code&gt; em uma versão que será removida na próxima versão do Kubernetes.&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%2Fvxi7s4v5s9uexcwhbo22.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%2Fvxi7s4v5s9uexcwhbo22.png" alt="saida do comando detect all" width="800" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como a instalação dele foi através de um Helm, vemos o mesmo através do comando &lt;code&gt;pluto detect-helm&lt;/code&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%2F8zctfufzj1qypj0grqa1.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%2F8zctfufzj1qypj0grqa1.png" alt="saida do comando detect helm" width="800" height="68"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O comando &lt;code&gt;pluto -h&lt;/code&gt; lista todos os comando disponíveis.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>tutorial</category>
      <category>k8s</category>
      <category>sre</category>
    </item>
    <item>
      <title>Eventos orientados com Amazon EventBridge</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sun, 26 Feb 2023 23:01:23 +0000</pubDate>
      <link>https://dev.to/rafaelonline/eventos-orientados-com-amazon-eventbridge-1185</link>
      <guid>https://dev.to/rafaelonline/eventos-orientados-com-amazon-eventbridge-1185</guid>
      <description>&lt;h2&gt;
  
  
  Sobre arquiteturas orientadas a eventos
&lt;/h2&gt;

&lt;p&gt;As arquiteturas orientadas a eventos (Event-Driven) são caracterizadas por serviços que se comunicam de forma assíncrona e desacoplado através de eventos.&lt;/p&gt;

&lt;p&gt;Os serviços transmitirão eventos (Produtores) que serão consumidos e reagidos por outros serviços (Consumidores).&lt;/p&gt;

&lt;p&gt;Uma característica que marca uma Arquitetura orientadas a eventos é que: Produtores e Consumidores estão completamente dissociados, um produtor não deve saber ou se importar com quem está consumindo seus eventos.&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%2Fs8zblbucxrr1dtmtdyko.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%2Fs8zblbucxrr1dtmtdyko.png" alt="fluxo de uma arquitetura orientada a eventos" width="800" height="266"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Descrição da imagem: Representação o fluxo de uma arquitetura orientada a eventos, do lado esquerdo três retângulos representam os produtores, no meio um retângulo maior representa o roteador e a direita doisretângulos representam os consumidores&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  O que seria o Amazon EventBridge?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;O &lt;a href="https://docs.aws.amazon.com/pt_br/eventbridge/latest/userguide/eb-what-is.html" rel="noopener noreferrer"&gt;Amazon EventBridge&lt;/a&gt; é um serviço que oferece acesso em tempo real a alterações de dados em serviços da AWS, em suas aplicações e em aplicações de software como serviço (SaaS) sem precisar escrever código. Para começar, você pode escolher uma origem de eventos no console do EventBridge. Em seguida, pode selecionar um destino entre os serviços da AWS, incluindo o AWS Lambda, o Amazon Simple Notification Service (SNS) e o Amazon Kinesis Data Firehose. O EventBridge entregará automaticamente os eventos quase em tempo real.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Em resumo você pode receber, filtrar, transformar, rotear (dos Produtores) e entregar esses eventos a Consumidores.&lt;/p&gt;
&lt;h2&gt;
  
  
  Trabalhando com o Amazon EventBridge
&lt;/h2&gt;

&lt;p&gt;Para exemplificar o uso do Amazon EventBridge vamos utilizar um caso passei a pouco tempo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Toda vez que uma instancia de banco de dados, do &lt;a href="https://docs.aws.amazon.com/pt_br/AmazonRDS/latest/UserGuide/Welcome.html" rel="noopener noreferrer"&gt;AWS RDS&lt;/a&gt;, fosse criada queríamos que uma &lt;a href="https://docs.aws.amazon.com/pt_br/lambda/latest/dg/welcome.html" rel="noopener noreferrer"&gt;AWS Lambda&lt;/a&gt; foi executada para adicionar uma determinada tag a instancia.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Utilizaremos então a seguinte arquitetura:&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%2Fzni56gp7j5zta4ymrppq.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%2Fzni56gp7j5zta4ymrppq.png" alt="arquitetura de serviços utilizados" width="513" height="173"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Descrição da imagem: Diagrama representando os serviços utilizados, numerados de um a três&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Como &lt;strong&gt;Produtor&lt;/strong&gt; de eventos utilizaremos o &lt;em&gt;CloudTrail&lt;/em&gt;. &lt;/li&gt;
&lt;li&gt;Como &lt;strong&gt;Roteador&lt;/strong&gt;, que irá tratar os eventos, utilizaremos o &lt;em&gt;EventBridge&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Como &lt;strong&gt;Consumidor&lt;/strong&gt; desses eventos utilizaremos a &lt;em&gt;AWS Lambda&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;O repositório do Github &lt;a href="https://github.com/rafaelonline/eventbridge-lambda" rel="noopener noreferrer"&gt;rafaelonline/eventbridge-lambda&lt;/a&gt; possui um exemplo de configuração infraestrutura usando Terraform e o script Python utilizado.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Passo 1
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Pre-Requisito: É preciso que a conta possua um Trail configurado no CloudTrail, saiba como configurar em &lt;a href="https://docs.aws.amazon.com/pt_br/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html" rel="noopener noreferrer"&gt;Criar uma trilha para a sua conta da AWS&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O &lt;a href="https://docs.aws.amazon.com/pt_br/awscloudtrail/latest/userguide/cloudtrail-user-guide.html" rel="noopener noreferrer"&gt;CloudTrail&lt;/a&gt; gera eventos no formato JSON e possui integração nativa com o EventBridge. Ele será nosso Produtor de eventos.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O CloudTrail proporciona visibilidade sobre as atividades de usuários por meio do registro das ações executadas na sua conta. O CloudTrail registra informações importantes sobre cada ação, como quem fez a solicitação, quais serviços foram usados, quais ações foram executadas, quais os parâmetros da ação e quais elementos da resposta foram retornados pelo serviço da AWS&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Passo 2
&lt;/h3&gt;

&lt;p&gt;Agora devemos configurar uma regra no &lt;a href="https://docs.aws.amazon.com/pt_br/eventbridge/latest/userguide/eb-get-started.html" rel="noopener noreferrer"&gt;EventBridge Rules&lt;/a&gt; para monitorar os eventos desejados. &lt;/p&gt;

&lt;p&gt;No nosso caso o &lt;a href="https://docs.aws.amazon.com/pt_br/eventbridge/latest/userguide/eb-event-patterns.html" rel="noopener noreferrer"&gt;padrão de evento(event pattern)&lt;/a&gt; será a própria AWS tendo como origem o Cloudtrail e nele os eventos relacionados ao &lt;code&gt;rds.amazonaws.com&lt;/code&gt; com nome &lt;code&gt;CreateDBInstance&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Exemplo no console da AWS:&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%2Flaq42cmw1rwuuppr58cv.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%2Flaq42cmw1rwuuppr58cv.png" alt="Exemplo no console da AWS" width="800" height="807"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Descrição da imagem: Recorte contendo exemplo de configuração da regra no console da AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Exemplo de código Terraform para criação da regra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###### EVENTBRIDGE RULE - CREATED RDS INSTANCE ######
resource "aws_cloudwatch_event_rule" "rds_event_rule" {
  name          = "rule-rds-created"
  description   = "Triggers Lambda when new RDS instance are created"
  is_enabled    = true
  event_pattern = &amp;lt;&amp;lt;EOF
    {
    "source": ["aws.rds"],
    "detail-type": ["AWS API Call via CloudTrail"],
    "detail": {
        "eventSource" : ["rds.amazonaws.com"],
        "eventName": ["CreateDBInstance"]
    }
    }
  EOF
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 3
&lt;/h3&gt;

&lt;p&gt;Agora precisamos encaminhar nosso evento para o Consumidor (Alvo), que será uma Lambda.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Um &lt;a href="https://docs.aws.amazon.com/pt_br/eventbridge/latest/userguide/eb-targets.html" rel="noopener noreferrer"&gt;Alvo&lt;/a&gt; é um recurso ou endpoint que EventBridge envia um evento, quando esse evento corresponde ao padrão definido em uma regra. Essa regra processa os dados do evento e envia as informações pertinentes ao Alvo&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Podemos encaminhar esse mesmo evento para até cinco Alvos. &lt;br&gt;
Por exemplo (não abordado nesse tutorial), no caso que tive nós enviamos um e-mail através do AWS SNS informando que uma instancia RDS foi criada, além de executar a Lambda que adiciona a tag.&lt;/p&gt;

&lt;p&gt;Inclusive, podemos enviar o evento originalmente como foi gerado, enviar somente uma parte do evento, fazer alguma edição no evento antes de enviar e enviar um json de evento fixo.&lt;/p&gt;

&lt;p&gt;Exemplo no console da AWS:&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%2F50ipnofirkiqwik4fz35.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%2F50ipnofirkiqwik4fz35.png" alt="Exemplo no console da AWS" width="800" height="478"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Descrição da imagem: Recorte contendo exemplo de configuração do alvo no console da AWS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Exemplo de código Terraform para criação do Target:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###### EVENTBRIDGE TARGET - CREATED RDS INSTANCE ######
resource "aws_cloudwatch_event_target" "lambda_rule_rds" {
  depends_on = [aws_lambda_function.autotag]
  rule       = aws_cloudwatch_event_rule.rds_event_rule.name
  target_id  = "SendToLambda"
  arn        = aws_lambda_function.autotag.arn
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Passo 4
&lt;/h3&gt;

&lt;p&gt;Chegamos ao passo final que é termos o nosso Consumidor, para  nosso cenário criamos um script Python e uma Lambda para adicionar a Tag a instancia de RDS criada.&lt;/p&gt;

&lt;p&gt;Script Python que cria a Tag&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"""Add tags on RDS and Aurora."""
import logging
import os
import boto3
from botocore.exceptions import ClientError

# Config Logging.
log = logging.getLogger()
log.setLevel(logging.INFO)

def lambda_handler(event, context):
    """Add tags on RDS and Aurora"""

    # Define the tags to add to the RDS instance
    tag_key = os.environ.get('TAG_KEY')
    tag_value = os.environ.get('TAG_VALUE')
    tags = [
        {
            'Key': tag_key,
            'Value': tag_value
        }
    ]

    # Connect to RDS service
    rds = boto3.client('rds')
    event_name = event.get("detail").get("eventName")

    if event_name == "CreateDBCluster":
        aurora_arn = event.get("detail").get("responseElements").get("dBClusterArn")
    # Add tags to the Regional Cluster
        try:
            rds.add_tags_to_resource(
                ResourceName=aurora_arn,
                Tags=tags
            )
            log.info('Tag adicionda com sucesso ao Cluster Aurora: %s', aurora_arn)
        except ClientError as error:
            log.exception(error)

    else:
    # Add tags to the RDS instance
        rds_arn = event.get("detail").get("responseElements").get("dBInstanceArn")
        try:
            rds.add_tags_to_resource(
                ResourceName=rds_arn,
                Tags=tags
            )
            log.info('Tag adicionda com sucesso ao RDS: %s', rds_arn)
        except ClientError as error:
            log.exception(error)        
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo de código Terraform para criação Lambda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;###### GENERATE PACKAGE LAMBDA ###### 
data "archive_file" "lambda_autotag" {
  type        = "zip"
  source_dir  = "${path.module}/code/src"
  output_path = "${path.module}/code/lambda_package.zip"
}

###### LAMBDA FUNCTION ######
resource "aws_lambda_function" "autotag" {
  function_name    = var.autotag_function_name
  role             = aws_iam_role.lambda_exec_role.arn
  filename         = data.archive_file.lambda_autotag.output_path
  source_code_hash = data.archive_file.lambda_autotag.output_base64sha256
  description      = var.autotag_description
  publish          = true

  runtime       = "python3.8"
  handler       = "main.lambda_handler"
  timeout       = 300
  memory_size   = 128
  architectures = ["arm64"]

  environment {
    variables = {
      TAG_KEY   = var.lambda_tag_key
      TAG_VALUE = var.lambda_tag_value
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Obs.: É necessário ter uma IAM Role que permita adição de tags na instância RDS&lt;/p&gt;

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

&lt;p&gt;Através do Amazon EventBridge conseguimos que um evento de origem aciona-se outros eventos e executa-se uma automação. No nosso exemplo adicionamos uma tag, mas poderia ser qualquer outro processamento ou ação. &lt;/p&gt;

&lt;h2&gt;
  
  
  Saiba Mais
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.alexdebrie.com/posts/event-driven-vs-event-based/" rel="noopener noreferrer"&gt;Event-Driven Architectures vs. Event-Based Compute in Serverless Applications&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/pt_br/eventbridge/latest/userguide/eb-what-is.html" rel="noopener noreferrer"&gt;O que é a Amazon EventBridge?&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>eventdriven</category>
      <category>python</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Escolhendo o Worker Node - Kubernetes Instance Calculator</title>
      <dc:creator>Rafael Conceição</dc:creator>
      <pubDate>Sun, 21 Nov 2021 12:08:17 +0000</pubDate>
      <link>https://dev.to/rafaelonline/escolhendo-o-worker-node-kubernetes-instance-calculator-1j8a</link>
      <guid>https://dev.to/rafaelonline/escolhendo-o-worker-node-kubernetes-instance-calculator-1j8a</guid>
      <description>&lt;p&gt;Estabelecer quais tipos de servidores serão usados no cluster não é uma tarefa muito fácil, podemos errar a mão para baixo ou errar a mão para cima (bye $$$).&lt;/p&gt;

&lt;p&gt;Para nos ajudar nessa tarefa vou deixar abaixo dois links do &lt;a href="https://learnk8s.io/" rel="noopener noreferrer"&gt;learnk8s.io&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;primeiro&lt;/strong&gt; é um post em que eles abordam como escolher o tamanho de um Worker Node: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://learnk8s.io/kubernetes-node-size" rel="noopener noreferrer"&gt;Architecting Kubernetes clusters — choosing a worker node size (learnk8s.io)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;segundo&lt;/strong&gt; é um utilitário web para ajudar a escolher o melhor tipo de instância para seu cenário, com base no workload que você irá informar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learnk8s.io/kubernetes-instance-calculator" rel="noopener noreferrer"&gt;Kubernetes instance calculator (learnk8s.io)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Espero que essas duas dicas rápidas ajudem nessa tarefa.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>aws</category>
      <category>k8s</category>
    </item>
  </channel>
</rss>
