<?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: Adrian</title>
    <description>The latest articles on DEV Community by Adrian (@eydrian).</description>
    <link>https://dev.to/eydrian</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%2F1179952%2F0d20691b-d3bd-49ed-8c1f-f15faabd04e5.png</url>
      <title>DEV Community: Adrian</title>
      <link>https://dev.to/eydrian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eydrian"/>
    <language>en</language>
    <item>
      <title># ECS vs Kubernetes</title>
      <dc:creator>Adrian</dc:creator>
      <pubDate>Tue, 14 Apr 2026 14:25:05 +0000</pubDate>
      <link>https://dev.to/eydrian/-ecs-vs-kubernetes-1hj1</link>
      <guid>https://dev.to/eydrian/-ecs-vs-kubernetes-1hj1</guid>
      <description>&lt;p&gt;No toda plataforma de contenedores necesita la complejidad operativa de &lt;code&gt;Kubernetes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cuando el objetivo es desplegar aplicaciones de forma rapida, segura y con bajo overhead operativo, &lt;code&gt;Amazon ECS&lt;/code&gt; suele ofrecer una relacion mucho mas simple entre valor y esfuerzo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Menor complejidad de operacion y mantenimiento.&lt;/li&gt;
&lt;li&gt;Integracion nativa con servicios de &lt;code&gt;AWS&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Curva de aprendizaje mas corta para equipos pequenos o medianos.&lt;/li&gt;
&lt;li&gt;Menos componentes que administrar.&lt;/li&gt;
&lt;li&gt;Menor tiempo de puesta en marcha.&lt;/li&gt;
&lt;li&gt;Muy buena opcion para workloads HTTP, APIs internas, backends y procesos batch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Kubernetes&lt;/code&gt; sigue siendo una excelente alternativa cuando hay requerimientos claros de portabilidad, ecosistemas multi-cluster complejos, operadores avanzados o estandares de plataforma muy maduros. Pero no deberia ser la eleccion por default.&lt;/p&gt;

&lt;p&gt;La mejor decision no es "usar la tecnologia mas popular", sino elegir la que resuelve el problema con la menor friccion operativa posible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beneficios De Usar ECS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Menos carga operativa
&lt;/h3&gt;

&lt;p&gt;Con &lt;code&gt;ECS&lt;/code&gt; el equipo puede enfocarse mas en la aplicacion y menos en administrar el orquestador. En muchos casos no hace falta ocuparse de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;upgrades del control plane&lt;/li&gt;
&lt;li&gt;administracion de etcd&lt;/li&gt;
&lt;li&gt;networking avanzado entre multiples componentes&lt;/li&gt;
&lt;li&gt;capas extra de observabilidad y add-ons solo para que el cluster funcione bien&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si ademas se usa &lt;code&gt;AWS Fargate&lt;/code&gt;, tambien se elimina la administracion de nodos.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Mejor alineacion con AWS
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ECS&lt;/code&gt; se integra de forma natural con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Application Load Balancer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CloudWatch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IAM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ECR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Auto Scaling&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Secrets Manager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VPC&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eso simplifica mucho el diseño de una plataforma estandar para publicar servicios.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Menor costo de complejidad
&lt;/h3&gt;

&lt;p&gt;Muchas veces el costo mas alto no esta en la infraestructura sino en la complejidad operativa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mas piezas para aprender&lt;/li&gt;
&lt;li&gt;mas riesgos de configuracion&lt;/li&gt;
&lt;li&gt;mas tiempo para diagnosticar incidentes&lt;/li&gt;
&lt;li&gt;mas esfuerzo de onboarding&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si el caso de uso no necesita las capacidades avanzadas de &lt;code&gt;Kubernetes&lt;/code&gt;, ese costo no siempre se justifica.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Time to market mas rapido
&lt;/h3&gt;

