<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AWS | Sergio Saucedo</title><link>https://seulsale.com/tags/aws/</link><atom:link href="https://seulsale.com/tags/aws/index.xml" rel="self" type="application/rss+xml"/><description>AWS</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sun, 15 Feb 2026 00:00:00 +0000</lastBuildDate><image><url>https://seulsale.com/media/sharing.png</url><title>AWS</title><link>https://seulsale.com/tags/aws/</link></image><item><title>Running AWS ECS Anywhere on a Proxmox Homelab</title><link>https://seulsale.com/post/ecs-anywhere-on-proxmox/</link><pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate><guid>https://seulsale.com/post/ecs-anywhere-on-proxmox/</guid><description>&lt;p&gt;My side projects need real infrastructure — APIs, scheduled scrapers, background workers — but paying for EC2 to run workloads that fit comfortably on hardware I already own never sat right with me. ECS Anywhere is the compromise I settled on: AWS owns the control plane, my Proxmox server owns the compute.&lt;/p&gt;
&lt;h2 id="the-setup"&gt;The setup&lt;/h2&gt;
&lt;p&gt;The homelab runs Proxmox VE on a 12-core, 32 GB machine. One VM is dedicated to ECS: it runs the &lt;code&gt;amazon-ecs-agent&lt;/code&gt; registered as an &lt;em&gt;external instance&lt;/em&gt; in a regular ECS cluster. From the AWS console it looks like any other container instance — task definitions, services, deployments, CloudWatch — but the tasks execute at home.&lt;/p&gt;
&lt;p&gt;Registration is a one-time SSM activation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aws ssm create-activation --iam-role ecsAnywhereRole
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -o ecs-anywhere-install.sh https://amazon-ecs-agent.s3.amazonaws.com/ecs-anywhere-install-latest.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo bash ecs-anywhere-install.sh &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cluster homelab &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --activation-id &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ACTIVATION_ID&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --activation-code &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$ACTIVATION_CODE&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --region us-east-1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After that, deploying to my house is identical to deploying to Fargate: push an image to ECR, update the task definition, and the agent pulls and swaps containers. My CI pipeline doesn&amp;rsquo;t know or care that the target is a VM under my desk.&lt;/p&gt;
&lt;h2 id="what-runs-on-it"&gt;What runs on it&lt;/h2&gt;
&lt;p&gt;Right now the external instance runs the production API and scraper for &lt;a href="https://qan.to" target="_blank" rel="noopener"&gt;Qanto&lt;/a&gt;, my personal finance app. The scraper is exactly the kind of workload this shines for: long-running, bursty, and completely indifferent to latency — but expensive to keep on a cloud instance 24/7.&lt;/p&gt;
&lt;h2 id="the-honest-trade-offs"&gt;The honest trade-offs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You are the datacenter.&lt;/strong&gt; Power outage, ISP hiccup, dead disk — that&amp;rsquo;s your pager. I mitigate with Proxmox snapshots and a monitoring VM (Prometheus + Grafana + Loki) that alerts me before users notice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ECS Anywhere still costs money&lt;/strong&gt; — about $0.01/hour per registered instance. For one instance that's ~$7/month, far below the EC2 equivalent for the same cores and RAM.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No ALB integration on-prem.&lt;/strong&gt; Ingress is my own problem; I solve it with Cloudflare Tunnel, which also means zero open ports on my router.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="why-not-just-docker-compose"&gt;Why not just Docker Compose?&lt;/h2&gt;
&lt;p&gt;I ran plain Compose for years. What ECS Anywhere buys me is the deployment story: immutable task definitions, rollbacks, the same &lt;code&gt;aws ecs update-service&lt;/code&gt; muscle memory I use professionally, and one console showing every environment. The homelab stopped being a snowflake and became just another cluster.&lt;/p&gt;</description></item></channel></rss>