<?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: Nicolas Balmaceda</title>
    <description>The latest articles on DEV Community by Nicolas Balmaceda (@nico_balmaceda).</description>
    <link>https://dev.to/nico_balmaceda</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3831826%2F06870724-db9d-46b1-a476-e66beb098838.jpg</url>
      <title>DEV Community: Nicolas Balmaceda</title>
      <link>https://dev.to/nico_balmaceda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nico_balmaceda"/>
    <language>en</language>
    <item>
      <title>I Got Tired of Reading thousands-line Terraform Plans, So I Built an Open-Source CLI to AI-Triage Them.</title>
      <dc:creator>Nicolas Balmaceda</dc:creator>
      <pubDate>Fri, 10 Jul 2026 15:12:25 +0000</pubDate>
      <link>https://dev.to/nico_balmaceda/i-got-tired-of-reading-thousands-line-terraform-plans-so-i-built-an-open-source-cli-to-ai-triage-37b9</link>
      <guid>https://dev.to/nico_balmaceda/i-got-tired-of-reading-thousands-line-terraform-plans-so-i-built-an-open-source-cli-to-ai-triage-37b9</guid>
      <description>&lt;p&gt;We’ve all been there. You open a Pull Request, scroll down to the CI/CD pipeline output to verify an infrastructure change, and you're hit with a massive, unreadable wall of red and green JSON text.&lt;/p&gt;

&lt;p&gt;Finding the real structural risks or accidental resource destructions feels like searching for a needle in a haystack. Senior engineers spend hours squinting at logs just to make sure nothing breaks production.&lt;/p&gt;

&lt;p&gt;I got completely tired of that workflow bottleneck, so I built a fix: &lt;strong&gt;tf-triage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It’s a lightweight Go-based CLI tool designed to completely automate how teams audit infrastructure updates by converting messy raw plans into clean, actionable, markdown summaries directly inside your developer workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Concept
&lt;/h2&gt;

&lt;p&gt;Instead of wasting your context window (and your budget) parsing irrelevant metadata, &lt;code&gt;tf-triage&lt;/code&gt; intercepts the standard JSON payload, isolates the critical resource changes, and routes them to an LLM provider to draft a structural impact review.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08fuw3armd9gabz7irdo.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08fuw3armd9gabz7irdo.png" alt=" " width="799" height="288"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Automating infrastructure validation at the PR Level&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here is why it's built differently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🔒 100% Local &amp;amp; Private:&lt;/strong&gt; Security teams hate sending cloud layouts to third-party endpoints. &lt;code&gt;tf-triage&lt;/code&gt; integrates natively with local &lt;strong&gt;Ollama&lt;/strong&gt; instances. You can run &lt;code&gt;llama3.2&lt;/code&gt; completely offline on your laptop for $0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;☁️ Ultra-Low Cost Cloud Routing:&lt;/strong&gt; If you prefer cloud speeds without high token bills, it supports highly efficient endpoints like &lt;strong&gt;DeepSeek (V4)&lt;/strong&gt; and &lt;strong&gt;Google Gemini&lt;/strong&gt; using lightweight, raw HTTP clients.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🤖 Native CI/CD PR Comments:&lt;/strong&gt; It doesn't just print output to the screen; it includes an automatic &lt;code&gt;comment&lt;/code&gt; sub-command that auto-detects if it's running inside GitHub Actions, GitLab CI, or Bitbucket, posting the summary straight onto the PR.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Quickstart: Try It Locally in 30 Seconds
&lt;/h2&gt;

&lt;p&gt;If you are on macOS or Linux, you can install the CLI tool instantly using Homebrew:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew tap balmha/tap
brew &lt;span class="nb"&gt;install &lt;/span&gt;tf-triage

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Running Natively Offline with Ollama
&lt;/h3&gt;

&lt;p&gt;Make sure you have &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;Ollama&lt;/a&gt; running on your machine with your model downloaded (&lt;code&gt;ollama pull llama3.2&lt;/code&gt;), then pipe your plan directly into the binary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform plan &lt;span class="nt"&gt;-json&lt;/span&gt; | tf-triage &lt;span class="nt"&gt;--provider&lt;/span&gt; ollama

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

&lt;/div&gt;



