<?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: Dave Franco</title>
    <description>The latest articles on DEV Community by Dave Franco (@iamdaveops).</description>
    <link>https://dev.to/iamdaveops</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%2F782061%2F94fa9a63-6918-4b50-af5f-0333e55d0933.png</url>
      <title>DEV Community: Dave Franco</title>
      <link>https://dev.to/iamdaveops</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iamdaveops"/>
    <language>en</language>
    <item>
      <title>The State of DevOps 2024 según DORA</title>
      <dc:creator>Dave Franco</dc:creator>
      <pubDate>Wed, 06 Nov 2024 19:08:34 +0000</pubDate>
      <link>https://dev.to/iamdaveops/the-state-of-devops-2024-segun-dora-22m7</link>
      <guid>https://dev.to/iamdaveops/the-state-of-devops-2024-segun-dora-22m7</guid>
      <description>&lt;p&gt;El reporte anual State of DevOps 2024 está aquí y hay algunos puntos que me gustaría comentarles pero también leer su opinión.&lt;/p&gt;

&lt;p&gt;✅ La IA fue el tema central donde claramente hay una mayoría 81% que asegura que hay una priorización en las organizaciones. A nivel individual un 75.9% respondió que la utiliza sobre todo para generar código, explicarlo, resumir información. &lt;/p&gt;

&lt;p&gt;🤨 ¿Qué motiva la adopción? Según el estudio se debe a la presión de la industria tanto a nivel organizacional como individual de los desarrolladores. Para los primeros por un tema sobre todo de marketing y para los segundos como algo que hay que tener conocimientos o te puedes quedar atrás.&lt;/p&gt;

&lt;p&gt;Me quedo en el caso individual porque la IA presenta un dilema donde por un lado tienes la presión de aprenderla a usar para no quedarte atrás pero también te genera el temor de que te va a reemplazar. Además, aunque hay una mayoría 87.9% que tiene confianza en el código, muchos de los participantes (no cuentan cuantos) revelaron que no es una confianza absoluta y que el código casi siempre necesita ajustes para que funcione según se espera. &lt;/p&gt;

&lt;p&gt;Otro dato que me pareció curioso es que según el estudio hay un impacto beneficioso en la productividad. La hipótesis es que si la IA automatiza las tareas repetitivas y de mantenimiento entonces nos podríamos enfocar en trabajo más valioso, sin embargo lo que sugiere la data es que mientras mayor adopción se reduce este tiempo en trabajo valioso mientras que el trabajo más tedioso se mantiene.&lt;/p&gt;

&lt;p&gt;🌎 Hay un impacto ambiental importante, para el 2030 se estima que la demanda de energía se incremente un 160%. Mi pregunta es, ¿cómo y de dónde vamos a generarla? En mi opinión la innovación tendrá una conversación incómoda con los ambientalistas.&lt;/p&gt;

&lt;p&gt;📉 Contrario a lo que se esperaba, según el estudio la IA reduce el desempeño (velocidad y estabilidad) en la entrega de software, 7% de reducción por cada 25% de adopción. Adicionalmente, no se nota un beneficio en el producto a medida que se incremente la adopción de la IA. Mi pregunta es, ¿Por qué entonces tanto empeño en su adopción? &lt;/p&gt;

&lt;p&gt;Creo que estamos en etapas muy tempranas en la adopción y seguramente veamos números significativamente diferentes en el futuro pero por ahora las promesas de la IA no se están cumpliendo. &lt;/p&gt;

&lt;p&gt;El otro tema que me parece super importante a destacar es Platform Engineering en el que el objetivo principal es acelerar el desarrollo de software mejorando la experiencia del desarrollador y habilitando el autoservicio. &lt;/p&gt;

&lt;p&gt;✅ Según DORA la implementación de IDP mejora la productividad individual un 8% mientras que a nivel de equipo un 10%, sin embargo el rendimiento en la entrega de software se ve reducido un 8% mientras que la estabilidad cae un 14%. En una organización donde la estabilidad sea un factor crítico, quizás esta práctica no sea la mejor. &lt;/p&gt;

&lt;p&gt;Otro aspecto que me parece super importante es que según este estudio, la caída en la estabilidad también viene asociada con mayores niveles de burnout lo que podría impactar en la cultura y retención de talento en las organizaciones&lt;/p&gt;

