<?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: Alex Rodríguez</title>
    <description>The latest articles on DEV Community by Alex Rodríguez (@rager).</description>
    <link>https://dev.to/rager</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%2F1219310%2F6c736731-d3ac-43ad-8543-5b12d4394e5e.PNG</url>
      <title>DEV Community: Alex Rodríguez</title>
      <link>https://dev.to/rager</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rager"/>
    <language>en</language>
    <item>
      <title>🤔AWS me está quitando el trabajo...😵</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Wed, 04 Mar 2026 12:36:21 +0000</pubDate>
      <link>https://dev.to/aws-espanol/aws-me-esta-quitando-el-trabajo-591f</link>
      <guid>https://dev.to/aws-espanol/aws-me-esta-quitando-el-trabajo-591f</guid>
      <description>&lt;h2&gt;
  
  
  Cómo desplegar ArgoCD en EKS con SSO sin gestionar un solo pod
&lt;/h2&gt;

&lt;p&gt;Después de bastante tiempo entre eventos, organizaciones y mucho trabajo, volvemos por aquí para hablar de uno de los últimos “avances” que AWS ha presentado.&lt;/p&gt;

&lt;p&gt;Con todo el tema de la  IA, parece que solo estemos hablando de modelos, agentes y prompts. Pero nada más lejos de la realidad, seguimos gestionando muchísima infraestructura, y AWS sigue lanzando cosas muy interesantes para simplificar esa parte. (menos mal, algún anuncio no relacionado con IA también nos gusta escuchar).&lt;/p&gt;

&lt;p&gt;Sin intentar que esto tuviese algún sentido, hemos terminado cerrando una rueda interesante alrededor de &lt;strong&gt;EKS, ArgoCD y IAM Identity Center&lt;/strong&gt; en nuestros posts de #awstwins. La verdad es que en este post he tirado un poco de &lt;strong&gt;clickbait&lt;/strong&gt;, a lo influencer, pero en realidad volvemos al barro y con lo de siempre: Kubernetes y automatización.&lt;/p&gt;

&lt;p&gt;En concreto, vamos a hablar de &lt;strong&gt;EKS Capabilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En posts anteriores como el de acontinuación instalábamos y gestionábamos Argo CD nosotros. Hoy toca darle otra vuelta. Que para eso estamos, ¿no?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/aws-espanol/automatiza-el-despliegue-de-eks-y-argocd-con-terraform-3h93"&gt;argocd&amp;amp;terraform&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué es EKS Capabilities?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;EKS Capabilities&lt;/strong&gt; es una nueva feature de AWS que permite utilizar herramientas del ecosistema Kubernetes &lt;strong&gt;gestionadas directamente por AWS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Es decir,no tienes que instalar nada, mantener nada ni preocuparte de por qué algo está caído.&lt;/p&gt;

&lt;p&gt;Básicamente nuestro estilo de vida, no? &lt;/p&gt;

&lt;p&gt;Actualmente hay &lt;strong&gt;3 capabilities disponibles:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ArgoCD&lt;/strong&gt;&lt;br&gt;
De este ya hemos hablado mucho en diferentes posts y es el que vamos a usar puesto que cerramos el circulo. Incluiremos la parte del SSO.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;KRO (Kubernetes Resource Orchestrator)&lt;/strong&gt;&lt;br&gt;
Permite crear recursos de forma declarativa agrupando varios recursos en uno solo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ACK (AWS Controllers for Kubernetes)&lt;/strong&gt;&lt;br&gt;
Permite gestionar recursos de AWS directamente desde Kubernetes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¿La parte interesante de todo esto?&lt;/p&gt;

&lt;p&gt;Estas capabilities &lt;strong&gt;operan en el control plane de EKS&lt;/strong&gt;, no en tus nodos ni en tu cuenta.&lt;br&gt;
Resultado: &lt;strong&gt;menos componentes que mantener y menos cosas que se rompan.&lt;/strong&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  ¿Qué hemos desplegado?
&lt;/h2&gt;

&lt;p&gt;Para ir rápido y evitar mantener algo "custom", hemos hecho lo de siempre: usar &lt;strong&gt;módulos de la community&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;En este caso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Una &lt;strong&gt;VPC&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Un &lt;strong&gt;cluster EKS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Karpenter&lt;/strong&gt; para el autoscaling de nodos (no entraremos en detalle aquí)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si queréis ver más sobre Karpenter, mi hermano ya publicó un post sobre esto, que siempre podéis dejar un Like!💕:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/aws-espanol/optimiza-tu-cluster-eks-con-karpenter-3mk1"&gt;karpenter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Volvamos a "Capabilities" que es lo que nos interesa. Tal y como decíamos, para esta PoC, podéis encontrar el módulo de &lt;strong&gt;EKS Capabilities&lt;/strong&gt; aquí con los ejemplos, ya sabéis "Copy &amp;amp; Paste" o si no, siempre podéis tirar de IA para un código rápido.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/terraform-aws-modules/terraform-aws-eks/tree/master/examples/eks-capabilities" rel="noopener noreferrer"&gt;terraform-aws-modules&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  SSO con IAM Identity Center
&lt;/h2&gt;

&lt;p&gt;Una de las partes más interesantes de usar &lt;strong&gt;EKS Capabilities con ArgoCD&lt;/strong&gt; es que &lt;strong&gt;el SSO no requiere ninguna integración adicional&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No hay que tocar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ConfigMap&lt;/code&gt; de ArgoCD&lt;/li&gt;
&lt;li&gt;&lt;code&gt;argocd-cm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;configuración de OIDC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simplemente le dices a AWS &lt;strong&gt;qué grupos de IAM Identity Center corresponden a qué roles dentro de ArgoCD&lt;/strong&gt;, y a funcionar.&lt;/p&gt;

&lt;p&gt;Ejemplo en Terraform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt; &lt;span class="s2"&gt;"argocd_eks_capability"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"terraform-aws-modules/eks/aws//modules/capability"&lt;/span&gt;

  &lt;span class="nx"&gt;type&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ARGOCD"&lt;/span&gt;
  &lt;span class="nx"&gt;cluster_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;eks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cluster_name&lt;/span&gt;

  &lt;span class="nx"&gt;configuration&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;argo_cd&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;aws_idc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;idc_instance_arn&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aws_ssoadmin_instances&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arns&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="nx"&gt;namespace&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"argocd"&lt;/span&gt;

      &lt;span class="nx"&gt;rbac_role_mapping&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
        &lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ADMIN"&lt;/span&gt;

        &lt;span class="nx"&gt;identity&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
          &lt;span class="nx"&gt;id&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aws_identitystore_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aws_administrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;group_id&lt;/span&gt;
          &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SSO_GROUP"&lt;/span&gt;
        &lt;span class="p"&gt;}]&lt;/span&gt;
      &lt;span class="p"&gt;}]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En mi caso, para ir rápido con la &lt;strong&gt;PoC&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;He usado mi grupo &lt;strong&gt;Admin&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;He desplegado el cluster &lt;strong&gt;en la misma cuenta donde tengo IAM Identity Center&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si queréis hacerlo &lt;strong&gt;cross-account&lt;/strong&gt;, tendrás que crear un &lt;strong&gt;Role&lt;/strong&gt; que permita a Terraform leer los grupos de Identity Center.&lt;/p&gt;

&lt;p&gt;Dicho esto, vamos a la práctica de cómo quedaría esta parte.&lt;/p&gt;

&lt;p&gt;Una vez desplegado nuestro cluster con todos los requisitos, podemos observar que tenemos argocd funcionando en nuestra pestaña de Capabilities.&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%2Fgke8h4spxi6iu577bw0t.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%2Fgke8h4spxi6iu577bw0t.png" alt="Capabilities" width="800" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos conectamos a nuestro endpoint (Argo API endpoint).&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%2Fij2f6iecme95kctgsrfr.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%2Fij2f6iecme95kctgsrfr.png" alt="Endpoint" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como hemos comentado, la integración con SSO es super rápida, solo indica qué roles quieres usar y el mapping y listo!&lt;br&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%2Fly39x8otgqrsdwitgtqo.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%2Fly39x8otgqrsdwitgtqo.png" alt="SSO-boton" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Introducimos nuestras credenciales de AWS.&lt;br&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%2F5c6876lvpoamv4i8oqwn.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%2F5c6876lvpoamv4i8oqwn.png" alt="Credenciales" width="643" height="572"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y ya tenemos argo cd funcionando.&lt;/p&gt;
&lt;h2&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%2F6hm1u2u4n9w72kn1nb0t.png" alt="Argo-UI" width="800" height="250"&gt;
&lt;/h2&gt;
&lt;h2&gt;
  
  
  Lo mejor de todo
&lt;/h2&gt;

&lt;p&gt;Cuando lances el código:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se desplegará &lt;strong&gt;ArgoCD como capability&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Tendrás &lt;strong&gt;SSO funcionando&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Podrás loguearte directamente&lt;/li&gt;
&lt;li&gt;Y empezar a desplegar tus aplicaciones&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y ahora viene lo mejor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pods &lt;span class="nt"&gt;-A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F9ktwweizimcejau6rtih.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%2F9ktwweizimcejau6rtih.png" alt="kubectl" width="620" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No verás ni un solo pod de ArgoCD.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Porque &lt;strong&gt;ArgoCD está ejecutándose en el control plane de EKS&lt;/strong&gt;, no dentro de tu cluster.&lt;/p&gt;

&lt;p&gt;Llevamos varios posts hablando de ArgoCD, cual es el mejor diseño, como instalarlo, como configurarlo, como gestionarlo y de repente llega un update de AWS y nos dice y si lo hago por ti? Encima con SSO de serie que más podemos pedir? 😁&lt;/p&gt;

&lt;p&gt;Cabe remarcar como siempre que el objetivo es simplemente una PoC, para PROD deberíamos de revisar el tema de dominio privado, clusters adicionales, AppProjects por equipo... pero de eso ya hemos hablado en varias otros posts que podéis recuperar desde #AWTwinS.&lt;/p&gt;

&lt;p&gt;Como siempre, cualquier feedback es bienvenido! o por aquí, por LinkedIn o donde podáis encontrarnos! Nos vemos por los eventos! &lt;/p&gt;

</description>
      <category>aws</category>
      <category>argocd</category>
      <category>awstwins</category>
      <category>eks</category>
    </item>
    <item>
      <title>Sandbox: tu Rent-a-Cloud en AWS y evita gastar 💸 sin sorpresas.</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Wed, 25 Jun 2025 11:25:27 +0000</pubDate>
      <link>https://dev.to/aws-espanol/sandbox-tu-rent-a-cloud-en-aws-y-evita-gastar-sin-sorpresas-3i5j</link>
      <guid>https://dev.to/aws-espanol/sandbox-tu-rent-a-cloud-en-aws-y-evita-gastar-sin-sorpresas-3i5j</guid>
      <description>&lt;p&gt;Y después de renovar por segundo año como Community Builders, de pasar por mil rachas, eventos y líos varios… volvemos a estar aquí con algo que durante años tuvimos que montar a mano, a base de herramientas sueltas, scripts y, por supuesto, discusiones con los solicitantes de cuentas temporales en AWS.&lt;/p&gt;

&lt;p&gt;Hoy vuelve #awtwins a enseñarte una solución que automatiza por fin los entornos efímeros en AWS: cuentas temporales, controladas, limpias, y con presupuesto, como si alquilasemos un coche 🚗&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 El clásico problema del entorno temporal
&lt;/h2&gt;