&lt;p&gt;The tool will parse the changes and automatically generate a beautifully formatted &lt;code&gt;tf-triage-results.md&lt;/code&gt; file right inside your working directory.&lt;/p&gt;




&lt;h2&gt;
  
  
  Automating Your Pull Requests (CI/CD GitOps Flow)
&lt;/h2&gt;

&lt;p&gt;The real magic happens when you drop this into your team's code review workflow. Because the tool natively reads standard runner environment variables, setting up automated PR comments requires exactly zero configuration.&lt;/p&gt;

&lt;p&gt;Here is a minimalist &lt;strong&gt;GitHub Actions&lt;/strong&gt; step configuration using DeepSeek to automatically review every infrastructure change:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Triage Terraform Infrastructure Plan&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;
    &lt;span class="na"&gt;DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ secrets.DEEPSEEK_API_KEY }}&lt;/span&gt;
  &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
    &lt;span class="s"&gt;terraform plan -json &amp;gt; plan.json&lt;/span&gt;

    &lt;span class="s"&gt;# 1. Analyze the plan and create the markdown report&lt;/span&gt;
    &lt;span class="s"&gt;tf-triage --file plan.json --provider deepseek&lt;/span&gt;

    &lt;span class="s"&gt;# 2. Automatically post the report as an interactive PR comment&lt;/span&gt;
    &lt;span class="s"&gt;tf-triage comment&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;When the pipeline runs, &lt;code&gt;tf-triage&lt;/code&gt; figures out the context, looks at the active pull request number, and drops a cleanly formatted security and resource impact review right into the comment feed. If you push a new commit, it intelligently updates its existing comment rather than spamming the thread.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Do You Think?
&lt;/h2&gt;

&lt;p&gt;I built this tool to scratch my own itch, keep infrastructure data locked down safely, and make code reviews vastly less tedious for platform teams.&lt;/p&gt;