&lt;p&gt;🎯 Finalmente existe una relación positiva en invertir en la experiencia del desarrollador. Esto permite que aumente la productividad y reduce la propensión al burnout. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En conclusión&lt;/strong&gt;, el marketing es un factor importante en crear la necesidad de adopción de la IA aunque realmente el desempeño del producto no se beneficie, sin embargo hay indicios de aumento en la productividad. &lt;/p&gt;

&lt;p&gt;La ingeniería de plataforma también tiene un impacto positivo cuando se invierte en la experiencia del desarrollador y el autoservicio pero puede venir a costa de la velocidad y estabilidad.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Infraestructura como código con AWS ACK</title>
      <dc:creator>Dave Franco</dc:creator>
      <pubDate>Sun, 14 Apr 2024 16:57:30 +0000</pubDate>
      <link>https://dev.to/aws-espanol/infraestructura-como-codigo-con-aws-ack-5f4e</link>
      <guid>https://dev.to/aws-espanol/infraestructura-como-codigo-con-aws-ack-5f4e</guid>
      <description>&lt;p&gt;Estoy trabajando en un proyecto que tiene como objetivo poder desplegar aplicaciones junto con su infraestructura, bajo demanda y sin que los desarrolladores tengan que aprender alguna herramienta de IaC, más allá de Kubernetes, ¿La solución? Amazon Controller for Kubernetes.&lt;/p&gt;