&lt;p&gt;Pedir cuentas temporales en AWS suele implicar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🧩 Mucha gestión manual&lt;/li&gt;
&lt;li&gt;🔐 Poca trazabilidad&lt;/li&gt;
&lt;li&gt;💸 Riesgo de gasto sin control&lt;/li&gt;
&lt;li&gt;🧹 Y limpieza… si alguien del equipo se acuerda (ehem, ehem).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes usábamos Nuke (tenemos algún post sobre eso también) para limpiar las cuentas y reutilizarlas, pero… &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/aws-espanol/ahorra-en-tus-cuentas-de-aws-usa-aws-nuke-para-limpiar-recursos-eio"&gt;Awtwins-nuke&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Cómo garantizabas que no eliminabas algo que no debías?&lt;br&gt;
¿Y si el developer necesitaba más tiempo con la cuenta?&lt;br&gt;
¿O quería acceso a otros servicios no permitidos? &lt;/p&gt;

&lt;h2&gt;
  
  
  Innovation Sandbox on AWS
&lt;/h2&gt;

&lt;p&gt;Amazon ha publicado una solución preconfigurada que automatiza y gestiona:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creación y control de entornos efímeros&lt;/li&gt;
&lt;li&gt;Asignación temporal de cuentas a usuarios&lt;/li&gt;
&lt;li&gt;Aplicación de Service Control Policies&lt;/li&gt;
&lt;li&gt;Presupuestos con alertas&lt;/li&gt;
&lt;li&gt;Reciclaje automático de cuentas con AWS Nuke&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y aquí viene lo divertido: tenemos una UI propia para gestionar todo, inicio de sesión con SSO y posibilidad de extender la solución a medida.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Cómo lo desplegamos
&lt;/h2&gt;

&lt;p&gt;Como no podía ser de otra forma, dejamos la documentación por aquí (está bastante bien explicada, pero me gustaría remarcar un par de cositas).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/solutions/latest/innovation-sandbox-on-aws/solution-overview.html" rel="noopener noreferrer"&gt;Innovation-Sandbox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔸 &lt;strong&gt;Paso 1&lt;/strong&gt; – Cumplir con todos los pre-requisitos (IMPORTANTE).&lt;br&gt;
🔸 &lt;strong&gt;Paso 2&lt;/strong&gt; – Lanzar stacks (AccountPool + IDC) en tu cuenta de management&lt;br&gt;
🔸 &lt;strong&gt;Paso 3&lt;/strong&gt; – Lanzar stacks (Data + Compute) en tu cuenta de gestión de la solución. &lt;br&gt;
🔸 &lt;strong&gt;Paso 4&lt;/strong&gt; – Completar Post-deployment Configuration&lt;br&gt;
🔸 &lt;strong&gt;Paso 5&lt;/strong&gt; - Generar cuentas y añadirlas a la OU Active&lt;/p&gt;

&lt;p&gt;🚨 Esta solución no genera las cuentas del Pool automáticamente.**&lt;/p&gt;

&lt;p&gt;🚨 Aseguraros desplegar los stacks en las cuentas que toca, si no, deberéis de redesplegar toda la solución, ya que no funcionará.**&lt;/p&gt;




&lt;p&gt;Una vez realizados estos pasos, podemos ir al stack de Compute (en la sección Outputs), copiar el endpoint, pegarlo en el navegador y ya tenemos nuestra solución funcionando.&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%2F8ioev8lqlgqepdk0q5lr.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%2F8ioev8lqlgqepdk0q5lr.png" alt="Cloudfront" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al acceder con nuestro usuario SSO con permisos de ADMIN, veremos el panel principal de la solución, desde donde podremos gestionar todo el entorno.&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%2Fipldy68eb1wl435wap8a.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%2Fipldy68eb1wl435wap8a.png" alt="Image description" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro, crearemos nuestro lease template, que define las condiciones de uso de las cuentas sandbox (duración, permisos, etc.).&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%2F4h0mky47ke8k1diu16yd.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%2F4h0mky47ke8k1diu16yd.png" alt="Image description" width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro de este template encontramos varias opciones muy interesantes.&lt;br&gt;
Definimos un título para nuestro Lease.&lt;br&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%2Fcbgj9nkg0irb7s0alan2.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%2Fcbgj9nkg0irb7s0alan2.png" alt="new-lease-title" width="800" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuramos un presupuesto (budget) y definimos las acciones que queremos ejecutar cuando se supere el límite establecido.&lt;br&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%2Fcettvhhhr2zh8nru9esf.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%2Fcettvhhhr2zh8nru9esf.png" alt="Image description" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Definimos cuánto tiempo estará activa la cuenta antes de ser reciclada y las acciones.&lt;br&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%2Folmtpqsniof15vrau23t.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%2Folmtpqsniof15vrau23t.png" alt="Image description" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con el template ya creado y usando un usuario Member, accedemos al endpoint de cloudfront para ver que ya podemos solicitar un nuevo lease utilizando las plantillas definidas desde el rol de administrador.&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%2Fikou0j3b2tlssciad07h.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%2Fikou0j3b2tlssciad07h.png" alt="Image description" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez que el administrador haya aprobado la solicitud de cuenta, podremos ver nuestros leases (en mi caso, aparecen dos, por las pruebas que he realizado para este post).&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%2Fvmfw2wzqvhc9xtzb79ff.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%2Fvmfw2wzqvhc9xtzb79ff.png" alt="Image description" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En cuanto el administrador nos lo apruebe podremos acceder a nuestra cuenta desde el panel.&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%2F91zm4ublmnf13bxu1l3t.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%2F91zm4ublmnf13bxu1l3t.png" alt="Image description" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ya podemos trabajar con nuestra cuenta, sin miedo a romper nada… ni a gastar de más y lo más importante de todo, una vez el tiempo o el budget definido expira, esta cuenta automáticamente vuelve al pool de cuentas disponibles, por lo que otro usuario puede solicitarla.&lt;/p&gt;

&lt;p&gt;Os recomendamos revisar todo lo que ofrece AWS en su documentación (¡vale la pena!), y a curiosear cómo se pueden ajustar presupuestos, políticas y configuraciones usando AWS AppConfig de forma dinámica donde también se define el e-mail al que le llegarán las notificaciones.&lt;/p&gt;

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

&lt;p&gt;Montar un entorno de sandbox temporal en AWS ya no tiene por qué ser una pesadilla de tools, correos, discusiones y gastos imprevistos.&lt;/p&gt;

&lt;p&gt;Con la solución de Innovation Sandbox, podemos ofrecer cuentas aisladas, temporales y seguras, con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;    Presupuestos controlados,&lt;/li&gt;
&lt;li&gt;    Restricciones automáticas,&lt;/li&gt;
&lt;li&gt;    Limpieza garantizada,&lt;/li&gt;
&lt;li&gt;    Y todo gestionado desde una interfaz, con posibilidad de customizar según nuestras necesidades&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como siempre, cualquier cosa nos podéis encontrar por Linkedin o incluso dejarnos vuestros comentarios por aquí! :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/solutions/latest/innovation-sandbox-on-aws/solution-overview.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/solutions/latest/innovation-sandbox-on-aws/solution-overview.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>sandbox</category>
      <category>awtwins</category>
      <category>awsaccount</category>
    </item>
    <item>
      <title>"Desplegando Apps con Argo CD: ¿Application o ApplicationSet?"</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Tue, 25 Feb 2025 23:30:48 +0000</pubDate>
      <link>https://dev.to/aws-espanol/desplegando-apps-con-argocd-application-o-applicationset-55fn</link>
      <guid>https://dev.to/aws-espanol/desplegando-apps-con-argocd-application-o-applicationset-55fn</guid>
      <description>&lt;p&gt;Bien, finalmente una serie de 3 capítulos, siendo este el último, donde hemos ido tratando diferentes cositas de como poder gestionar tus apps en EKS usando Argo CD, desde el inicio, hasta el "final", nos gusta dejar siempre el "final" entre comillas, porque como es obvio, quedan muchísimas cosas pendientes.&lt;/p&gt;

&lt;p&gt;En este post, nos vamos a centrar en algunos de los recursos y estrategias básicas pero no menos importantes que ofrece Argo CD: Applications, ApplicationSets, Generators, Argo CD Projects y Sync Policies. Hemos elegido estos porque permiten una configuración bastante buena y flexible, manteniendo la simplicidad y accesibilidad para todos los usuarios, sin entrar en detalles complejos/avanzados, ya que nuestra idea no es dar un master sobre Argo CD. Sin embargo, es importante mencionar que Argo CD incluye muchas otras funcionalidades que amplían aún más su potencial, RBAC, Notificaciones, Webhooks, ConfigMaps, Secrets...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application:&lt;/strong&gt; unidad básica de gestión en Argo CD, representa una aplicación que se sincroniza desde un repositorio GIT hacia un clúster de Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ApplicationSet:&lt;/strong&gt; Recurso avanzado que permite definir múltiples Applications a partir de un template y una fuente dinámica de datos, como una lista, clústeres, o un generador de combinaciones. Ideal para gestionar configuraciones repetitivas o despliegues multi entorno.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generators:&lt;/strong&gt; Herramientas que crean Applications automáticamente según entradas dinámicas. Un Matrix generator combina varias listas de datos para generar configs un poco complejas. Otras usan listas simples, clústeres registrados o consultas a archivos JSON o YAML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ArgoCD Projects&lt;/strong&gt;: Son una forma de agrupación y limitación de Applications en Argo CD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sync Policies&lt;/strong&gt;: Controlan cómo y cuándo ArgoCD sincroniza los recursos en Kubernetes.&lt;/p&gt;

&lt;p&gt;Como siempre... para entenderlo mejor, vamos con un ejemplo.&lt;/p&gt;

&lt;p&gt;Antes de empezar a desplegar aplicaciones con Argo CD, necesitamos definir un Project. Un Project en Argo CD actúa como un espacio lógico que nos permite organizar y gestionar nuestras aplicaciones de manera más eficiente. Es una forma de limitar qué repositorios, clústeres, namespaces y tipos de recursos pueden usar las aplicaciones asociadas a este proyecto.&lt;/p&gt;

&lt;p&gt;En este ejemplo, vamos a crear un proyecto llamado default que permite el acceso a cualquier repositorio Git y cualquier clúster Kubernetes. Esto nos servirá como base para gestionar nuestras aplicaciones sin restricciones iniciales, pero si vas a usarlo en PROD, no lo hagas!&lt;/p&gt;

&lt;p&gt;projects/project.yaml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: default
  namespace: argocd
spec:
  description: Default project for managing applications
  sourceRepos:
  - '*'
  destinations:
  - namespace: '*'
    server: '*'
  clusterResourceWhitelist:
  - group: '*'
    kind: '*'
  namespaceResourceWhitelist:
  - group: '*'
    kind: '*'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para aplicarlo y no complicarnos ahora con temas de automatización (que ya tocaremos en futuros posts o proyectos), simplemente lo lanzaremos con un buen kubectl&lt;/p&gt;

&lt;p&gt;kubectl apply -f projects/project.yaml&lt;/p&gt;

&lt;p&gt;Bien, una vez tenemos el project necesitamos las apps, y como las configuramos? Pues definiendo un application, que no deja de ser otro yaml que define como se va a desplegar la aplicación desde un repo GIT en un cluster que tu indiques.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: test-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/tu-usuario/argocd-examples
    targetRevision: main
    path: apps/test
    helm:
      valueFiles:
      - envs/staging/staging-values.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: test-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hasta ahora, hemos desplegado una aplicación utilizando un recurso de tipo Application, lo cual es bueno para proyectos pequeños o con pocas aplicaciones. Sin embargo, cuando necesitas gestionar muchas aplicaciones, o múltiples entornos para las mismas aplicaciones, este enfoque se vuelve poco práctico.&lt;/p&gt;

&lt;p&gt;¿Te imaginas tener que crear y mantener 100 archivos YAML diferentes? Eso no solo genera complejidad, sino que aumenta el riesgo de errores y dificulta la escalabilidad del proyecto.&lt;/p&gt;