&lt;p&gt;The project is fully open-source and active. If you want to check out the Go source code, submit an issue, or help support the tool with a GitHub star, drop by the repository!&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;[&lt;a href="https://github.com/balmha/tf-triage" rel="noopener noreferrer"&gt;https://github.com/balmha/tf-triage&lt;/a&gt;]&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>terraform</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Self-Healing SDLC: Integrating GitHub Actions with AWS DevOps Agents</title>
      <dc:creator>Nicolas Balmaceda</dc:creator>
      <pubDate>Wed, 18 Mar 2026 17:23:01 +0000</pubDate>
      <link>https://dev.to/nico_balmaceda/the-self-healing-sdlc-integrating-github-actions-with-aws-devops-agents-29ko</link>
      <guid>https://dev.to/nico_balmaceda/the-self-healing-sdlc-integrating-github-actions-with-aws-devops-agents-29ko</guid>
      <description>&lt;h2&gt;
  
  
  Beyond Traditional Automation
&lt;/h2&gt;

&lt;p&gt;For years, we’ve treated the Software Development Life Cycle (SDLC) as a linear path: Code -&amp;gt; Build -&amp;gt; Test -&amp;gt; Deploy. We’ve perfected the art of "reusable workflows" in GitHub Actions to standardize how we build and deploy microservices to ECS. &lt;/p&gt;

&lt;p&gt;But as of 2026, "standard" automation isn't enough. When a deployment succeeds but the service fails to communicate with a legacy monolith (like a host-based Kometsales instance), traditional CI/CD is blind. &lt;/p&gt;

&lt;h2&gt;
  
  
  Enter the AWS DevOps Agent (re:Invent 2025)
&lt;/h2&gt;

&lt;p&gt;Announced at the end of 2025, the &lt;strong&gt;AWS DevOps Agent&lt;/strong&gt; represents a shift toward "Agentic Operations." Unlike a standard monitor, this agent understands the context of your architecture. &lt;/p&gt;

&lt;h3&gt;
  
  
  The Hybrid Workflow: GitHub + AWS AI
&lt;/h3&gt;

&lt;p&gt;The most robust strategy in 2026 isn't replacing GitHub Actions, but augmenting them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;GitHub Actions (The Orchestrator):&lt;/strong&gt; Handles the heavy lifting of the build. It manages the multi-arch Docker builds, runs your unit tests, and triggers the deployment to AWS.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;DevOps Agent (The Watcher):&lt;/strong&gt; Once the Action completes, the Agent takes over. It monitors the "Blast Radius" of the change.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Technical Deep Dive: A Sample Reusable Workflow
&lt;/h2&gt;

&lt;p&gt;To make this work at scale, you need a templated approach. Here is a snippet of a high-complexity GitHub Action that prepares an environment for an AI-monitored deployment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deploy&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ECS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Agentic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Monitoring"&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;workflow_call&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;inputs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;service_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout Code&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build and Push Multi-Arch&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker buildx build \&lt;/span&gt;
            &lt;span class="s"&gt;--platform linux/amd64,linux/arm64 \&lt;/span&gt;
            &lt;span class="s"&gt;-t ${{ secrets.ECR_REPO }}/${{ inputs.service_name }}:latest --push .&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Update ECS Service&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;aws ecs update-service --cluster prod-cluster \&lt;/span&gt;
            &lt;span class="s"&gt;--service ${{ inputs.service_name }} --force-new-deployment&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Register Deployment with DevOps Agent&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;aws devops-guru start-deployment-analysis \&lt;/span&gt;
            &lt;span class="s"&gt;--deployment-id ${{ github.sha }} \&lt;/span&gt;
            &lt;span class="s"&gt;--resource-arn arn:aws:ecs:us-east-1:1234567890:service/${{ inputs.service_name }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Solving the "Monolith Connection" Problem
&lt;/h2&gt;

&lt;p&gt;A major pain point in microservice migrations is ensuring new containers can reach legacy services running on the host machine. &lt;/p&gt;

&lt;p&gt;In this new SDLC model, if your GitHub Action deploys a service that cannot reach the host-based monolith, the &lt;strong&gt;AWS DevOps Agent&lt;/strong&gt; can automatically identify the security group mismatch or the missing VPC route. Instead of a developer spending 4 hours debugging "Connection Refused," the Agent provides a root-cause analysis within seconds of the deployment finishing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Open Source Matters Here
&lt;/h2&gt;

&lt;p&gt;While the DevOps Agent is an AWS tool, the logic driving it relies on open standards. By using OpenTelemetry for your traces and standard GitHub Action triggers, you ensure that your "Agentic SDLC" isn't locked into a single vendor's black box. You retain the flexibility to swap components while reaping the benefits of AI-speed troubleshooting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The future of DevOps isn't just about writing YAML; it's about closing the feedback loop between &lt;strong&gt;Deployment&lt;/strong&gt; and &lt;strong&gt;Observation&lt;/strong&gt;. By combining the modular power of GitHub Actions with the contextual intelligence of AWS's new agents, we're finally moving toward truly self-healing infrastructure.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;How are you handling post-deployment monitoring in 2026? Are you still manually checking logs, or have you offloaded that to an agent? Let's discuss in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>aws</category>
      <category>cicd</category>
      <category>ai</category>
    </item>
    <item>
      <title>Why AWS Graviton5 Makes Multi-Arch Docker Builds Mandatory in 2026</title>
      <dc:creator>Nicolas Balmaceda</dc:creator>
      <pubDate>Wed, 18 Mar 2026 17:16:02 +0000</pubDate>
      <link>https://dev.to/nico_balmaceda/why-aws-graviton5-makes-multi-arch-docker-builds-mandatory-in-2026-4n52</link>
      <guid>https://dev.to/nico_balmaceda/why-aws-graviton5-makes-multi-arch-docker-builds-mandatory-in-2026-4n52</guid>
      <description>&lt;h2&gt;
  
  
  The Graviton5 Shift: Beyond the Hype
&lt;/h2&gt;

&lt;p&gt;At re:Invent 2025, AWS didn't just iterate; they flexed. The new &lt;strong&gt;Graviton5&lt;/strong&gt; processor (powering the &lt;strong&gt;M9g instances&lt;/strong&gt;) brings a massive shift to the EC2 landscape. Built on a 3nm process, it packs &lt;strong&gt;192 cores&lt;/strong&gt; on a single die, effectively eliminating the NUMA (Non-Uniform Memory Access) latency issues that sometimes plagued earlier multi-socket ARM designs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Benchmarks vs. Graviton4:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;25% higher compute performance&lt;/strong&gt; for general-purpose workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5x larger L3 cache&lt;/strong&gt;, which significantly reduces stalls for memory-intensive apps like Redis or Java-based microservices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;30% faster database performance&lt;/strong&gt; (specifically reported by early testers like Atlassian for Jira).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But for us in DevOps, the biggest "hidden" feature is the &lt;strong&gt;Nitro Isolation Engine&lt;/strong&gt;. This uses formal mathematical verification to prove that workloads are isolated at the hardware level—a massive win for security-conscious CI/CD environments.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Infrastructure Challenge: Bridging the Arch Gap
&lt;/h2&gt;

&lt;p&gt;If your team is still building exclusively for &lt;code&gt;x86_64&lt;/code&gt;, you are essentially leaving money on the table. However, migrating isn't as simple as flipping a switch. You need a strategy that handles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Multi-Arch Image Manifests:&lt;/strong&gt; Ensuring a single tag works on both developer Macbooks (ARM), legacy CI runners (x86), and Graviton5 production nodes.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Legacy Communication:&lt;/strong&gt; Handling scenarios where new microservices on ECS need to reach a monolithic service (like a legacy ERP or Kometsales) still running on the host machine.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Optimizing the Local Loop with Tilt
&lt;/h3&gt;

&lt;p&gt;We’ve found that using &lt;strong&gt;Tilt&lt;/strong&gt; for local &lt;code&gt;docker-compose&lt;/code&gt; deployments is a game changer. It allows us to simulate the multi-arch environment locally. By adding a &lt;code&gt;platform&lt;/code&gt; attribute to our compose files, we can test how our services behave before they hit the real M9g instances.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;api-service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
      &lt;span class="na"&gt;context&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;./api&lt;/span&gt;
      &lt;span class="na"&gt;platforms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;linux/amd64"&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;linux/arm64"&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-repo/api:latest&lt;/span&gt;
    &lt;span class="c1"&gt;# Force ARM locally if you're on a Mac/Graviton dev box&lt;/span&gt;
    &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;linux/arm64&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Mastering the Multi-Arch Build
&lt;/h2&gt;

&lt;p&gt;To support Graviton5, your GitHub Actions or Jenkins pipelines must move to &lt;code&gt;docker buildx&lt;/code&gt;. Here is a professional-grade pattern for a multi-arch Dockerfile that handles architecture-specific packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Use a multi-platform base image&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;--platform=$BUILDPLATFORM node:20-alpine&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;builder&lt;/span&gt;

&lt;span class="k"&gt;ARG&lt;/span&gt;&lt;span class="s"&gt; TARGETARCH&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="c"&gt;# Conditional logic for architecture-specific dependencies&lt;/span&gt;
&lt;span class="k"&gt;RUN if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$TARGETARCH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"arm64"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;      apk add &lt;span class="nt"&gt;--no-cache&lt;/span&gt; libhook-arm-special&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;      apk add &lt;span class="nt"&gt;--no-cache&lt;/span&gt; libhook-x86-standard&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;    &lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm run build

&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:20-alpine&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; --from=builder /app/dist ./dist&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "dist/main.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The CI/CD Command
&lt;/h3&gt;

&lt;p&gt;In your pipeline, you no longer run a simple build. You use the &lt;code&gt;bake&lt;/code&gt; or &lt;code&gt;buildx&lt;/code&gt; command to push a manifest list to ECR:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker buildx build &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--platform&lt;/span&gt; linux/amd64,linux/arm64 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tag&lt;/span&gt; my-registry/service:v1.0.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--push&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Final Thoughts: The 2026 DevOps Reality
&lt;/h2&gt;

&lt;p&gt;The era of "architecture-agnostic" engineering is over. With Graviton5 delivering 40% better price-performance than Intel counterparts, the question isn't &lt;em&gt;if&lt;/em&gt; you'll migrate, but &lt;em&gt;how&lt;/em&gt; fast your CI/CD can adapt. &lt;/p&gt;

&lt;p&gt;By automating your image manifests and refining your local dev environment with tools like Tilt, you turn a hardware migration into a competitive advantage.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you started testing M9g instances yet? Drop a comment below with your initial performance findings!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>docker</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