&lt;p&gt;ACK te permite manejar infraestructura desde kubernetes utilizando definiciones escritas en yaml, es decir, podrás desplegar tu aplicación junto con la base de datos o cualquier otro recurso que necesite para funcionar. Si estas familiarizado con el proyecto &lt;a href="https://www.crossplane.io/" rel="noopener noreferrer"&gt;Crossplane&lt;/a&gt; es muy parecido, pero digamos que es nativo para AWS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2908q01vomqb2.cloudfront.net%2Ffe2ef495a1152561572949784c16bf23abb28057%2F2020%2F08%2F14%2Ffeature-img-1024x862.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd2908q01vomqb2.cloudfront.net%2Ffe2ef495a1152561572949784c16bf23abb28057%2F2020%2F08%2F14%2Ffeature-img-1024x862.png" alt="AWS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En este artículo vamos a dar los primeros pasos. Te mostraré como instalarlo, darle permisos y finalmente crear recursos en aws desde kubernetes. ¿Qué vamos a necesitar?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Una cuenta de AWS con acceso (Obvio ¿no?)&lt;/li&gt;
&lt;li&gt;  aws-cli (Herramienta de aws en la terminal, descárgalo &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;  Eksctl (Herramienta para crear clusters EKS usando la línea de comando, puedes descargarlo &lt;a href="https://eksctl.io/installation/" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adicionalmente voy a dejarte un repositorio, con código ejemplo de los que acá vamos a mostrar:&lt;br&gt;
&lt;a href="https://github.com/davejfranco/youtube-tutorial-src/tree/master/tutoriales/kubernetes/ack" rel="noopener noreferrer"&gt;https://github.com/davejfranco/youtube-tutorial-src/tree/master/tutoriales/kubernetes/ack&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lo primero será crear nuestro cluster de eks, para este demo lo haremos con eksctl pero tu puedes utilizar cualquier forma, bien sea la consola o cualquier herramienta de IaC que sea compatible con AWS.&lt;/p&gt;

&lt;p&gt;Para crear un cluster usando eksctl basta con ejecutar el siguiente comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;eksctl create cluster &lt;span class="nt"&gt;--name&lt;/span&gt; ack-demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.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%2Fv6sd4nquplqlfdt6h2p1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fv6sd4nquplqlfdt6h2p1.png" alt="eksctl"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero si deseas crear un cluster usando una VPC existente puedes mirar dentro del repositorio donde hay un archivo cluster.yaml ejemplo para que puedas cambiarlo.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: ack-demo
  region: us-east-1
  version: &lt;span class="s1"&gt;'1.29'&lt;/span&gt;

vpc:
  &lt;span class="nb"&gt;id&lt;/span&gt;: &lt;span class="s2"&gt;"vpc-0de6dcebcb1d1e89e"&lt;/span&gt;
  clusterEndpoints:
    publicAccess:  &lt;span class="nb"&gt;true
  &lt;/span&gt;subnets:
    public:
      public-1-us-east-1a:
        &lt;span class="nb"&gt;id&lt;/span&gt;: &lt;span class="s2"&gt;"subnet-060ff58f504f124dd"&lt;/span&gt;
      public-2-us-east-1b:
        &lt;span class="nb"&gt;id&lt;/span&gt;: &lt;span class="s2"&gt;"subnet-0f178e1e24a05cbba"&lt;/span&gt;
      public-3-us-east-1c:
        &lt;span class="nb"&gt;id&lt;/span&gt;: &lt;span class="s2"&gt;"subnet-0b95cc7f6b3fdc0b7"&lt;/span&gt;

managedNodeGroups:
  - name: managed-ng-1
    instanceType: t3.small
    privateNetworking: &lt;span class="nb"&gt;false
    &lt;/span&gt;minSize: 1
    maxSize: 2
    desiredCapacity: 1
    volumeSize: 30
    labels: &lt;span class="o"&gt;{&lt;/span&gt;node-group-type: managed&lt;span class="o"&gt;}&lt;/span&gt;
    tags:
      nodegroup-role: worker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Una vez terminado de ejecutar el comando anterior, vamos a añadir los permisos necesarios para que desde nuestro cluster podamos crear infraestructura. &lt;/p&gt;

&lt;p&gt;ACK es un conjunto de CRDs que se instalan en tu cluster, tendremos un controlador por cada servicio de AWS que queremos manejar, puedes consultar &lt;a href="https://aws-controllers-k8s.github.io/community/reference/" rel="noopener noreferrer"&gt;acá&lt;/a&gt; la lista soportada hasta el momento. Cada controlador necesita poder acceder al API de AWS para poder manejar los recursos, lo siguiente que haremos es crear un IAM role que tenga las políticas necesarias para ello.&lt;/p&gt;

&lt;p&gt;Primero creamos el proveedor OIDC para que desde EKS podamos interactuar con IAM.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;eksctl utils associate-iam-oidc-provider &lt;span class="nt"&gt;--cluster&lt;/span&gt; ack-demo &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="nt"&gt;--approve&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Lo siguiente sera crear una trust policy que confie en nuestro cluster&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;OIDC_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;aws eks describe-cluster &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="nv"&gt;$EKS_CLUSTER_NAME&lt;/span&gt; &lt;span class="nt"&gt;--region&lt;/span&gt; &lt;span class="nv"&gt;$AWS_REGION&lt;/span&gt; &lt;span class="nt"&gt;--query&lt;/span&gt; &lt;span class="s2"&gt;"cluster.identity.oidc.issuer"&lt;/span&gt; &lt;span class="nt"&gt;--output&lt;/span&gt; text | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"s/^https:&lt;/span&gt;&lt;span class="se"&gt;\/\/&lt;/span&gt;&lt;span class="s2"&gt;//"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;aws sts get-caller-identity &lt;span class="nt"&gt;--query&lt;/span&gt; Account &lt;span class="nt"&gt;--output&lt;/span&gt; text&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;ACK_SYSTEM_NAMESPACE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ack-system"&lt;/span&gt;
&lt;span class="nv"&gt;ACK_SERVICE_ACCOUNT_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ack-controller"&lt;/span&gt;

&lt;span class="nv"&gt;TRUST_RELATIONSHIP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;  
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACCOUNT_ID&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;:oidc-provider/&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OIDC_PROVIDER&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;OIDC_PROVIDER&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;:sub": "system:serviceaccount:&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACK_SYSTEM_NAMESPACE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;:&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACK_SERVICE_ACCOUNT_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"
        }
      }
    }
  ]
}
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;  &lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;TRUST_RELATIONSHIP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; trust.json

aws iam create-role &lt;span class="nt"&gt;--role-name&lt;/span&gt; “ack-ec2-controller”--assume-role-policy-document file://trust.json &lt;span class="nt"&gt;--description&lt;/span&gt; “ack iam role”

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

&lt;/div&gt;


&lt;p&gt;Una vez creado el IAM role, necesitamos atachar las políticas necesarias para que pueda ejecutar la creación de recursos. Una cosa muy interesante que añadieron los desarrolladores que mantienen el proyecto es una sección donde esta los arns de las políticas recomendadas o inline policies que necesita tener el role por cada controlador, para descargarlo hacemos lo siguiente.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://raw.githubusercontent.com/aws-controllers-k8s/ec2-controller/main/config/iam/recommended-policy-arn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Este commando descarga el arn que debe tener el IAM role si queremos usar el controlador de ec2&lt;/p&gt;