&lt;p&gt;Aquí es donde el ApplicationSet gana puntos. Este recurso avanzado de Argo CD permite definir múltiples aplicaciones a partir de un único archivo YAML utilizando plantillas y fuentes de datos dinámicas. En lugar de definir manualmente cada aplicación, el ApplicationSet detecta cambios automáticamente en tu repositorio y genera las aplicaciones correspondientes, ahorrándote tiempo y esfuerzo.&lt;/p&gt;

&lt;p&gt;¿Qué es un ApplicationSet y cómo funciona?&lt;/p&gt;

&lt;p&gt;Un ApplicationSet es un recurso que combina:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Template: Define cómo debería ser cada aplicación generada (por ejemplo, configuración común para todas las aplicaciones en un entorno).&lt;/li&gt;
&lt;li&gt;    Generator: Proporciona los datos dinámicos para generar múltiples aplicaciones. Algunos generadores comunes son:
     Git: Detecta carpetas en un repositorio.
     List: Usa una lista fija de valores.
     Matrix: Combina múltiples listas para generar configuraciones más complejas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El resultado es un conjunto de aplicaciones creadas automáticamente según las reglas definidas en el ApplicationSet.&lt;/p&gt;

&lt;p&gt;Supongamos que queremos gestionar múltiples aplicaciones en un entorno production. Con un ApplicationSet, podemos definir un archivo que detecte todas las carpetas en apps/ y genere automáticamente aplicaciones para cada una de ellas.&lt;br&gt;
Archivo YAML: prod-appset.yaml&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: prod-appset
  namespace: argocd