&lt;p&gt;Para equipos que quieren publicar microservicios o aplicaciones internas con rapidez, &lt;code&gt;ECS&lt;/code&gt; permite construir una plataforma repetible con menos decisiones tecnicas y menos puntos de falla.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Escala suficiente para muchisimos casos reales
&lt;/h3&gt;

&lt;p&gt;Existe una idea comun de que "si hay contenedores, entonces tiene que haber Kubernetes". En la practica, muchisimas cargas productivas funcionan perfectamente sobre &lt;code&gt;ECS&lt;/code&gt;, especialmente cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;el entorno ya vive mayormente en &lt;code&gt;AWS&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;el equipo prioriza simplicidad&lt;/li&gt;
&lt;li&gt;no existe necesidad real de portabilidad multi-cloud&lt;/li&gt;
&lt;li&gt;los servicios comparten patrones de despliegue similares&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Infraestructura y despliegues mas predecibles
&lt;/h3&gt;

&lt;p&gt;Cuando la infraestructura se define como codigo y los despliegues se automatizan con &lt;code&gt;GitHub Actions&lt;/code&gt;, el beneficio no es solo tecnico: tambien mejora la forma de operar del equipo.&lt;/p&gt;

&lt;p&gt;Esto aporta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entornos repetibles y versionados&lt;/li&gt;
&lt;li&gt;menor riesgo de configuraciones manuales inconsistentes&lt;/li&gt;
&lt;li&gt;trazabilidad completa de cambios&lt;/li&gt;
&lt;li&gt;revisiones por pull request antes de modificar infraestructura o aplicaciones&lt;/li&gt;
&lt;li&gt;despliegues mas rapidos y estandarizados&lt;/li&gt;
&lt;li&gt;menos dependencia de pasos manuales y conocimiento tribal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La combinacion de &lt;code&gt;ECS&lt;/code&gt; + &lt;code&gt;Terraform&lt;/code&gt; + &lt;code&gt;GitHub Actions&lt;/code&gt; permite construir una plataforma simple de entender y facil de escalar operativamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cuando ECS Tiene Mucho Sentido
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ECS&lt;/code&gt; suele ser una decision muy solida para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs y backends de negocio&lt;/li&gt;
&lt;li&gt;aplicaciones internas&lt;/li&gt;
&lt;li&gt;microservicios HTTP&lt;/li&gt;
&lt;li&gt;workers y jobs programados&lt;/li&gt;
&lt;li&gt;equipos de plataforma pequenos o en crecimiento&lt;/li&gt;
&lt;li&gt;organizaciones que quieren estandarizar despliegues sin operar una plataforma demasiado compleja&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cuando Kubernetes Puede Ser Mejor
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Kubernetes&lt;/code&gt; puede ser la mejor opcion cuando hay necesidades concretas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;portabilidad fuerte entre clouds o datacenters&lt;/li&gt;
&lt;li&gt;ecosistema basado en operadores, CRDs o service mesh avanzado&lt;/li&gt;
&lt;li&gt;requerimientos de plataforma multi-tenant mas sofisticados&lt;/li&gt;
&lt;li&gt;estandarizacion corporativa ya consolidada sobre Kubernetes&lt;/li&gt;
&lt;li&gt;equipos con experiencia profunda administrando clusters y sus componentes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La clave es que esas necesidades sean reales, no asumidas.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>aws</category>
      <category>devops</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>how to launch elastic cache with terraform</title>
      <dc:creator>Adrian</dc:creator>
      <pubDate>Mon, 27 Nov 2023 22:42:56 +0000</pubDate>
      <link>https://dev.to/eydrian/how-to-launch-elastic-cache-with-terraform-24c4</link>
      <guid>https://dev.to/eydrian/how-to-launch-elastic-cache-with-terraform-24c4</guid>
      <description>&lt;p&gt;A developer from the compañy I work asked me about the posibility of adding a new database for a new requirement. After asking some question about what he needs to do, we decided to moved to elastic cache. &lt;/p&gt;