&lt;p&gt;Además, hay algunos controladores que requieren una política custom, por lo que también dejaron un apartado en estos casos como cuando queremos usar S3&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://raw.githubusercontent.com/aws-controllers-k8s/s3-controller/main/config/iam/recommended-inline-policy &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; inline.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Luego Podemos atachar la política, de esta forma:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam attach-role-policy &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--role-name&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACK_CONTROLLER_IAM_ROLE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;POLICY_ARN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Y si tenemos inline policies podemos hacer esto:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam put-role-policy &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--role-name&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ACK_CONTROLLER_IAM_ROLE&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--policy-name&lt;/span&gt; &lt;span class="s2"&gt;"ack-recommended-policy"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
        &lt;span class="nt"&gt;--policy-document&lt;/span&gt;  inline.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Ya tenemos el cluster y el IAM role, ahora vamos a instalar el controlador via HELM. En este caso haremos la instalación del controlador de EC2. &lt;/p&gt;

&lt;p&gt;Lo primero será obtener el token de acceso del ecr  publico de aws y con estas credenciales hacer login al registry de HELM&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecr-public get-login-password &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 | helm registry login &lt;span class="nt"&gt;--username&lt;/span&gt; AWS &lt;span class="nt"&gt;--password-stdin&lt;/span&gt; public.ecr.aws
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Por cada controlador vamos a necesitar obtener su versión actual. Para el servicio de EC2, seria:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;RELEASE_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-sL&lt;/span&gt; https://api.github.com/repos/aws-controllers-k8s/ec2-controller/releases/latest | jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.tag_name | ltrimstr("v")'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Procedemos a instalar el controlador.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm upgrade &lt;span class="nt"&gt;--install&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; ack-system ack-ec2-controller &lt;span class="se"&gt;\&lt;/span&gt;
    oci://public.ecr.aws/aws-controllers-k8s/ec2-chart &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--create-namespace&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$RELEASE_VERSION&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--set&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"serviceAccount.annotations.eks&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;amazonaws&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;com/role-arn=&lt;/span&gt;&lt;span class="nv"&gt;$ACK_CONTROLLER_IAM_ROLE_ARN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--set&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;aws.region&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$AWS_REGION&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Si te has fijado le pasamos el arn del IAM Role que hemos creado en el paso anterior. Puedes buscar el arn en la consola, o si quieres buscarlo via aws-cli es así:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam get-role &lt;span class="nt"&gt;--role-name&lt;/span&gt; ack-ec2-controller &lt;span class="nt"&gt;--query&lt;/span&gt; Role.Arn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Si todo ha salido bien, hacemos &lt;code&gt;kubectl get pods -n ack-system&lt;/code&gt; y debemos ver el pod corriendo en el namespace. Ya podemos crear nuestros primeros recursos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fo3cnokbv96pqal7bx54z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fo3cnokbv96pqal7bx54z.png" alt="ec2 ready"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos a crear una instancia EC2. Tendremos que indicar, tipo de instancia, &lt;code&gt;imageID&lt;/code&gt; y la &lt;code&gt;subnetID&lt;/code&gt; donde queremos crearla; estos son campos obligatorios, luego tenemos campos opcionales como los tags.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;---&lt;/span&gt;
apiVersion: ec2.services.k8s.aws/v1alpha1
kind: Instance
metadata:
  name: ack-demo-ec2
spec:
  instanceType: t2.nano
  imageID: ami-0c101f26f147fa7fd
  subnetID: subnet-060ff58f504f124dd
  tags:
    - key: Name
      value: ack-demo-ec2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Pegamos este codigo en un archivo&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Kubectl apply -f infra.yaml&lt;/code&gt; Y listo… &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2Fptvyucv6jh1691x8ste8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2Fptvyucv6jh1691x8ste8.png" alt="kubectl apply"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.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%2F54rlc5r4blqktkc63p2z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.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%2F54rlc5r4blqktkc63p2z.png" alt="aws console"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como pueden ver en la imagen de arriba, tenemos la instancia recién creada y el nodo de nuestro cluster eks. La documentación de ACK la encuentras &lt;a href="https://aws-controllers-k8s.github.io/community/docs/community/overview/" rel="noopener noreferrer"&gt;acá&lt;/a&gt; para que puedes profundizar en todos los servicios y funcionalidades.&lt;/p&gt;