spec:
  generators:
  - git:
      repoURL: https://github.com/tu-usuario/argocd-examples
      revision: main
      directories:
      - path: apps/*
  template:
    metadata:
      name: '{{path.basename}}-prod'
    spec:
      project: default
      source:
        repoURL: https://github.com/tu-usuario/argocd-examples
        targetRevision: main
        path: '{{path}}/templates'
        helm:
          valueFiles:
          - '{{path}}/envs/production/values.yaml'
      destination:
        server: https://kubernetes.default.svc
        namespace: production
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cómo desplegar el ApplicationSet&lt;/p&gt;

&lt;p&gt;Para aplicar este archivo y permitir que Argo CD genere automáticamente las aplicaciones, simplemente ejecuta:&lt;/p&gt;

&lt;p&gt;kubectl apply -f appsets/prod-appset.yaml&lt;/p&gt;

&lt;p&gt;Ahora que hemos desplegado tanto una Application como un ApplicationSet, es buen momento para comparar ambas opciones y entender sus diferencias clave. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Aspecto&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Application&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;ApplicationSet&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Definición&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Un archivo por aplicación y entorno.&lt;/td&gt;
&lt;td&gt;Un archivo por entorno que gestiona múltiples aplicaciones.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Automatización&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No soporta detección dinámica.&lt;/td&gt;
&lt;td&gt;Detecta automáticamente nuevas carpetas o entradas.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Configuración común&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requiere duplicación en YAML.&lt;/td&gt;
&lt;td&gt;Centralizada en un único template.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Escenarios ideales&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Proyectos pequeños con pocas apps.&lt;/td&gt;
&lt;td&gt;Proyectos grandes o con entornos dinámicos.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Con ApplicationSets, puedes simplificar drásticamente la gestión de aplicaciones en proyectos grandes o dinámicos. Al reducir el esfuerzo manual y garantizar la consistencia entre aplicaciones, este enfoque no solo te ahorra tiempo, sino que también mejora la escalabilidad de tu proyecto.&lt;/p&gt;

&lt;p&gt;Como hemos comentado, las applications son perfectas para casos simples pero los ApplicationSets son la herramienta perfecta para quienes buscan automatizar y facilitar la gestión de múltiples entornos y servicios.&lt;/p&gt;

&lt;p&gt;PD: Como siempre, dependerá de las necesidades de tu proyecto.&lt;/p&gt;

&lt;p&gt;Con esto, vamos a dejar esta mini serie aquí, una vez desplegadas las aplicaciones con Applications y ApplicationSets, porque si seguimos, ¡no acabaríamos nunca! Además, ya sabéis que la gente PRO de verdad tiene sus cursos y certificaciones, y nosotros necesitamos dedicar más tiempo a los recursos nuevos de AWS y las automatizaciones. 😊&lt;/p&gt;

&lt;p&gt;Nota: No hemos profundizado mucho ni siquiera entrado a hablar del patrón App of Apps en este post, porque no queríamos extender esta serie en mil capítulos. Sin embargo, si os interesa y queréis profundizar más en estos temas más avanzados, desde Codefresh podéis acceder a sus cursos oficiales con certificación, donde se incluyen laboratorios prácticos para aprender en un entorno controlado. ¡Totalmente recomendados! 🚀&lt;/p&gt;

&lt;p&gt;Y ahora sí, ¡a seguir desplegando con estilo! 😉&lt;/p&gt;

&lt;p&gt;Dejamos el link por aquí: &lt;a href="https://learning.codefresh.io/" rel="noopener noreferrer"&gt;https://learning.codefresh.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>awtwins</category>
      <category>aws</category>
      <category>kubernetes</category>
      <category>argocd</category>
    </item>
    <item>
      <title>🚀Gestiona tus aplicaciones en EKS con Argo CD 🚀</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Thu, 26 Sep 2024 14:58:28 +0000</pubDate>
      <link>https://dev.to/aws-espanol/gestiona-tus-aplicaciones-en-eks-con-argocd-383b</link>
      <guid>https://dev.to/aws-espanol/gestiona-tus-aplicaciones-en-eks-con-argocd-383b</guid>
      <description>&lt;p&gt;Como ya venimos avisando hace un tiempo #AwTwins nos lanzamos a crear una serie de como gestionar clústers EKS. &lt;/p&gt;

&lt;p&gt;Si has trabajado en varias empresas, probablemente habrás notado que cada una gestiona las aplicaciones en los clústers a su manera, algunas utilizan unos con pipelines que hacen un kubectl apply, otros prefieren hacer un helm install a mano, actualizaciones manuales y un largo... Pero nosotros que somos fans de Gitops, siempre buscamos facilitarnos y dar más control y autonomía a los equipos y clústers. Por eso hoy venimos a hablarte de Argo CD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Y qué es Argo CD?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es una herramienta declarativa de Gitops hecha para gestionar aplicaciones en Kubernetes de forma continua. La idea es que Argocd se encargue de mantener sincronizado el estado real de las aplicaciones y recursos en el clúster con lo que existe en GIT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Características principales:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modelo GitOps:&lt;/strong&gt; El estado de las aplicaciones se gestiona a través de repositorios GIT.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatización de despliegues:&lt;/strong&gt; Despliegues automáticos o manuales,flexibilidad ante todo! &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rollbacks y sincronización automática:&lt;/strong&gt; Argo cd puede identificar automáticamente las diferencias entre el estado real de los recursos en el clúster y el estado deseado en GIT y permite realizar rollbacks o sincronizaciones automáticas cuando sea necesario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Control de acceso con RBAC:&lt;/strong&gt; Argo CD ofrece un control granular de acceso, asegurando que diferentes equipos tengan acceso solo a las aplicaciones y entornos que les corresponden. En otras palabras, tocas lo que tienes que tocar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Soporte multiple formato:&lt;/strong&gt; Argo CD es compatible con Helm Charts, Kustomize,YAML, Jsonnet. Menos problemas! &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integración continua (CI/CD):&lt;/strong&gt; Se integra fácilmente con pipelines CI/CD.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interfaz gráfica:&lt;/strong&gt; Permitiendo ver el estado de las aplicaciones en el cúster y su sincronización en el repositorio GIT en tiempo real.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Patrones de implementación de Argo CD en EKS&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dependiendo de la escala y la complejidad de tu infraestructura, puedes elegir diferentes patrones para implementar Argo CD en tu entorno de Amazon EKS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Una instancia de Argo CD gestionando todos los clústers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este patrón implica utilizar una sola instancia de Argo CD para gestionar múltiples clústers de Kubernetes. Instalas un argo cd en un clúster "master" y desde ahí te encargas de desplegar apps en todos los otros clústers.&lt;/p&gt;

&lt;p&gt;Ventajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Centralización:&lt;/strong&gt; Tienes una sola interfaz desde donde puedes gestionar múltiples clústers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Menor trabajo operativo:&lt;/strong&gt; Solo una instancia de Argo CD que mantener, lo que reduce costes operacionales.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Facilidad de monitoring:&lt;/strong&gt; Todos los despliegues están visibles y accesibles desde un solo panel de control.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fwiauo8fbxu80bvpg90vk.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%2Fwiauo8fbxu80bvpg90vk.png" alt="ArgoCD_multicluster" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Una instancia de Argo CD por cada clúster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En este caso, cada clúster de Kubernetes tiene su propia instancia de Argo CD independiente. Esto es lo que podríamos llamar un patrón de Single-Tenant, ya que cada instancia está aislada y no interactúa con otras instancias de Argo CD.&lt;/p&gt;

&lt;p&gt;Ventajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Aislamiento:&lt;/strong&gt; Cada clúster y su Argo CD están completamente aislados, por lo que los problemas en un clúster no afectarán a los demás.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Escalabilidad:&lt;/strong&gt; Cada clúster tiene su propia instancia de Argo CD, por lo que el crecimiento en el número de clústers o aplicaciones no impacta en el rendimiento de otras instancias.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seguridad:&lt;/strong&gt; Puedes aplicar configuraciones personalizadas de seguridad para cada clúster y su Argo CD.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Ftr2lps8v8lmgclsr6awo.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%2Ftr2lps8v8lmgclsr6awo.png" alt="Argocd_x_cluster" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Un Argo CD que despliega otros Argo CDs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;¿Que fué primero el huevo o la gallina? En este caso, un Argo CD "master" se encarga de gestionar y desplegar otras instancias de Argo CD en incluso en el mismo. Esta estrategia es útil cuando tienes un entorno altamente distribuido con múltiples clústers que necesitan su propia instancia de Argo CD, que deben ser  gestionados desde un punto central.&lt;/p&gt;

&lt;p&gt;Ventajas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Escalabilidad:&lt;/strong&gt; Permite gestionar y desplegar muchas instancias de Argo CD desde un único lugar, lo que es útil en grandes organizaciones con cientos de clústers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Descentralización:&lt;/strong&gt; Cada clúster tiene su propio Argo CD, pero puedes automatizar y coordinar su gestión desde el Argo CD maestro.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Facilita el gobierno:&lt;/strong&gt; Puedes aplicar políticas globales desde el Argo CD "master" mientras permites personalización a nivel de clúster.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2F93lrzj7dg0fmraeguopt.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%2F93lrzj7dg0fmraeguopt.png" alt="Full_Argocd" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cada uno de estos patrones de implementación de Argo CD tiene ventajas y desventajas específicas, y la elección depende del tamaño de la infraestructura y los requisitos operativos de tu organización. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Próximo episodio:&lt;/strong&gt; Implementaremos Argo CD en un clúster de Amazon EKS utilizando Terraform, lo que nos permitirá desplegar una primera versión funcional de Argo CD y comenzar a jugar con sus capacidades. &lt;/p&gt;

&lt;p&gt;🚨 Aquí venimos a jugar, así que ¡Keep Ready! 🚨&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awtwins</category>
      <category>eks</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>🎵 Desplegando infraestructura en AWS desde Backstage 🎵</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Tue, 13 Aug 2024 11:15:05 +0000</pubDate>
      <link>https://dev.to/aws-espanol/desplegando-infraestructura-en-aws-desde-backstage-1aml</link>
      <guid>https://dev.to/aws-espanol/desplegando-infraestructura-en-aws-desde-backstage-1aml</guid>
      <description>&lt;p&gt;👋¡Estamos de vuelta! 👋 Después de algún otro tiempo desaparecidos y alguna que otra certificación en el bolsillo y algún que otro proyecto nuevo en mente. ¡Vamos a darle caña! 🚀&lt;/p&gt;

&lt;p&gt;¿Cuántas veces hemos discutido sobre si la infraestructura debería gestionarse por un lado y la aplicación por otro, si todo en el mismo sitio, o en dos,tres, cuatro portales diferentes, hasta acabar volviéndote loco sin saber que usar. Vamos a simplificar las cosas y ver cómo podemos usar el mismo frontal que los desarrolladores para desplegar un "template" de Terraform recogiendo variables directamente desde allí. 🤯&lt;/p&gt;

&lt;p&gt;En primer lugar me gustaría dar dos pinceladas sobre &lt;strong&gt;&lt;em&gt;Backstage&lt;/em&gt;&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;Si todavía no sabes que es, aún por todo lo que está siendo sonado, te estás perdiendo algo interesante. Backstage es una plataforma de desarrollo open-source creada por Spotify. Te permite hacer un montón de cosas diferentes, desde microservicios hasta documentación, e incluso gestionar infraestructura. En este post nos vamos a centrar en cómo usar Backstage para desplegar infraestructura en AWS con Terraform. ¡Al lio!&lt;/p&gt;

&lt;p&gt;En este caso tal y cómo muchos ya sabéis, nosotros no somos desarrolladores al estilo, así que hemos necesitado alguna ayuda para poder configurar un backstage de TEST, ¡Y menuda ayuda! Aquí os dejamos una serie de tutoriales de &lt;strong&gt;[return(GIS)]-Gisela&lt;/strong&gt; donde te explica una infinidad de cosas y os pueden ayudar con la configuración, personalización y despliegue de vuestro backstage. 💯¡Totalmente recomendado! 💯&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=GSrlbgOFlsc&amp;amp;list=PLO9JpmNAsqM6RttdyDmPyW0vR_zf20ETI" rel="noopener noreferrer"&gt;Backstage - return(GIS)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En nuestro caso vamos a simplificar todo muchísimo para no extendernos una infinidad y asegurarnos de que realmente podemos lanzar nuestra infraestructura desde un portal como Backstage.&lt;/p&gt;

&lt;p&gt;Estructura del Repositorio que contiene el template&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3-template/
├── terraform/
│   └── s3.yaml   
└── catalog-info.yaml  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estructura repositorio que contiene el terraform y la pipeline&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apply-terraform/
├── .github/
│   └── workflows/
│       └── terraform-deploy.yml
└── backend.tf
└── main.tf
└── provider.tf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos a explicar ahora que contiene cada uno de estas configuraciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Catalog-info.yaml&lt;/strong&gt;: Este archivo básicamente es un mapa para Backstage, le indica donde dónde encontrar nuestro template en Github. Lo subes al repositorio, lo importas a Backstage, ¡y a funcionar! ¡Ya tienes tu template disponible para seleccionar en backstage!
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: backstage.io/v1alpha1
kind: Location
metadata:
  name: s3-template-location
  description: Repositorio en GitHub para el template de creación de buckets S3 con Terraform
  annotations:
    backstage.io/managed-by: backstage
spec:
  targets:
  - terraform/s3.yaml

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Template&lt;/strong&gt;: Este template básicamente le dice a Backstage cómo crear un bucket S3. Los usuarios entrarán, rellenarán un par de campos y backstage se encarga de todo lo demás!
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: s3-bucket-terraform
  title: S3 Bucket con Terraform
  description: Crea un bucket S3 utilizando Terraform
spec:
  owner: user:guest
  type: service
  parameters:
  - title: configurar bucket s3
    required:
    - s3name
    - acl
    properties:
      s3name:
        title: s3name
        type: string
        description: Unique name of the component
        ui:autofocus: true
        ui:options:
          rows: 5
      acl:
        title: acl
        type: string
        description: private
        ui:autofocus: true
        ui:options:
          rows: 5

  steps:
  - id: github-action
    name: github-action
    action: github:actions:dispatch
    input:
      workflowId: terraform-deploy.yml
      repoUrl: 'github.com?repo=apply-terraform&amp;amp;owner=**YOURUSER**'
      branchOrTagName: "main"
      workflowInputs:
        s3name: ${{ parameters.s3name }}
        acl: ${{ parameters.acl }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bien, ya tendríamos la parte de backstage pura y dura, vamos a darle uso con una prueba concreta. En este caso, vamos a utilizar un bucket S3 para la PoC. Necesitamos definir algunos archivos de Terraform y una pipeline que los depliegue usando las variables que recogemos. Para ello, crearemos los siguientes archivos en nuestro segundo repositorio: &lt;strong&gt;apply-terraform&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;main.tf&lt;/strong&gt;: por simplificar pondremos la creación usando el siguiente código:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_s3_bucket" "example" {
  bucket = var.s3name
  acl    = var.acl
}

variable "s3name" {
  type = string
}

variable "acl" {
  type = string
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;backend.tf&lt;/strong&gt;: definimos nuestro backend para el estado
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform{
    backend "s3" {
        bucket = "yourbuckets3"
        encrypt = true
        region = "eu-west-1"
        key = "terraform.tfstate"
    }
}

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

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;provider.tf&lt;/strong&gt;: provider a utilizar
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~&amp;gt; 5.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  region = "eu-west-1"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y por último la pipeline, la cuál hace exactamente lo que necesitamos: recoge los inputs (&lt;strong&gt;s3name&lt;/strong&gt; y &lt;strong&gt;acl&lt;/strong&gt;) que le pasamos desde Backstage y luego usa Terraform para crear el S3 s3 en AWS. 💥¡Magia! 💥&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name: Terraform pipeline

on:
  workflow_dispatch: 
    inputs:
      s3name:
        description: 'Name of s3 bucket'
        required: true
      acl:
        description: 'ACL'
        required: true
env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
jobs:
  apply_s3:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout codigo
      uses: actions/checkout@v2

    - name: Setup Terraform
      uses: hashicorp/setup-terraform@v1

    - name: Terraform Init
      run: terraform init

    - name: Terraform apply
      run: terraform apply -auto-approve -var s3name=${{ github.event.inputs.s3name }} -var acl=${{ github.event.inputs.acl }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este caso muy concreto el template nos solicitará los dos parametros que queremos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktfeuyswyg91th3yup5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fktfeuyswyg91th3yup5q.png" alt="Backstage variables" width="800" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11ffl37pbde75fx2bu9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11ffl37pbde75fx2bu9k.png" alt="Pipeline" width="693" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En esta PoC, como siempre, hemos ido por la vía rápida, pero es importante mencionar que solo hemos tocado un 1% de lo que Backstage puede ofrecer. Por ejemplo, no hemos integrado el registro de componentes en el catálogo de Backstage ni configurado pipelines CI/CD para monitorizar flujos directamente desde Backstage. Si quieres más información, te recomiendo que revises la documentación oficial de Backstage o le eches un vistazo a los videos mencionados anteriormente para llevar tu configuración de Backstage al siguiente nivel y personalizarlo a tu gusto. &lt;/p&gt;

&lt;p&gt;Nosotros hemos usado la acción &lt;strong&gt;github:actions:dispatch&lt;/strong&gt;, pero Backstage soporta un montón de otras acciones para poder hacer de tu infra algo mejor que lo que hace este post 🥵&lt;/p&gt;

&lt;p&gt;Algunos links interesantes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://backstage.io/docs/features/techdocs/" rel="noopener noreferrer"&gt;Documentación oficial&lt;/a&gt;&lt;br&gt;
&lt;a href="https://backstage.io/docs/features/software-templates/writing-custom-actions" rel="noopener noreferrer"&gt;Actions&lt;/a&gt;&lt;br&gt;
&lt;a href="https://backstage.io/docs/features/techdocs/configuring-ci-cd/" rel="noopener noreferrer"&gt;Generate Docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👋 Como siempre, esperamos recibir comentarios, issues y sugerencias para seguir mejorando! 🫵&lt;/p&gt;

&lt;p&gt;¡Nos vemos en el siguiente! &lt;/p&gt;

</description>
      <category>awtwins</category>
      <category>aws</category>
      <category>community</category>
      <category>backstage</category>
    </item>
    <item>
      <title>💸Ahorra en tus cuentas de AWS. usa 💥aws-nuke💥 para limpiar recursos.💸</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Wed, 22 May 2024 06:56:44 +0000</pubDate>
      <link>https://dev.to/aws-espanol/ahorra-en-tus-cuentas-de-aws-usa-aws-nuke-para-limpiar-recursos-eio</link>
      <guid>https://dev.to/aws-espanol/ahorra-en-tus-cuentas-de-aws-usa-aws-nuke-para-limpiar-recursos-eio</guid>
      <description>&lt;p&gt;Sí, lo sabemos, estos últimos meses hemos estado desaparecidos, pero con razón: ¡estábamos preparándonos para la certificación de AWS! ¡Y la aprobamos los dos a la primera! 🎉&lt;/p&gt;

&lt;p&gt;Aunque no hemos estado completamente fuera del radar. Tenemos un montón de temas interesantes que queremos compartir con vosotros, y, claro, ¡nos veremos en el AWS Summit Madrid como todos los años! 🫵&lt;/p&gt;

&lt;p&gt;Hemos estado en un montón de proyectos donde, ya sea por requisitos específicos o simplemente para seguir buenas prácticas de despliegue, siempre hacemos la PoC en la cuenta de PoC. Después, pasamos a dev, test, pre... y así seguimos el ritual de las cuentas.&lt;/p&gt;

&lt;p&gt;El problema es que, muchas veces, nos olvidamos de eliminar los recursos en esas cuentas. ¿Y qué pasa después? ¡Exacto! Nos llega la factura y nos da un infarto al ver el palazo que nos meten. 💸😂&lt;/p&gt;

&lt;p&gt;Para intentar no morir en el acto, podemos usar AWS-NUKE:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/automate-deletion-of-aws-resources-by-using-aws-nuke.html" rel="noopener noreferrer"&gt;AWS-NUKE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-samples/aws-nuke-account-cleanser-example/tree/main" rel="noopener noreferrer"&gt;REPO&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es cierto que podríamos descargar el binario directamente y ejecutarlo desde donde queramos, pero ya sabes, no somos muy de andar ejecutando cosas en local. Preferimos la opción mencionada arriba. Con un toque de CloudFormation, ¡voilà! Listo para hacer limpieza en AWS.&lt;/p&gt;

&lt;p&gt;Como se puede ver en el repositorio, tenemos un ficherito llamado nuke-cfn-stack.yaml, el cual nos ayudará en nuestro despliegue. Así que, IDE en mano, ¡a darle caña! 📒 (Siento que salgan palabras con subrayado, pero, dados los mil plugins que tengo en este portátil, se me van subrayando).&lt;/p&gt;

&lt;p&gt;⏳ Indicaremos en el CRON la hora a la que queremos que se ejecute nuestra limpieza. ⏳&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%2F4k7fytgs9kffxngn6olq.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%2F4k7fytgs9kffxngn6olq.png" alt="CRON"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📩 Indicaremos un e-mail al que queremos que nos lleguen las notificaciones, tanto de errores como de alegrías. 📩&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%2Fh2o80x00ids25aphh2vl.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%2Fh2o80x00ids25aphh2vl.png" alt="E-MAIL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora, en este apartado, vamos a marcar las regiones que queremos "nukear". Sí, has oído bien, ¡"nukear" es la palabra! Así que selecciona tus regiones con cuidado, no te vayas a cargar lo que necesitas.&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%2F2yzsj3gsnfac14lekgg9.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%2F2yzsj3gsnfac14lekgg9.png" alt="REGIONES"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;🚀 Una vez hayamos ajustado todo a nuestro gusto, es hora de desplegar la plantilla de CloudFormation. 🚀&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%2Fvkcbxqncr9wt4l4ocbz2.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%2Fvkcbxqncr9wt4l4ocbz2.png" alt="Deploy_1"&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%2F2l5v2556pj83z3645hw8.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%2F2l5v2556pj83z3645hw8.png" alt="Deploy_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Eh, 🚨🚨! Como podemos ver en la última imagen, siempre lanzamos el AWS-NUKE en modo DRY. ¿Por qué? Porque así evitamos cualquier desastre estilo "eliminar sin retorno". Pero, hey, a veces queremos ir al modo hardcore (como en esta PoC, que queremos testear que elimine cosas), entonces pondremos el valor a FALSE.&lt;/p&gt;

&lt;p&gt;Una vez desplegado nuestro stack de CloudFormation, podremos ver un nuevo bucket S3. Por lo que toca subir los dos ficheros que se encuentran en el directorio config.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-samples/aws-nuke-account-cleanser-example/tree/main/config" rel="noopener noreferrer"&gt;Config&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Qué podemos hacer con ellos? Bueno, básicamente, ¡añadir restricciones o permitir lo que queramos!&lt;/p&gt;

&lt;p&gt;En nuestro caso, hemos generado dos buckets, uno de ellos con un nombre totalmente RANDOM, el cual buscamos que sea destruido, y otro de ellos con el nombre bucket-no-nuke-alex, el cual queremos que no se destruya nunca. Por tanto, editamos los ficheros indicando nuestras necesidades.&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%2F5jf1qyhmuwypl5w0d04j.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%2F5jf1qyhmuwypl5w0d04j.png" alt="Account-Blocklist"&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%2Fvk2eo8tdk4z771h6f3uh.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%2Fvk2eo8tdk4z771h6f3uh.png" alt="Bucket"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez modificados los ficheros, los subimos al bucket S3 y tocará esperar los resultados.&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%2Fn08e2i6n7k7h9wkqdsao.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%2Fn08e2i6n7k7h9wkqdsao.png" alt="no_nuke"&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%2Foimmosw2gwlo63zevexe.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%2Foimmosw2gwlo63zevexe.png" alt="Eliminado"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y así llegamos al final de nuestra aventura con AWS-NUKE. Después de desplegar todo y hacer nuestras configuraciones, vemos los resultados: el bucket con la restricción sigue en pie, mientras que el que no tenía protección ha sido eliminado sin piedad. 🎯&lt;/p&gt;

&lt;p&gt;👋 Como siempre, esperamos recibir comentarios, issues y sugerencias para seguir mejorando! 🫵 Si nos véis por Madrid, ¡decidnos algo!&lt;/p&gt;

</description>
      <category>awtwins</category>
      <category>aws</category>
      <category>community</category>
      <category>accounts</category>
    </item>
    <item>
      <title>AFT: tu asistente personal en tus cuentas de AWS 🥶</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Fri, 15 Mar 2024 09:05:28 +0000</pubDate>
      <link>https://dev.to/aws-espanol/aft-tu-asistente-personal-en-tus-cuentas-de-aws-367f</link>
      <guid>https://dev.to/aws-espanol/aft-tu-asistente-personal-en-tus-cuentas-de-aws-367f</guid>
      <description>&lt;p&gt;En nuestro último post de #AwtwinS, hablamos sobre ECS, Service Connect y GitHub. En este, nos vamos a desviar un poco; volvemos al inicio de nuestros recursos: nuestras cuentas y su gestión.&lt;/p&gt;

&lt;p&gt;🚀 Esta vez vamos a intentar que gestionar las cuentas de AWS no sea una pesadilla y, ¿por qué no?, intentar automatizar al máximo tanto el despliegue como la personalización de las mismas.🚀&lt;/p&gt;

&lt;p&gt;¡Para ello contamos con nuestro nuevo amigo, AFT! ¿Quién dijo que administrar las cuentas no podía ser divertido? 🥵&lt;/p&gt;

&lt;p&gt;Como siempre, adjuntamos documentación extensa por parte de nuestros colegas de AWS donde explican qué es AFT, pero dejamos un pequeño resumen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/es_es/controltower/latest/userguide/aft-overview.html"&gt;AFT-AWS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🫰 AFT te brinda una ventaja significativa de aprovisionamiento de cuentas basado en Terraform, al mismo tiempo que te permite gestionar las cuentas con AWS Control Tower. ¡Pim, Pam! 🫰&lt;/p&gt;

&lt;p&gt;¿Qué nos permite AFT? Dejamos algunos beneficios a continuación:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enviar solicitudes de nuevas cuentas y actualizar cuentas en nuestro modelo GitOps (¿no suena eso familiar?).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Almacenar los metadatos e historial en nuestro repositorio de código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Aplicar etiquetas a nivel de cuenta.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personalizar nuestras cuentas de forma individual o conjunta (hablaremos más sobre esto después).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Registro de eventos de datos de CloudTrail.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Inscribir nuestras cuentas en planes de soporte.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Eliminar la VPC predeterminada en nuestras cuentas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Después de explicar las funcionalidades de AFT, se nos plantean muchas situaciones, pero me gustaría explicar una en particular.&lt;/p&gt;

&lt;p&gt;Después de entender lo que nos puede aportar, agreguemos más valor al tema común en muchos equipos (pregunta de examen):&lt;/p&gt;

&lt;p&gt;Toda nuestra infraestructura está definida con Terraform y sus pipelines, pero ¿quién crea el bucket S3? Es como preguntarse: 🐔'¿Qué va primero, el huevo o la gallina?'🥚&lt;/p&gt;

&lt;p&gt;Siempre hay diferentes soluciones disponibles, como Service Catalog, plantillas de CloudFormation o incluso hacerlo de forma manual. Pero, ¿qué tal si lo incluimos en nuestros Terraform y separamos el proceso de arranque de la cuenta de la infraestructura? ¡Interesante, ¿verdad?! ¡Pues manos a la obra!👷&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requisitos:&lt;/strong&gt;&lt;br&gt;
Debemos de tener una Landing Zone creada con Control Tower.&lt;/p&gt;

&lt;p&gt;Para no extender mucho el post, dejamos documentación que podéis seguir. No obstante, es como rellenar un formulario :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/controltower/latest/userguide/quick-start.html"&gt;Landing Zone&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crearemos una nueva cuenta de gestión AFT y la asociaremos a una nueva Organizational Unit (OU) llamada AFT Management. Utilizaremos Control Tower para generar la cuenta.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9de1nq8csdrffqisaac0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9de1nq8csdrffqisaac0.png" alt="OU Organizations" width="377" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto como bien dice la documentación de AWS, puede tardar alrededor de unos 30 minutos aproximadamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuración AFT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cierto, a veces con tanta información puedes ir un poco perdido, así que vayamos paso a paso.&lt;/p&gt;

&lt;p&gt;En primer lugar AFT necesita disponer de 4 repositorios extras para su correcto funcionamiento. Recomendamos hacer un FORK desde el siguiente enlace, ya que deben seguir una estructura específica de directorios &amp;amp; archivos para funcionar correctamente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos"&gt;Repos-AFT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez que tengamos los repositorios en nuestro GitHub, vamos a explicar qué hace cada uno de ellos. Toda la información está detallada en los archivos Readme.md de cada repositorio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;aft-account-request&lt;/strong&gt;: Este repositorio contiene las solicitudes de cuenta para AFT. Aquí es donde deberás añadir las cuentas que te gustaría desplegar con AFT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;aft-account-customizations&lt;/strong&gt;: Este repositorio contiene los 'helpers' de Terraform y API para personalizar las cuentas. La personalización de las cuentas puede estar definida en Terraform o en Python aprovechando los 'helpers' de la API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;aft-account-provisioning-customizations&lt;/strong&gt;: AFT nos brinda la oportunidad de personalizar el aprovisionamiento de nuevas cuentas e integrarlo con los sistemas antes de personalizar estas cuentas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;aft-global-customizations&lt;/strong&gt;: Este repositorio contiene los 'helpers' de Terraform y API para las personalizaciones globales. Esto se puede utilizar para personalizar todas las cuentas con recursos definidos. Al igual que antes, se puede aprovisionar con Terraform o Python.&lt;/p&gt;

&lt;p&gt;¡Guay! Ya tenemos nuestros 4 repositorios que AFT  utilizará para el deploy de nuestras cuentas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy AFT&lt;/strong&gt;&lt;br&gt;
Una vez que hayamos creado nuestros repositorios, podemos proceder a desplegar AFT. Para ello, dejo otro ejemplo en el siguiente enlace:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-ia/terraform-aws-control_tower_account_factory"&gt;Repositorio Principal AFT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar en dicho repositorio, tenemos muchos ejemplos de cómo hacer la llamada a dicho módulo. En nuestro caso, como nos interesa trabajar con GitHub, utilizaremos el ejemplo github+tf_oss.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/examples/github%2Btf_oss"&gt;Github+tf_oss&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Que hace este módulo&lt;/strong&gt;? &lt;/p&gt;

&lt;p&gt;Configura la cuenta de Management AFT. Configura CodeStar para que cada vez que hagas un push en tu GitHub se lance la pipeline en CodePipeline, y configura los repositorios que AFT necesita para funcionar.&lt;/p&gt;

&lt;p&gt;En primer lugar, comenzaremos realizando un terraform apply de nuestra llamada al módulo, modificando las variables con las ID de nuestras cuentas. Como hemos comentado en otras ocasiones, ¿podemos utilizar GitHub Actions y evitar el uso local? Luego sabemos lo que pasa... 🤫&lt;/p&gt;

&lt;p&gt;👾Este deploy debe de ser en la cuenta de Control Tower👾&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-ia/terraform-aws-control_tower_account_factory/blob/main/examples/github%2Btf_oss/main.tf"&gt;Main.tf&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recomendamos agregar estas líneas para no ocasionar gastos extras en vuestra PoC:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
  aft_enable_vpc              = false
  aft_vpc_endpoints            = false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez desplegado, deberemos de dirigirnos a nuestra cuenta de &lt;em&gt;&lt;strong&gt;Control Tower&lt;/strong&gt;&lt;/em&gt; y otorgar permisos al Role de AFT:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v045dnq7d47cjq6mjii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v045dnq7d47cjq6mjii.png" alt="Service Catalog" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Control Tower Account Factory Portfolio &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8hxlo63bjutgk52omgdl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8hxlo63bjutgk52omgdl.png" alt="Image description" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Le damos permisos al Role:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngyz9lqknjo2lcrmykpf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngyz9lqknjo2lcrmykpf.png" alt="Image description" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuración CodeStar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;De igual forma que explicamos con Apprunner, debemos aceptar la conexión pendiente en &lt;em&gt;Codebuild - Settings&lt;/em&gt; en nuestra cuenta AFT:&lt;/p&gt;

&lt;p&gt;Deberemos de darle permisos a la app de Github para que pueda conectar con los repositorios que necesita AFT. 🙃(Up to you! nosotros solo damos permisos a los repositorios necesarios).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiefsxnxbihgclu7r449i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiefsxnxbihgclu7r449i.png" alt="Image description" width="800" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez conectados, deberemos relanzar las pipelines que veremos en nuestro Codepipeline:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tzoenwdawikl6bu7trt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tzoenwdawikl6bu7trt.png" alt="Pipelines" width="348" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0194xaq7y47g1e9p621.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk0194xaq7y47g1e9p621.png" alt="Release" width="597" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora que tenemos configurado nuestro AFT, podemos empezar a jugar con él. En primer lugar, vamos a provisionar una nueva cuenta de TEST. Para ello, iremos a nuestro repositorio de Github (aft-account-request) y modificaremos el archivo main.tf en la ruta aft-account-request/terraform/main.tf, modificando las variables como en el siguiente ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module "sandbox5" {
  source = "./modules/aft-account-request"
  control_tower_parameters = {
    AccountEmail              = "email"
    AccountName               = "sandbox-aft5"
    ManagedOrganizationalUnit = "Sandbox (ou-xxxxxxx) " 
    SSOUserEmail              = "email"
    SSOUserFirstName          = "Sandbox"
    SSOUserLastName           = "AFT"
  }

  account_tags = {
    "Learn Tutorial" = "AFT"
  }

  change_management_parameters = {
    change_requested_by = "alex"
    change_reason       = "Learn AWS Control Tower Account Factory for Terraform"
  }

  #custom_fields = {
  #  group = "non-prod"
  #}
  account_customizations_name = "testing"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¡Lanzamos nuestra pipeline haciendo un push y 💥!Podremos ver en Control Tower cómo empieza a aparecer nuestra nueva cuenta "sandbox-aft5" en la OU que hemos seleccionado! 🥳&lt;/p&gt;

&lt;p&gt;😎Por otro lado, pongamos atención a esta línea? 🕶️&lt;/p&gt;

&lt;p&gt;&lt;code&gt;account_customizations_name = "testing"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;¡Bien, aquí es donde tenemos más juego!Como bien sabemos, tenemos otro repositorio llamado &lt;strong&gt;aft-customizations&lt;/strong&gt; donde ocurrirá la magia. 🫣 Que empiece el juego!🫣¿Y si queremos crear un bucket S3 para que sea creado en el momento de crear la cuenta? Pues vamos allá!&lt;/p&gt;

&lt;p&gt;💢 Atención! 💢&lt;br&gt;
Es de vital importancia seguir la estructura indicada en los repositorios para que funcione correctamente.En este caso,lo haremos siguiendo la siguiente estructura:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzb9qwoaykv0mgdelrrlj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzb9qwoaykv0mgdelrrlj.png" alt="Image description" width="597" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rfu6ja5ntc79nzg9gmi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rfu6ja5ntc79nzg9gmi.png" alt="Image description" width="597" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtno41qx9vzsgkxctuk1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmtno41qx9vzsgkxctuk1.png" alt="Image description" width="597" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6crnq4triyq0bisok6ss.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6crnq4triyq0bisok6ss.png" alt="Image description" width="597" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hacemos push a este repositorio y automáticamente se lanzará una nueva pipeline en nuestro CodeCommit, generando así nuestro Bucket S3 (podemos verlo en la cuenta de AFT).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzps8ut8encm6un3lhe7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzps8ut8encm6un3lhe7a.png" alt="Image description" width="597" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y como no, si accedemos a nuestra cuenta final (sandbox5), veremos nuestro bucket S3.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8ge9tarq3c85qamgzek.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8ge9tarq3c85qamgzek.png" alt="Image description" width="667" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como hemos visto, podemos personalizar nuestras cuentas desde el inicio, lo que nos permite generar recursos en las cuentas indicando si queremos que se apliquen en todas, solo en las seleccionadas y, lo más importante, ¡usando Terraform! 🚀&lt;/p&gt;

&lt;p&gt;Para más información dejamos un link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/es_es/controltower/latest/userguide/taf-account-provisioning.html"&gt;AFT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✌️ ¡Aviso Importante! Este post está creado con el propósito de compartir conocimientos y experiencias en el entorno de una Prueba de Concepto (PoC).&lt;/p&gt;

&lt;p&gt;🚨¡Atención! 🚨 No fijar las versiones de Terraform como en la PoC puede causar graves problemas en tu entorno de producción. Recomendamos siempre indicar la versión del módulo usado y verificar las versiones de Terraform para no ocasionar ningún error.&lt;/p&gt;

&lt;p&gt;🤑Por último, cabe señalar que aunque comenzamos experimentando con un bucket, ¡nos hemos vuelto locos probando otros servicios! Recomendamos también tener precaución con las configuraciones de AWS Config para evitar sorpresas desagradables 💸, al igual que con los recursos de networking.🤑&lt;/p&gt;

&lt;p&gt;👋 Como siempre, esperamos recibir comentarios, issues y sugerencias para seguir mejorando! 🫵&lt;/p&gt;

&lt;p&gt;PD: En los siguientes volvemos con EKS! 😱&lt;/p&gt;

</description>
      <category>aws</category>
      <category>controltower</category>
      <category>awtwins</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Un cóctel perfecto 🍹 ECS Fargate, Service Connect,Terraform y Github Actions.</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Mon, 12 Feb 2024 08:47:26 +0000</pubDate>
      <link>https://dev.to/aws-espanol/un-coctel-perfecto-ecs-fargate-service-connectterraform-y-github-actions-139k</link>
      <guid>https://dev.to/aws-espanol/un-coctel-perfecto-ecs-fargate-service-connectterraform-y-github-actions-139k</guid>
      <description>&lt;p&gt;En nuestro último post de #AwtwinS comentamos un avance del Re:Invent donde utilizabamos EKS POD Identity para administrar las credenciales de aplicación 🔐 y como no, hablando de containers, como también comentamos la parte de AppRunner, EKS y ahora porque no... un poquito de ECS. 🚀&lt;/p&gt;

&lt;p&gt;✌️En esta nueva Poc tenemos dos servicios en ECS Fargate✌️&lt;/p&gt;

&lt;p&gt;Front: Usaremos un script en python que hará llamadas contra nuestro backend, como siempre. (dummy-dummy)&lt;br&gt;
Backend: Servidor HTTP que escucha en un puerto especifico, este está en Nodejs. (otra dummy-dummy) ¡Prepárate para disfrutar de un cóctel! &lt;/p&gt;

&lt;p&gt;No obstante cuando pensamos en servicios, debemos de pensar también en como vamos a conectar esos servicios y aquí en AWS surgen varias formas de conectarlos.🪢&lt;/p&gt;

&lt;p&gt;En primera instancia pensamos en ELB por servicio, creando así un espectáculo de balanceadores. Sin embargo, cuanto nos cobran la entrada, el espectáculo deja de ser divertido, aquí es donde se complica.🤑 Y si tienes que luchar contra el Preserve IP? (Esta experiencia,que merecería otro post propio nos enseña que cada solución tiene sus desafios)🤯&lt;/p&gt;

&lt;p&gt;En este caso vamos a hablar de Ecs Service Connect, baile de proxies 🕺 en perfecta coordinación 🕺. Service Connect despliega sus artes escenicas a través de un container Sidecar que se ejecuta a cada tarea del servicio. Este Sidecar actúa como proxy, gestionando las conexiones entre servicios. Pero aquí el paso brutal: Service connect registra los endpoints en Cloud Map por nosotros.&lt;/p&gt;

&lt;p&gt;Para más información:&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/es_es/AmazonECS/latest/developerguide/service-connect.html" rel="noopener noreferrer"&gt;Service Connect&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenemos dos subnets en la VPC con 2 servicios. Nuestro frontend es el encargado de hacerle peticiones a nuestro backend.&lt;/p&gt;

&lt;p&gt;En este caso,la conexión se está usando con el nombre corto de ecs-backend en el puerto para nuestro backend, definiendo los puertos en el terraform de nuestra task definition.👏&lt;/p&gt;

&lt;p&gt;Para entender mejor esto, el baile en el siguiente diagrama:&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%2Fowhv30yxtpgvtucqa0ow.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%2Fowhv30yxtpgvtucqa0ow.png" alt="Proxy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comentada la teoría pasemos a la acción! Módulos de terraform de community 😶‍🌫️ Github Actions y Service Connect.😶‍🌫️&lt;/p&gt;

&lt;p&gt;Para este caso los módulos que utilizaremos son los siguientes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/terraform-aws-modules/terraform-aws-ecr" rel="noopener noreferrer"&gt;ECR&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/terraform-aws-modules/terraform-aws-vpc" rel="noopener noreferrer"&gt;VPC&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/terraform-aws-modules/terraform-aws-ecs" rel="noopener noreferrer"&gt;ECS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cabe remarcar que añadiremos una parte de código (Service Discovery) en alguno de ellos para hacer nuestra PoC, no obstante,os dejamos nuestros repos públicos con la PoC. 💻&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ragerdevops/ecs-fargate-Poc-infra" rel="noopener noreferrer"&gt;Terraform-ECS-PoC&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ragerdevops/ecs-front-dummy" rel="noopener noreferrer"&gt;Frontend Dummy&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/ragerdevops/ecs-back-dummy" rel="noopener noreferrer"&gt;Backend Dummy&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Al desplegar nuestro terraform desde el repositorio podremos ver el ECS con sus respectivos servicios.&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%2Fhzloy4f20efxlsiujwx1.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%2Fhzloy4f20efxlsiujwx1.png" alt="Servicios"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como decíamos, nuestro compi de baile se ejecuta a su lado como un Sidecar.&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%2Fbcbeze1v9ftr1lsmkv0h.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%2Fbcbeze1v9ftr1lsmkv0h.png" alt="Sidecar frontend"&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%2Fnirju0irfld8h3rn305k.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%2Fnirju0irfld8h3rn305k.png" alt="Sidecar backend"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez desplegado y configurado todo y al no tener endpoint público, usaremos cloudwatch para ver los registros y podemos ver que están conectando correctamente nuestras apps. 🥵&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%2Ffvmfya0utw8jy1kmf0ls.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%2Ffvmfya0utw8jy1kmf0ls.png" alt="Peticiones front"&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%2Fwno1963c5nrghxoxhx8y.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%2Fwno1963c5nrghxoxhx8y.png" alt="Peticiones back"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✌️ ¡Aviso Importante! Este post está creado con el propósito de compartir conocimientos y experiencias en el entorno de una Prueba de Concepto (PoC).&lt;/p&gt;

&lt;p&gt;Etiqueta "latest" en Docker: ¡Atención! 🚨 (Puede ocasionar problemas en tus entornos)&lt;/p&gt;

&lt;p&gt;Costos Asociados y Buenas Prácticas 📊: Además, en este entorno de Poc, hemos tomado decisiones que pueden tener implicaciones en términos de costes, VPC, Logs... En el mundo real, se recomienda seguiir unas buenas prácticas, optimizar costes y tener en cuenta la seguridad y eficiencia.&lt;/p&gt;

&lt;p&gt;Por tanto, a testear con responsabilidad! 🔍&lt;/p&gt;

&lt;p&gt;Esperamos vuestras reacciones y comentarios! 🎉&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ecs</category>
      <category>awtwins</category>
      <category>terraform</category>
    </item>
    <item>
      <title>"Desplegar sin Miedo: Un Cuento Épico de App Runner, Terraform y GitHub Actions."</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Mon, 15 Jan 2024 21:40:37 +0000</pubDate>
      <link>https://dev.to/aws-espanol/desplegar-sin-miedo-un-cuento-epico-de-app-runner-terraform-y-github-actions-14p1</link>
      <guid>https://dev.to/aws-espanol/desplegar-sin-miedo-un-cuento-epico-de-app-runner-terraform-y-github-actions-14p1</guid>
      <description>&lt;p&gt;⏳¡Un mes más tarde del primer post volvemos a la carga!⏳ En el último post exploramos los Parches automáticos para liberar tu agenda y así no quedarte dormido el día siguiente. ¡Pero la aventura acaba de empezar!🪂&lt;br&gt;
En esta tercera entrega, nos adentramos en tierras más actuales, donde los términos serverless, containers, devops y todo su séquito despliegan su magia. Sin embargo, hoy, decidimos darle un toque de luz a un servicio que no es ni ECS ni EKS.🫣 Aunque, ¡no te preocupes! Estos seguro que tendrán su propio espacio en futuras historias que ya estamos preparando... 🥵 ¡Que empiece la locura!🥵&lt;/p&gt;

&lt;p&gt;✈️En este post nos surmergimos en un viaje donde desplegaremos nuestra magia utilizando múltiples servicios simultáneamente, todo orquestado para que la experiencia sea lo más automática posible.✈️ ¿El dúo protagonista de esta historia? Terraform, Github Actions y App Runner, dos de las herramientas que están en boca de todos y que liderarán este post. 💥&lt;/p&gt;

&lt;p&gt;Antes de nada... 📚 un paso atrás para desvelar los misterios del servicio. El viaje inicial explorando sus rincones de manera manual y a través de la consola de AWS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/apprunner/"&gt;AppRunner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS App Runner es un servicio de aplicaciones completamente administrado que le permite crear, desplegar y ejecutar servicios de API y aplicaciones web en sin necesidad de experiencia previa en contenedores o infraestructuras.&lt;br&gt;
￼&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyl0hcz7xcp2i1jnocw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsyl0hcz7xcp2i1jnocw2.png" alt="Image 1" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como se señala en la documentación, AppRunner es el héroe que llega para desplegar y ejecutar servicios APIS y aplicaciones web sin requerir conocimientos previos en contenedores o infraestructura. 🥱¡Adiós a las reuniones infinitas sobre configuraciones complejas!🥱 O como mínimo los “no me funciona” 🥴&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xjq1xnq1o2ihgvgqimm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xjq1xnq1o2ihgvgqimm.png" alt="Image 2" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos adentramos en el territorio de despliegue y tenemos dos caminos: uno desde Container registry y otro desde Source Code Repository. Ambos con sus cositas, así que vamos a adentrar un poco en cada uno de ellos y descubrir cuál se adapta mejor a nuestras necesidades.&lt;/p&gt;

&lt;p&gt;Si optamos por el camino del Container Registry, podemos elegir entre ECR Private o ECR público , en este caso nuestra misión es desplegar usando el público con la siguiente imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-containers/hello-app-runner"&gt;Hello-app-runner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⛔En el caso de utilizar ECR Public no es posible usar las actualizaciones automáticas pero no te preocupes, que pronto entramos a ver como desplegar con estilo pero sin actualizaciones automáticas.⛔&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kt3vsdaodp1swuhu3e6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kt3vsdaodp1swuhu3e6.png" alt="Image 3" width="800" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuraremos aquí los valores que necesitemos tales como VirtualCPU/Memory,si tenemos variables de entorno, en additional configuration podemos encontrar también el start command, por si necesitamos algún otro momento de magia.🚀&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gjr1wi08fwg1kxlj8fm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gjr1wi08fwg1kxlj8fm.png" alt="Image 4" width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚡En la parte de AutoScaling veremos el arte de la escalabilidad automática. Aquí configuraremos las solicitudes, establecer el máximo,el mínimo y dejar que AppRunner realice su propia magia basándose en métricas como las solicitudes y alguna que otra métrica interna, dejamos más información para los curiosos. ⚡&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/es_es/apprunner/latest/dg/manage-autoscaling.html"&gt;Autoscaling-apprunner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenemos la capacidad de modificar los Health Checks para asegurarnos que nuestras instancias siempre estén funcionando como deben. 👨‍🔬&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6xdpgm6m780oes5mtii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6xdpgm6m780oes5mtii.png" alt="Image 5" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Permisos, WAF y AWS MKS key No vamos a entrenar servicio por servicio puesto que cada uno debe de ser modificado en base a necesidades. Un consejo sabio: siempre activar WAF a todos aquellos que se aventuren a jugar en entornos productivos, que nos conocemos.🕵️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m7fg6f1vmwvjekq9xet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5m7fg6f1vmwvjekq9xet.png" alt="Image 6" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como también nos puede interesar desplegarlo en privado, tenemos una opción para ello:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2ssvwzb8q3yrjpafbgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2ssvwzb8q3yrjpafbgy.png" alt="Image 7" width="800" height="549"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cabe remarcar que para Private endpoint necesitaremos un VPC interface endpoint y un VPC connector. (si lo necesitáis, podemos subir a git un ejemplo, pero dependerá de las reacciones y comentarios así que...)🚀&lt;/p&gt;

&lt;p&gt;🕵️Y por último la parte de monitoring que podemos cubrirla con X-RAY 🕵️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c4395sfllms3ru3rxy1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6c4395sfllms3ru3rxy1.png" alt="Image 7" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No obstante, también está integrado con Cloudwatch por lo que podremos ver los logs de nuestro service y de nuestra app en el mismo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57mhwbeue7d96eo1ph34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57mhwbeue7d96eo1ph34.png" alt="Image 8" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con todos los valores revisados y afinados, el momento mágico ha llegado. Es hora de apretar el botón mágico ‘Create &amp;amp; Deploy’ y ver cómo nuestra app dummy cobra vida.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2daz5i4t4wdayjvce67i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2daz5i4t4wdayjvce67i.png" alt="Image 9" width="800" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un clic en default domain y ¡Voilà! ¡La magia funcionó y nuestro servicio se desplega! 🫡&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwh7lffw37riaq939br3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwh7lffw37riaq939br3.png" alt="Image 10" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Bien! Ya hemos dominado la magia de desplegar con Apprunner pero ahora, llevaremos el servicio a otro step. Como hemos visto nuestro servicio puede conectarse a nuestro repositorio de código, permitiendo así que cada push inicie automáticamente el despliegue de una nueva versión. &lt;/p&gt;

&lt;p&gt;👋¡Adiós a las builds no funcionan! Desde ahora, cada modificación en nuestro código desencadenará una nueva versión de la aplicación, así, desplegando con su flow! 👋&lt;/p&gt;

&lt;p&gt;Para poder testear este paso hemos generado un repositorio que contiene una  app en python, como nos gusta decir, de las cutres, pero cutres...que lo único que hace es decir (“Hello from Flask in App Runner! ) donde podrás encontrar el DockerFile, app.py, apprunner.yaml y requirements.txt (Como siempre, si no queréis fracasar, ⛔no usar esto para producción)⛔ PD: No somos developers, no critiquéis mucho 🤭&lt;/p&gt;

&lt;p&gt;Dejo el link a continuación: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ragerdevops/app-runner-Poc-Repository-app.git"&gt;frontend-app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para dar inicio a esta odisea, elegiremos la opción ‘Source code repository’ al crear nuestro servicio. Pero antes de pasar al capitulo final tenemos que crear una conexión con nuestro repo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsctrftli4ja497wiftd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmsctrftli4ja497wiftd.png" alt="Image 11" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En repository seleccionamos nuestro repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l550oyfg4z52umklmrd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3l550oyfg4z52umklmrd.png" alt="Image 12" width="800" height="665"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zr1kyff6ivgnusxqt8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zr1kyff6ivgnusxqt8z.png" alt="Image 13" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para que cada vez que modifiquemos la imagen se apliquen los cambios debemos de seleccionar Automatic.&lt;/p&gt;

&lt;p&gt;✌️ En el siguiente paso podremos configurar si deseamos configurar nuestros valores mediante consola o bien en el mismo repo con un fichero apprunner.yaml, ya que estamos, lo haremos por fichero para no volver a caer en lo manual. ✌️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo17eqfuon41b5ys3nd2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo17eqfuon41b5ys3nd2b.png" alt="Image 14" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👏 ¡Y así, aplauso y nuestro despliegue se completa! (Si todo va bien, si no, a mirar los logs!) 👏 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhu5j00zobhfo1iwrl0i2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhu5j00zobhfo1iwrl0i2.png" alt="Image 15" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Walaa! Nuestra aplicación se encuentra en todo su esplendor, lista y pública para todos!😋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7s7nh9yiogq85x2c38q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7s7nh9yiogq85x2c38q.png" alt="Image 16" width="800" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con la aplicación desplegada nos llega el momento de presenciar la magia de la automatización, Realizaremos un cambio en la aplicación, como por ejemplo añadir v1.0 y veremos que al hacer un push, despliega una nueva versión con un simple push.🕺&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmuv715nesxk6r2ainu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsmuv715nesxk6r2ainu7.png" alt="Image 17" width="800" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh3xyt6t081tbrslg0pa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh3xyt6t081tbrslg0pa.png" alt="Image 18" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnx8nggybvbn11lrav8t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnx8nggybvbn11lrav8t.png" alt="Image 19" width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como hemos comentado, estamos evitando huir de las cosas manuales, por lo que todo esta parte ha sido únicamente creada a mano para entenderlo, pero en realidad, al hacer la PoC hemos desplegado todo con terraform y GitHub actions. (Ya avisamos de qué son simples y una primera versión, otra vez más,😈 no deberemos usarlas para producción puesto que su única finalidad es la PoC). 😈&lt;/p&gt;

&lt;p&gt;En nuestra búsqueda de eficiencia y simplicidad, hemos recurrido a herramientas proporcionadas por la comunidad.&lt;br&gt;
En este caso, utilizamos terraform, aprovechando los módulos que nos brinda la comunidad, además para el despliegue confiamos en la magia de Github Actions, que se sincroniza perfectamente con nuestros repositorios de Github.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/terraform-aws-modules/terraform-aws-app-runner"&gt;app-runner-module&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el directorio podéis ver la carpeta examples (dependiendo de vuestras necesidades).&lt;/p&gt;

&lt;p&gt;No obstante, hemos generado un repositorio donde podréis encontrar todo “pre-configurado” y un Readme donde explica como desplegar: 🫣&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ragerdevops/app-runner-Poc-Repository-infra"&gt;app-runner-infra&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración de las Credenciales en GitHub:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configura las &lt;a href="https://docs.github.com/en/actions/security-guides/encrypted-secrets"&gt;GitHub Secrets&lt;/a&gt; con las credenciales de AWS necesarias para la pipeline. En este caso deberás de configurarlas en tu repositorio.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configuración de AWS App Runner:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ajusta el fichero provider.tf para indicar la region donde quieres desplegar tu infrastructura.(recomiendo dejar eu-west-1 puesto que el script consulta esa region, si no, deberás de modificarlo en script.sh)&lt;/li&gt;
&lt;li&gt;Modifica backend.tf para apuntar a tu bucket s3 para almacenar el estado de terraform.&lt;/li&gt;
&lt;li&gt;Ajusta las configuraciones necesarias en el fichero &lt;code&gt;variables.tf&lt;/code&gt; según tus necesidades, en este caso indicar el repositorio de la app.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Despliegue Automático con GitHub Actions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cada vez que realices un push a la rama &lt;code&gt;main&lt;/code&gt;, la pipeline de GitHub Actions se activará automáticamente, desencadenando el despliegue de la infrastructura necesaria para poder deployar nuestra app en AppRunner.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Testear AppRunner en repositorio de código de la app&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuando tengas desplegada la infra y todo funcional ya podrás ir al repositorio de código de tu app para lanzar nuevos deploys automáticos al modificar la app tal y como se explica en este mismo post.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://github.com/ragerdevops/app-runner-Poc-Repository-app.git"&gt;frontend-app-runner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una vez en el paso 4 lo que deberemos hacer es modificar nuestro texto de la app en nuestro repositorio de la app, en nuestro caso modificamos para que nos muestre la nueva versión en el texto, en este caso v2.0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F690ftkh7m2hxe9kha2ze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F690ftkh7m2hxe9kha2ze.png" alt="Image 20" width="800" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pusheamos a nuestro repositorio.&lt;/p&gt;

&lt;p&gt;Git add .&lt;br&gt;
Git commit -m “update version app”&lt;br&gt;
Git push &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ohl18u58sqdr3wqpq44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ohl18u58sqdr3wqpq44.png" alt="Image 21" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Accedemos al default domain:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyhcyy4x3xn98cz1cdlv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkyhcyy4x3xn98cz1cdlv.png" alt="Image 21" width="800" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🪄Ahora, con un cambio en la aplicación, hemos dado vida a una nueva versión, pero esta vez de forma automática con terraform + Github Actions. 🪄&lt;/p&gt;

&lt;p&gt;En el mundo de apprunner las imágenes no se almacenan en un repositorio ECR. En lugar de eso, AppRunner controla sus propia magia 🪄 para gestionar las imágenes y permitirnos hacer rollback cuando sea necesario. Si necesitamos volver a una versión anterior, podemos recurrir a métodos como revertir el código de nuestro repositorio usando herramientas como ‘git reverse’. 🧙‍♂️¡Que la magia de GIT nos guíe!🧙‍♂️&lt;/p&gt;

&lt;p&gt;Una importante aclaración: los AppRunner que hemos desplegado están configurados como endpoints públicos, facilitando así la realización de nuestra PoC. Sin embargo,si necesitamos elevar la seguridad y configurarlos como privados, podemos lograrlo ajustando los valores correspondientes en el módulo de Terraform.&lt;/p&gt;

&lt;p&gt;Para poder complementar esta configuración, también podemos utilizar otro módulo de la comunidad para generar un VPC endpoint necesario. Con esa combinación de ajustes podemos crear un entorno más seguro y controlado, adecuado para aplicaciones que requieren una capa adicional de privacidad.&lt;/p&gt;

&lt;p&gt;Y con esto acabamos nuestra travesía por AppRunner, desde luego un servicio como mínimo interesante, ¿Te ha parecido interesante? Esperamos vuestras reacciones y comentarios! :)&lt;/p&gt;

</description>
      <category>pipeline</category>
      <category>github</category>
      <category>apprunner</category>
      <category>awtwins</category>
    </item>
    <item>
      <title>[Tutorial] IAM Identity Center - Deja de saltar entre roles y empieza a bailar con SSO</title>
      <dc:creator>Alex Rodríguez</dc:creator>
      <pubDate>Mon, 18 Dec 2023 00:17:24 +0000</pubDate>
      <link>https://dev.to/aws-espanol/tutorial-iam-identity-center-deja-de-saltar-entre-roles-y-empieza-a-bailar-con-sso-2pea</link>
      <guid>https://dev.to/aws-espanol/tutorial-iam-identity-center-deja-de-saltar-entre-roles-y-empieza-a-bailar-con-sso-2pea</guid>
      <description>&lt;p&gt;Buenas a tod@s! en primer lugar creemos que tenemos que presentarnos, somos &lt;a class="mentioned-user" href="https://dev.to/rager"&gt;@rager&lt;/a&gt; y &lt;a class="mentioned-user" href="https://dev.to/nanu"&gt;@nanu&lt;/a&gt;, Ingenieros Cloud y gemelos ¿No querías caldo? 🥛¡Toma dos tazas! 🥛&lt;br&gt;
Hemos pasado unos años peleando con los accesos a cuentas y como primer post creemos que tratar el topic de AWS SSO/Iam Idenfity Center podría ser interesante, tenemos que remarcar que iremos posteando una vez yo y otro él (puesto que lo creamos juntos) así que en todos hablaremos en plural 😜&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drama de los Roles en AWS:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Todos hemos pasado por allí... Intentando recordar roles específicos para cada cuenta, como tratando de seguir el ritmo en una coreografía pero sin ensayar... ¡Ahí va el rol de &lt;strong&gt;prod&lt;/strong&gt;! Pues va a ser que no... ahora toca el de &lt;strong&gt;dev&lt;/strong&gt;... o espera. ¿Tenemos problemas con el rol? ¿Puedes probar si puedes acceder? Ah no... será mi &lt;strong&gt;MFA&lt;/strong&gt;… ¿Cómo accedíamos aquí? Dada la experiencia en estos casos, aprovechas y buscas algún tipo de solución que permita ir saltando de rol en rol, como puede ser AWS Extend Switch Roles (Web browser) (&lt;a href="https://github.com/tilfinltd/aws-extend-switch-roles"&gt;https://github.com/tilfinltd/aws-extend-switch-roles&lt;/a&gt;), que te permite añadir una serie de configuraciones en el plugin y una vez accedes a tu maravillosa cuenta de salto, ¡pum! 💥 ya puedes ir saltando a otras. Aunque... ¿qué sucede si alguien lo actualiza mal? (En caso de que esté compartido, claro...), ¿lo pierdes o se desconfigura? Volvemos al inicio... demasiados pasos para un único objetivo: "ACCEDER".🔑&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducción al SSO (Iam Identity Center)
&lt;/h2&gt;

&lt;p&gt;Bien, damos paso a nuestro coreógrafo oficial, Iam Identity Center, quién nos proporcionará facilidades para que podamos realizar nuestro baile de una manera mucho más sencilla. 🕺&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Como lo configuramos?
&lt;/h2&gt;

&lt;p&gt;Como todo en este sector, podemos hacerlo de muchas formas, es recomendable tener creada una organización (la cual debe estar definida y estandarizada... ehem... ehem...)🤷‍♂️ todo y que si no la tienes o estás en una cuenta de PoC como nosotros, quizá no es&lt;br&gt;
necesario para testear, con solo acceder al Enable AWS SSO podremos crearla. ¡&lt;strong&gt;Easy&lt;/strong&gt;! 👌&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbixc48pp06xg1ev22czi.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbixc48pp06xg1ev22czi.PNG" alt="1" width="599" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0l4wwqz4oaj4uz4ihcav.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0l4wwqz4oaj4uz4ihcav.jpeg" alt="2" width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seleccionamos “Finish enable” en IAM Identity Center y esperamos que se configure.&lt;br&gt;
Una vez configurado podemos acceder a Identity Center y debajo del panel Settings Summary encontraremos nuestro AWS access portal URL:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wxha9swa0gw221eyptd.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wxha9swa0gw221eyptd.PNG" alt="3" width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;https://[yourdirectory].awsapps.com/start&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙ Empezamos a testear ⚙
&lt;/h2&gt;

&lt;p&gt;Una vez tenemos habilitado IAM Identity Center empezamos a testear:&lt;br&gt;
Generamos una cuenta desde AWS Organizations &amp;gt; AWS accounts&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sb4v8j5tb3d363l9soq.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5sb4v8j5tb3d363l9soq.PNG" alt="4" width="800" height="158"&gt;&lt;/a&gt;&lt;br&gt;
En nuestro caso, crearemos una dev-poc (por ejemplo...) y debemos añadir el email adress.&lt;br&gt;
🚨 truquito 🚨 podemos usar alias para tener una gestión desde un mismo e-mail &lt;strong&gt;(&lt;a href="mailto:email+dev@domain.com"&gt;email+dev@domain.com&lt;/a&gt;)&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcnhnqva4c6qtopdp7u3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcnhnqva4c6qtopdp7u3.PNG" alt="5" width="800" height="629"&gt;&lt;/a&gt;&lt;br&gt;
En este caso y puesto que se trata de una POC dejaremos el IAM role Name y los TAGS por defecto.&lt;br&gt;
Una vez generada vamos a IAM Identity Center &amp;gt; Permission sets y generamos un nuevo “Permission set” que será el encargado de tener las políticas asociadas&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fziksuioh3c0m0uyisir6.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fziksuioh3c0m0uyisir6.PNG" alt="6" width="800" height="270"&gt;&lt;/a&gt;&lt;br&gt;
Como podemos ver ya tenemos una serie de permissions sets definidos por AWS que nos van a facilitar realizar estas acciones, en caso de tener que montar una solución más customizada podemos optar por nuestros bailarines profesionales “Custom permissions set” 📕&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn9rgp7ie7j5paa68aro.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn9rgp7ie7j5paa68aro.PNG" alt="7" width="800" height="284"&gt;&lt;/a&gt;&lt;br&gt;
Para la POC seleccionaremos ViewOnly Access&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno147ttewma9en91uwzo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fno147ttewma9en91uwzo.PNG" alt="8" width="599" height="556"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtwoldx4981bpdq497ic.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtwoldx4981bpdq497ic.PNG" alt="9" width="800" height="217"&gt;&lt;/a&gt;&lt;br&gt;
Una vez disponemos de nuestros permisos generados volvemos a “IAM Identity Center” para otorgar estos mismo, en este caso, siempre recomendamos generar grupos donde después colgarán nuestros usuarios.&lt;br&gt;
Generamos los usuarios proporcionando la información necesaria.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hrqpz53ymwpzi2l0eml.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hrqpz53ymwpzi2l0eml.PNG" alt="10" width="601" height="520"&gt;&lt;/a&gt;&lt;br&gt;
Generamos el grupo donde estarán estos usuarios y los añadimos al grupo recien creado, en nuestro caso:&lt;/p&gt;

&lt;p&gt;Grupo: ViewOnlyAccess&lt;br&gt;
User: view-access&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffim68t09cc0ks43el6n3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffim68t09cc0ks43el6n3.PNG" alt="11" width="604" height="399"&gt;&lt;/a&gt;&lt;br&gt;
Una vez disponemos de los usuarios, grupos y cuenta, los relacionamos entre ellos.&lt;br&gt;
Accedemos a IAM Identity Center &amp;gt; Multi-account permissions &amp;gt; AWS accounts marcamos el check de la cuenta y clicamos en Assign users or groups&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivy7xzpgnll4kcfyb1bo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivy7xzpgnll4kcfyb1bo.PNG" alt="12" width="800" height="197"&gt;&lt;/a&gt;&lt;br&gt;
Seleccionamos el grupo “ViewOnlyAccess”&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06sx3gyfy3qxjqabqc1o.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06sx3gyfy3qxjqabqc1o.PNG" alt="13" width="800" height="487"&gt;&lt;/a&gt;&lt;br&gt;
Asignamos el permission Set creado, en nuestro caso el ViewOnlyAccess&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foda76j3gi6nw0os9eznp.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foda76j3gi6nw0os9eznp.PNG" alt="14" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🍾Y tenemos nuestro SSO🍾&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8vulimms2t6n5ey0ksp.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8vulimms2t6n5ey0ksp.PNG" alt="15" width="719" height="649"&gt;&lt;/a&gt;&lt;br&gt;
Intentaremos acceder con nuestro usuario por consola mediante el link del Identity Iam Center&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;https://[yourdirectory].awsapps.com/start&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpv8ufyawmtntkhqj7xh.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpv8ufyawmtntkhqj7xh.PNG" alt="16" width="525" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🕺Accedemos mediante el usuario generado en el tutorial y ya podemos salir a la pista de baile!🕺&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87zfd67rzk3cte5ws8xu.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F87zfd67rzk3cte5ws8xu.PNG" alt="17" width="719" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤷Pero…y si necesitamos la AWSCLI?🤷
&lt;/h2&gt;

&lt;p&gt;Podemos hacer lo siguiente! &lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws configure sso&lt;/code&gt;&lt;br&gt;
Este comando te solicitará configurar la siguiente información:&lt;br&gt;
&lt;code&gt;SSO sesion name: Nombre de la sesión&lt;br&gt;
SSO start URL: La URL de inicio de sesión de AWS SSO.&lt;br&gt;
SSO region: La región de AWS SSO.&lt;br&gt;
SSO client ID: El ID de cliente de AWS SSO.&lt;br&gt;
SSO output format: El formato de salida para el comando. Puede ser "json", "text", o "table".&lt;br&gt;
SSO profile name: El nombre del perfil que deseas configurar.&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;¿Como nos autenticamos?&lt;/strong&gt; &lt;br&gt;
Podemos usar el siguiente comando:&lt;br&gt;
&lt;strong&gt;aws sso login --profile &lt;/strong&gt;&lt;br&gt;
Y 🧙‍♂Magia!🧙‍♂ se abrirá una nueva ventana solicitando que inicies sesión con tus credenciales de SSO.&lt;br&gt;
Aprovechamos también la ocasión para compartir una tool que siempre nos ayudó con el tema de login en AWSCLI, la cual se puede integrar con SSO:&lt;br&gt;
&lt;a href="https://github.com/99designs/aws-vault/tree/master"&gt;aws-vault&lt;/a&gt;&lt;br&gt;
🚀Esperamos vuestras reacciones y comentarios.🚀&lt;/p&gt;

</description>
      <category>aws</category>
      <category>tutorial</category>
      <category>sso</category>
      <category>awtwins</category>
    </item>
  </channel>
</rss>