&lt;p&gt;First.&lt;br&gt;
we need to crete a security group to permit port 6379&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_security_group" "allow_cache" {
  name        = "allow_cache-${local.app_name}-${terraform.workspace}"
  description = "Allow cache inbound traffic"
  vpc_id      = var.vpc-id

  ingress {
    description      = "cache from VPC"
    from_port        = 6379
    to_port          = 6379
    protocol         = "tcp"
    cidr_blocks      = [var.allowed_cidr_block-1]
   }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
   }

  tags = {
    Name = "allow_cache"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lambda role&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_iam_role" "lambda_vpc_role" {
  name = "lambda-vpc-role-${local.app_name}-${terraform.workspace}"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "lambda.amazonaws.com"
        }
      }
    ]
  })
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;attachmet&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_iam_role_policy_attachment" "lambda_vpc_role_policy" {
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
  role       = aws_iam_role.lambda_vpc_role.name
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cluster elastic cache with output&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_elasticache_cluster" "hr_cache" {
  cluster_id           = "clusterforlambdatest-${local.app_name}-${terraform.workspace}"
  engine               = "redis"
  node_type            = "cache.t4g.micro"
  num_cache_nodes      = 1
  port                 = 6379
  #engine_version       = "3.2.10"
  subnet_group_name    = aws_elasticache_subnet_group.subnet-sg.id
  security_group_ids   = [aws_security_group.allow_cache.id]
    tags = {
    nombre  = "hr_cache"
    deploy  = "terraform"
  }
}


output "elasticache_endpoint" {
  value = aws_elasticache_cluster.hr_cache.cache_nodes.0.address
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;all code here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_security_group" "allow_cache" {
  name        = "allow_cache-${local.app_name}-${terraform.workspace}"
  description = "Allow cache inbound traffic"
  vpc_id      = var.vpc-id

  ingress {
    description      = "cache from VPC"
    from_port        = 6379
    to_port          = 6379
    protocol         = "tcp"
    cidr_blocks      = [var.allowed_cidr_block-1]
   }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
   }

  tags = {
    Name = "allow_cache"
  }
}


resource "aws_iam_role" "lambda_vpc_role" {
  name = "lambda-vpc-role-${local.app_name}-${terraform.workspace}"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "lambda.amazonaws.com"
        }
      }
    ]
  })
}

resource "aws_iam_role_policy_attachment" "lambda_vpc_role_policy" {
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
  role       = aws_iam_role.lambda_vpc_role.name
}


#resource "aws_subnet" "example" {
#  vpc_id     = aws_vpc.example.id
#  cidr_block = "10.0.0.0/8"
#
#  tags = {
#    Name = "my-subnet"
#  }
#}

resource "aws_elasticache_subnet_group" "subnet-sg" {
  name       = "my-cache-subnet"
  subnet_ids = [var.subnet-t-app-net]
}



resource "aws_elasticache_cluster" "hr_cache" {
  cluster_id           = "clusterforlambdatest-${local.app_name}-${terraform.workspace}"
  engine               = "redis"
  node_type            = "cache.t4g.micro"
  num_cache_nodes      = 1
  port                 = 6379
  #engine_version       = "3.2.10"
  subnet_group_name    = aws_elasticache_subnet_group.subnet-sg.id
  security_group_ids   = [aws_security_group.allow_cache.id]
    tags = {
    nombre  = "hr_cache"
    deploy  = "terraform"
  }
}


output "elasticache_endpoint" {
  value = aws_elasticache_cluster.hr_cache.cache_nodes.0.address
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in order to test this, we can install a tool called redis comander&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;redis-commander --redis-host clusterforlambdatest-xxxx-prd.xxxxxxxxxx.cache.amazonaws.com
&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%2Ff9ms66cjrnvk5fh05n20.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%2Ff9ms66cjrnvk5fh05n20.png" alt="redis cluster"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we are saving data correctly into the Elastic Cache, we can see it here.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