&lt;p&gt;Con ACK vamos a poder no solo desplegar nuestras aplicaciones a kubernetes sino los recursos de infraestructura que dependen de ella. Si quieres ver el paso a paso de este mismo artículo más algunos tips extras, te invito a ver este video en mi canal de youtube donde voy al paso a paso.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.youtube.com/watch?si=VQt1VTNOg4F4BKs4&amp;amp;v=3fd1m7b8g8A&amp;amp;feature=youtu.be" rel="noopener noreferrer"&gt;
      youtube.com
    &lt;/a&gt;
&lt;/div&gt;



&lt;p&gt;Nos vemos pronto cracks! &lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>[Tutorial] RDS Blue / Green Deployment - Migrar Bases de datos ahora es más fácil</title>
      <dc:creator>Dave Franco</dc:creator>
      <pubDate>Fri, 15 Dec 2023 15:47:52 +0000</pubDate>
      <link>https://dev.to/aws-espanol/tutorial-rds-blue-green-deployment-migrar-bases-de-datos-ahora-es-mas-facil-4c59</link>
      <guid>https://dev.to/aws-espanol/tutorial-rds-blue-green-deployment-migrar-bases-de-datos-ahora-es-mas-facil-4c59</guid>
      <description>&lt;p&gt;Si hay algo a lo que le temo más que a una película de terror, es a una migración de Base de Datos y la razón es porque muchas cosas pueden salir mal durante este tipo de eventos. Bien sea porque hay que hacer upgrade de la versión, porque hay un cambio de esquema o porque hay que escalar. La base de datos es el corazón de una aplicación y seguramente el de una organización completa.&lt;/p&gt;

&lt;p&gt;Si estas usando RDS, un servicio PaaS que nos permite crear y administrar bases de datos con distintos motores como: MySQL, Aurora, PostgreSQL, Oracle y muchos más hay una forma para hacer de estos eventos de migración se hagan de forma más segura, automatizada mientras reducimos drásticamente el riesgo de que salga algo mal. Se llama RDS Blue/Green Deployments. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a7j7T_29--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4lai18xmaqite6jpxmp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a7j7T_29--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4lai18xmaqite6jpxmp6.png" alt="Blue/Green Deploy en aplicaciones" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el mundo de aplicaciones tenemos los despliegues Blue/Green en donde se hay dos entornos, Blue con la versión actual y Green con una versión actualizada. Una vez que hemos comprobado que todo va bien podemos hacer el cambio y dirigir todo el trafico a nuestro entorno Green. Esto mismo es RDS Blue/Green Deployment pero en base de datos. A continuación, te muestro como utilizarlo. &lt;/p&gt;

&lt;p&gt;El escenario es el siguiente, tenemos una Base de datos MySQL versión 5.7 y nos piden hacer un major upgrade a MySQL 8.0. Si estamos hablando de una base de datos de producción es probable que tengamos habilitado MultiAZ sino es así muy mal porque esto puede cubrirte de un incidente a nivel de AZ, podemos hacer el upgrade simplemente modificando el la DB en la pesteña de “Modify”. Sin embargo, no sabemos como puede afectar la migración con datos reales de clientes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cRM-zW82--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8210fkm9pe1v845j2lr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cRM-zW82--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8210fkm9pe1v845j2lr8.png" alt="Como crear un B/G en RDS" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seleccionamos la base de datos y en la pestaña de “Actions” y le decimos crear Blue/Green Deployment. Esto nos desplegara un menú donde podemos colocar un identificar al deployment e indicar la nueva versión a la que queremos llegar. Una vez llenado los campos hacemos click en Create Blue/Green Deployment.&lt;/p&gt;

&lt;p&gt;Colocaremos un identificador a nuestro deployment y si es una migración de version le colocamos la versión a la cual queremos hacer upgrade; en este caso a MySQL 8.0.35 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---3jRT6R4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pliaej7m0olxw35die5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---3jRT6R4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pliaej7m0olxw35die5b.png" alt="B/G settings" width="800" height="774"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos vamos hasta lo último de la página y le decimos crear deployment y listo! Es cuestion de esperar. Lo que sucederá es que RDS creará una replica de la base de datos (Green) que se sincronizará con la base de datos original (Blue), una vez creada automáticamente hará el upgrade de la versión. Durante el proceso mi base de datos (Blue) seguirá trabajando perfectamente y además si tengo replicas de lecturas estas también estarán incluidas dentro del proceso por tanto no solo estoy haciendo el upgrade a mi base de datos principal sino a todas las replicas que tenga.&lt;/p&gt;

&lt;p&gt;Una vez que complete el proceso de creación de la base de datos Green y termine el upgrade. Las bases de datos se pondrán en estado disponible al igual que el propio deployment; es momento de hacer el cambio o Switch Over. En este momento podemos hacer pruebas para asegurarnos que nuestra nueva DB funciona perfectamente, Blue/Green deploy no solo sirve para actualizaciones del motor, también podemos usarla si queremos hacer cambios de esquemas, modificaciones en la data entre otros.&lt;/p&gt;

&lt;p&gt;Si las pruebas realizadas salen bien entonces seleccionamos el Blue/Green deployment y en el botón de acción seleccionamos "Switch Over" este desplegará una ventana con el estado actual de nuestra DB (Blue) y la nueva DB (Green). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sRGdpEwN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2cp9n63hqv21yi7rpn9m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sRGdpEwN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2cp9n63hqv21yi7rpn9m.png" alt="B/G Summary" width="800" height="882"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¡Recuerda!
&lt;/h2&gt;

&lt;p&gt;este tipo de eventos criticos deben ser planificados, es recomendable ejecutarlos en horarios donde los usuarios tendrán el menor impacto posible y siempre con un plan B. &lt;/p&gt;

&lt;p&gt;Hacemos click en "Switch Over" y durante este tiempo RDS bloquará nuevas conexiones y escrituras a la DB (Blue) y hará el cambio por la DB (Green), podrás observar que la actual db le cambio el identificador y se le agrega "old" al final para mostrar que ahora es la DB vieja mientras que la DB (Green) pasa a tener el mismo nombre y endpoint que tenia la versión Blue; esto también sucederá con todas las read replicas que tengas. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g7UWUSLH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0xf8glirko6cbl8bt52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g7UWUSLH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d0xf8glirko6cbl8bt52.png" alt="switch over finished" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si quieres ver este mismo tutorial en formato de video, te invito a mi canal&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.youtube.com/watch?si=6maxi-8c8qU6KSFc&amp;amp;v=0YdDoV9kQlk&amp;amp;feature=youtu.be" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Zt-eAsGY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://i.ytimg.com/vi/0YdDoV9kQlk/maxresdefault.jpg" height="450" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.youtube.com/watch?si=6maxi-8c8qU6KSFc&amp;amp;v=0YdDoV9kQlk&amp;amp;feature=youtu.be" rel="noopener noreferrer" class="c-link"&gt;
          Como migrar bases de datos en aws rds - YouTube
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Una de las tareas mas complicadas que podemos tener son las migraciones de Bases de Datos. En este video voy a mostrarte como migrar mucho más fácil si estas...
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--neuEwGnQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.youtube.com/s/desktop/e1f38dd5/img/favicon.ico" width="16" height="16"&gt;
        youtube.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>tutorial</category>
      <category>rds</category>
      <category>database</category>
    </item>
    <item>
      <title>Chaos Engineering con AWS Fault Injection Simulator</title>
      <dc:creator>Dave Franco</dc:creator>
      <pubDate>Thu, 05 Oct 2023 16:35:39 +0000</pubDate>
      <link>https://dev.to/aws-espanol/chaos-engineering-con-aws-fault-injection-simulator-3f7d</link>
      <guid>https://dev.to/aws-espanol/chaos-engineering-con-aws-fault-injection-simulator-3f7d</guid>
      <description>&lt;p&gt;Un incidente de producción es un evento que puede provocar la interrupción total o degradar un servicio y tiene dos características muy relevantes: la primera es que es impredecible; puedes tratar con ML predecir la probabilidad de que ocurra un incidente pero nunca tendrá la garantía exacta de cuando va ocurrir y segundo, un incidente no es un evento que solo afecte a un componente de tu infraestructura, normalmente es producto de un fallo en cascada que mientras más compleja es la arquitectura, más complicado es de identificar y remediar. Cuando una organización sufre un evento de producción dependiendo de la gravedad puede tener un impacto económico negativo, verse afectada su imagen o peor aún, la total pérdida de la confianza de sus clientes lo que lo podría llevar a una quiebra. &lt;/p&gt;

&lt;p&gt;Como ingenieros ¿qué podemos hacer en estos casos? Hay tres cosas que podemos intentar: la primera es, prevenir, es decir diseñar arquitecturas altamente resilientes, en segundo lugar, también debemos prepararnos para que cuando ocurran poder responder lo más rápido posible y por último aprender de cada incidente para repetir lo primero y lo segundo. &lt;/p&gt;

&lt;p&gt;Ahora te pido que te hagas esta pregunta,¿Cómo podemos probar que nuestra infraestructura es resiliente a fallos? o ¿Realmente estamos preparados ante un eventual incidente? La respuesta es Chaos Engineering. Es una práctica que busca a través de inyectar fallas deliberadas a nuestro sistema (no simuladas) la información que nos permita detectar debilidades en nuestras soluciones para corregirlas o mitigar su impacto. Si quieres saber más al respecto puedes ir a este link y leer su origen. &lt;a href="https://principlesofchaos.org/"&gt;https://principlesofchaos.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Cómo lo implementamos? Lo haremos con AWS Fault Injection Simulator. Es una herramienta manejada, es decir, no tienes que aprovisionar ningún servidor sino diseñar los experimentos y dirigirlos a tu infraestructura objetivo. AWS FIS soporta las soluciones de infraestructura más importantes para el hosting de aplicaciones como EC2, ECS, EBS, EKS e incluso VPC para provocar fallos a nivel de red. Puedes leer más aquí &lt;a href="https://aws.amazon.com/es/fis/?nc1=h_ls"&gt;https://aws.amazon.com/es/fis/?nc1=h_ls&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Acá es donde se pone super divertido, vamos a crear nuestro primer. Todo el código de infraestructura e instrucciones puedes obtenerlas en este repositorio: &lt;a href="http://github.com:davejfranco/fisdemo"&gt;http://github.com:davejfranco/fisdemo&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  El escenario:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MADdBb_w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3r7alm290p3jdi49zxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MADdBb_w--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/b3r7alm290p3jdi49zxe.png" alt="Arquitectura Demo" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenemos una infraestructura compuesta por un cluster de ECS que incluye dos nodos EC2 distribuidos en dos zonas de disponibilidad distinta; a esto llamamos nuestro estado estable. Lo siguiente que hacemos es formular una hipótesis basada en una suposición. Si nuestro cluster tiene alta disponibilidad la pérdida de uno de los nodos no debe ocasionar ningún problema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Probemos si esto es cierto.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;La infraestructura está desplegada con CDK así que lo primero es crearla. Vamos al directorio infra.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd infra &amp;amp;&amp;amp; cdk deploy&lt;/code&gt;. Si nunca has desplegado nada seguramente vas a necesitar hacer &lt;code&gt;cdk bootstrap&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mJuH-Gz4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcqf3978hlhe7mudko68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mJuH-Gz4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcqf3978hlhe7mudko68.png" alt="El resultado del despliegue" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto nos dará el endpoint de nuestro LoadBalancer para que podamos probar haciendo request y poder observar su comportamiento. Un requisito de Chaos Engineering es tener buena visibilidad de nuestro servicio para que podamos entender qué ocurre. En el repositorio tengo un script que ejecuta un GET request de forma constante durante unos segundos e imprime el http code.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;../fis/testEndpoint.sh http://FisDem-LB8A1-LuvyHxArqt49-260398987.us-east-1.elb.amazonaws.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Debería ver esto antes de la prueba. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kvIzv5-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qis55bp1nd4vefe1oxxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kvIzv5-U--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qis55bp1nd4vefe1oxxp.png" alt="request exitosos" width="800" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vamos a la consola de AWS y en el buscador escribimos FIS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1ljfcNDB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u0k4dztyd37zrkdpj1by.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1ljfcNDB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u0k4dztyd37zrkdpj1by.png" alt="FIS Console" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la parte izquierda tenemos &lt;code&gt;experiment templates&lt;/code&gt; que es donde creamos nuestro experimento, debajo podemos ver todos los experimentos que hemos ejecutado hasta ahora y una sección llamada “Spotlight” donde nos publican novedades de la herramienta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hacemos click en &lt;code&gt;create experiment template&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8GDo-AY8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8d1ygw9wmo9lbwg8jfe4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8GDo-AY8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8d1ygw9wmo9lbwg8jfe4.png" alt="Creación de plantilla" width="736" height="960"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Necesitamos darle una descripción y opcionalmente un nombre. Luego vamos a la sección de Action donde podemos escoger qué servicio vamos a probar, en este caso vamos terminar una instancia así que seleccionamos EC2, pero podrás ver todos los servicios que soporta, seleccionamos luego en el type ´aws:ec2:terminate-instances´. Le damos “Save”. &lt;/p&gt;

&lt;p&gt;Luego bajamos a la sección de Target donde definimos nuestra infraestructura objetivo; dependiendo de qué servicios escojas esto cambia pero acá podemos directamente seleccionar un InstanceID o un tag que le permita a FIS encontrar la infraestructura; es mejor usar tags porque esto hace el experimento reusable para futuras ocasiones. Luego de seleccionar el tag, definimos cuántas instancias vamos a terminar, esto puede ser un número fijo, un porcentaje o todos (Si alguna vez pruebas esto en producción, asegurate que tienes la capacidad de regenerar el servicio automáticamente). En mi caso seleccioné uno solo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1XptzT-9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lefr1irmge2itgybg8re.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1XptzT-9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lefr1irmge2itgybg8re.png" alt="definir infra objetivo" width="563" height="1045"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos a necesitar darle permisos a FIS para que ejecute la prueba, cuando crear un experimento te sugiere crear un IAM Role, por suerte con el despliegue CDK que hicimos anteriormente está incluido el rol con los permisos necesarios. Finalmente tenemos una condición de stop que permite detener el experimento si una alarma de cloudwatch se activa; esto es útil si estamos probando en un ambiente productivo y queremos detener la prueba para no afectar aún más la disponibilidad del servicio objetivo, además podemos colectar logs de lo ocurrido de forma que nos sirva de reporte. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UydWXvuT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlt71rjv3pzhz93uoc8d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UydWXvuT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tlt71rjv3pzhz93uoc8d.png" alt="FIS IAM" width="658" height="893"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hacemos click en ´Create experiment template´&lt;/strong&gt;. Veremos una pantalla siguiente para ejecutar la prueba que también te pedirá una confirmación.&lt;/p&gt;

&lt;p&gt;Mientras se ejecuta el experimento, vamos a correr el script que nos permitirá observar el comportamiento de nuestro servicio. Veremos por un tiempo unos errores 5xx producto de que el 50% de los request están yendo a una instancia que está siendo terminada y no es sino hasta que el ALB detecte que este server no está saludable que lo sacará de circulación. Esta intermitencia puede o no ser significativa dependiendo de la criticidad del servicio que estamos probando; no es lo mismo un demo a un servicio a un app que lleva la posición en tiempo real de un avión en un vuelo comercial. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pkBMx2EW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bki6wqx2yshf40xb7ivd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pkBMx2EW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bki6wqx2yshf40xb7ivd.png" alt="Experiment result" width="663" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Qué podemos hacer para remediar esto? Podemos reducir el tiempo que toma al ALB detectar la instancia defectuosa, también podemos incrementar la cantidad de nodos a más de 2, esto hará que el porcentaje de request fallidos se reduzca a medida que tenemos más servidores para balancear.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Esto es una nueva hipótesis que tendríamos que probar.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusión
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Chaos Engineering&lt;/strong&gt; es una práctica que nos permite detectar debilidades en nuestra arquitectura mediante la introducción deliberada de fallos. Los pre-requisitos son: una infraestructura estable y tener un sistema de monitoreo que nos permita visualizar el comportamiento de nuestra infraestructura durante la prueba.&lt;/p&gt;

&lt;p&gt;Ya que llegaste aquí, también puedes ver este mismo artículo en mi canal de youtube en donde modifico los valores y ejecutó la prueba nuevamente. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/wmhdrsgOlm0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Nos leemos pronto cracks!&lt;/p&gt;

</description>
      <category>cdk</category>
      <category>aws</category>
      <category>sre</category>
    </item>
  </channel>
</rss>
