<?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: Slawa Pidgorny</title>
    <description>The latest articles on DEV Community by Slawa Pidgorny (@spidgorny).</description>
    <link>https://dev.to/spidgorny</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%2F111799%2F0738554c-8f6d-4819-9be2-e87d4612b89f.jpeg</url>
      <title>DEV Community: Slawa Pidgorny</title>
      <link>https://dev.to/spidgorny</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spidgorny"/>
    <language>en</language>
    <item>
      <title>Finally a real-world proof that developers can do FinOps. Take a look.</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Sun, 23 Aug 2026 12:04:44 +0000</pubDate>
      <link>https://dev.to/spidgorny/finally-a-real-world-proof-that-developers-can-do-finops-take-a-look-3pmi</link>
      <guid>https://dev.to/spidgorny/finally-a-real-world-proof-that-developers-can-do-finops-take-a-look-3pmi</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/spidgorny/how-one-aws-bill-went-from-almost-8000-a-month-toward-6000-2jc" class="crayons-story__hidden-navigation-link"&gt;How One AWS Bill Went From Almost $8,000 a Month Toward $6,000&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/spidgorny" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F111799%2F0738554c-8f6d-4819-9be2-e87d4612b89f.jpeg" alt="spidgorny profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/spidgorny" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Slawa Pidgorny
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Slawa Pidgorny
                
                
              
              &lt;div id="story-author-preview-content-4467636" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/spidgorny" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F111799%2F0738554c-8f6d-4819-9be2-e87d4612b89f.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Slawa Pidgorny&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/spidgorny/how-one-aws-bill-went-from-almost-8000-a-month-toward-6000-2jc" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 23&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/spidgorny/how-one-aws-bill-went-from-almost-8000-a-month-toward-6000-2jc" id="article-link-4467636"&gt;
          How One AWS Bill Went From Almost $8,000 a Month Toward $6,000
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/infrastructure"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;infrastructure&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/spidgorny/how-one-aws-bill-went-from-almost-8000-a-month-toward-6000-2jc" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/spidgorny/how-one-aws-bill-went-from-almost-8000-a-month-toward-6000-2jc#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How One AWS Bill Went From Almost $8,000 a Month Toward $6,000</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Sun, 23 Aug 2026 12:02:50 +0000</pubDate>
      <link>https://dev.to/spidgorny/how-one-aws-bill-went-from-almost-8000-a-month-toward-6000-2jc</link>
      <guid>https://dev.to/spidgorny/how-one-aws-bill-went-from-almost-8000-a-month-toward-6000-2jc</guid>
      <description>&lt;h2&gt;
  
  
  Two real scans, eight weeks apart, on the same account
&lt;/h2&gt;

&lt;p&gt;Cloud bills rarely jump overnight. They drift.&lt;/p&gt;

&lt;p&gt;A launch adds an oversized Fargate service. A prototype gets a managed database. An experiment ends, but the resources it created stay running. Buckets accumulate without a lifecycle policy because no one owns the cleanup decision. By the time the monthly total becomes uncomfortable, the waste is already spread across a dozen services.&lt;/p&gt;

&lt;p&gt;This post is not a hypothetical. It's two &lt;code&gt;greenops-scan&lt;/code&gt; reports run against the same AWS account, eight weeks apart, plus that account's own AWS Cost Explorer graph. Here is exactly what the scans found, what changed between them, and what AWS's own forecast says next.&lt;/p&gt;

&lt;h2&gt;
  
  
  The account
&lt;/h2&gt;

&lt;p&gt;The account runs a mix of ECS/Fargate services, a DocumentDB (MongoDB-compatible) cluster, an Application Load Balancer, ElastiCache, a smaller RDS instance, AWS Transfer Family, and the usual security/compliance tooling (GuardDuty, CloudTrail, Config, KMS, Secrets Manager). By the most recent Cost Explorer data pulled through the scanner, the account was billing &lt;strong&gt;$7,726.20&lt;/strong&gt; for the month, with the two largest line items being ECS ($3,235.93) and DocumentDB ($1,506.78).&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%2Fqlccdg78jobcs1hyrplx.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%2Fqlccdg78jobcs1hyrplx.png" alt="AWS Cost Explorer graph showing the account's monthly cost climbing from about $2,000 in late 2023 to nearly $7,800 by mid-2026, with AWS's own forecast for the following month, marked as an estimate with an 80% prediction interval, projecting a drop toward roughly $5,000–$6,000" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The account's real Cost Explorer history: a near-continuous climb from about $2,000/month in late 2023 to nearly $7,800/month by mid-2026. The last bar is AWS's own forecast (marked with `&lt;/em&gt;&lt;em&gt;` and an 80% prediction interval) for the following month — not a confirmed result, but a trend AWS's own model expects given recent changes to the account.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the first scan found
&lt;/h2&gt;

&lt;p&gt;Running &lt;code&gt;npx greenops-scan&lt;/code&gt; against a read-only profile for this account returned &lt;strong&gt;53 findings&lt;/strong&gt; worth an estimated &lt;strong&gt;$1,176.83 a month&lt;/strong&gt; ($14,121.96/year) in identifiable waste. Nothing in the list was exotic — it was ordinary drift, spread across three modules.&lt;/p&gt;

&lt;h3&gt;
  
  
  ECS: 15 over-provisioned Fargate tasks — $756.83/month
&lt;/h3&gt;

&lt;p&gt;The scanner flagged 15 Fargate task definitions running well above any resource profile the workload needed, ranging from 2 vCPU/4 GB up to a single task provisioned at &lt;strong&gt;16 vCPU / 32 GB&lt;/strong&gt;. It also flagged one ECS cluster with no running tasks or services at all.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task size&lt;/th&gt;
&lt;th&gt;Findings&lt;/th&gt;
&lt;th&gt;Est. savings/mo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;16 vCPU / 32 GB&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$172.99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8 vCPU / 16 GB&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;$86.50 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 vCPU / 8 GB&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;$43.25 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 vCPU / 4 GB&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;$21.62 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Empty cluster&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;$0 (still worth cleaning up)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  S3: 37 buckets with no lifecycle policy — $415/month
&lt;/h3&gt;

&lt;p&gt;Thirty-seven S3 buckets — mostly CodeBuild/CodePipeline artifact buckets — had no lifecycle rules, meaning every object stayed in the Standard storage tier indefinitely instead of transitioning to Glacier or being expired. Individually cheap ($10–15/month per bucket), collectively the third-largest line item in the report.&lt;/p&gt;

&lt;h3&gt;
  
  
  EC2: 1 stopped instance still billing storage — $5/month
&lt;/h3&gt;

&lt;p&gt;A stopped &lt;code&gt;t2.small&lt;/code&gt; instance was still incurring EBS storage costs. Small on its own, but the kind of thing that's invisible in Cost Explorer's per-service view and only shows up when something checks per-resource state.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed by the second scan
&lt;/h2&gt;

&lt;p&gt;Eight weeks later, the same account, scanned again: &lt;strong&gt;1 finding&lt;/strong&gt;, worth &lt;strong&gt;$105.12 a month&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The one remaining item was a DocumentDB cluster (&lt;code&gt;kaeinstancedb&lt;/code&gt;) still running on an Intel-based &lt;code&gt;db.r5.xlarge&lt;/code&gt; instance class, where switching to a Graviton-based class would cut roughly 30% off that instance's cost.&lt;/p&gt;

&lt;p&gt;That means between the two scans, &lt;strong&gt;91% of the originally flagged waste was addressed&lt;/strong&gt; — the 15 over-provisioned Fargate tasks, the 37 S3 buckets missing lifecycle rules, and the idle EC2 instance were no longer showing up as findings, while a new opportunity (the DocumentDB instance family) surfaced on the second pass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; that last finding has since been resolved too. The &lt;code&gt;kaeinstancedb&lt;/code&gt; cluster was migrated to &lt;code&gt;db.r6g.large&lt;/code&gt; — Graviton, as the scan recommended, but one size class smaller than the &lt;code&gt;db.r7g.xlarge&lt;/code&gt; the report suggested. That's a bigger cut than the flagged $105.12/month, since it downsizes the instance itself in addition to switching CPU architecture. With that change, every finding from the first scan has now been addressed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading the Cost Explorer graph honestly
&lt;/h2&gt;

&lt;p&gt;The graph above is the account's real multi-year cost history, not an illustration. Two things are true about it, and it's worth being precise about which is which:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confirmed:&lt;/strong&gt; the bill climbed steadily from roughly $2,000/month in late 2023 to nearly $7,800/month by mid-2026, and the scan-over-scan comparison above confirms that a meaningful chunk of flagged waste was cleaned up in that window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Not yet confirmed:&lt;/strong&gt; the final bar on the graph is AWS Cost Explorer's own forecast for the following month, explicitly marked with a double asterisk and an 80% prediction interval, projecting the bill down toward roughly $5,000–$6,000. That's AWS's own model reacting to the account's recent trend — a forecast, not a closed month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're reporting both numbers because a scanner report is only useful if it's honest about what it can and can't prove. The $1,176.83 → $105.12 change in flagged waste is a fact from two independent scans. The next month's total landing near $6,000 is AWS's own projection, and worth watching, not asserting as done.&lt;/p&gt;

&lt;h2&gt;
  
  
  What made the difference
&lt;/h2&gt;

&lt;p&gt;Three things, consistently:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A clear list.&lt;/strong&gt; The scanner turned an abstract "the bill keeps climbing" concern into 53 specific resources with issue descriptions and dollar estimates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A safe first step.&lt;/strong&gt; Because the scan is read-only and runs locally, nothing needed elevated write access to produce the list — the actual changes (right-sizing Fargate tasks, adding lifecycle rules, terminating an idle instance) were made deliberately, by hand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A second (and third) scan to check the work.&lt;/strong&gt; Re-running the same read-only scan two months later is what actually confirmed 91% of the flagged items were resolved, instead of assuming the fixes stuck — and the follow-up on the last item confirmed the rest.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A realistic takeaway
&lt;/h2&gt;

&lt;p&gt;Not every account will show a full cleanup between two scans, and not every Cost Explorer forecast will play out exactly as projected. But the pattern here — over-provisioned compute, storage without lifecycle rules, and a stale instance family — is common enough that it's worth checking for on any account whose bill has been drifting upward for a while.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx greenops-scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CLI is free to use. The output is local. Run it twice, a few weeks apart, and see what actually changed.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>The Source Is Closed. Here's How You Can Still Trust the Supply Chain.</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Wed, 19 Aug 2026 20:35:47 +0000</pubDate>
      <link>https://dev.to/spidgorny/the-source-is-closed-heres-how-you-can-still-trust-the-supply-chain-hpn</link>
      <guid>https://dev.to/spidgorny/the-source-is-closed-heres-how-you-can-still-trust-the-supply-chain-hpn</guid>
      <description>&lt;h2&gt;
  
  
  Security considerations of the GreenOps Scan CLI
&lt;/h2&gt;

&lt;p&gt;Whenever someone asks "why isn't this open source?" about &lt;a href="https://greenops.cloud" rel="noopener noreferrer"&gt;GreenOps Scan&lt;/a&gt;, the honest answer is: it isn't. The CLI is &lt;strong&gt;free to use&lt;/strong&gt; — &lt;code&gt;npx greenops-scan&lt;/code&gt; runs on your machine, with your credentials, without a login or a paywall — but the source code itself is not published. If you clone &lt;a href="https://github.com/spidgorny/greenops-scan" rel="noopener noreferrer"&gt;&lt;code&gt;github.com/spidgorny/greenops-scan&lt;/code&gt;&lt;/a&gt;, you'll find a &lt;code&gt;README.md&lt;/code&gt; and a &lt;code&gt;LICENSE&lt;/code&gt;, not the implementation.&lt;/p&gt;

&lt;p&gt;That's a deliberate trade-off, not an oversight, and it's fair to ask what it costs you as a user. If you can't read the code yourself, how do you know it's safe to point at a real AWS account? This post is about the two things you &lt;em&gt;can&lt;/em&gt; independently verify — the published package's dependency supply chain and its behavior at runtime — and why both hold up well even without access to the source.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "closed source" does and doesn't mean here
&lt;/h2&gt;

&lt;p&gt;Closed source means you can't read &lt;code&gt;src/providers/aws/modules/ec2.ts&lt;/code&gt; on GitHub. It does &lt;strong&gt;not&lt;/strong&gt; mean the package you actually install is a black box:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npx greenops-scan&lt;/code&gt; downloads a real, versioned npm package (&lt;code&gt;greenops-scan&lt;/code&gt;) with a public &lt;a href="https://www.npmjs.com/package/greenops-scan" rel="noopener noreferrer"&gt;npm registry page&lt;/a&gt;, a public dependency list, and a full history of every published version.&lt;/li&gt;
&lt;li&gt;Every dependency it pulls in is itself open source and independently auditable — the AWS SDK for JavaScript v3, &lt;code&gt;@inquirer/prompts&lt;/code&gt;, &lt;code&gt;pdfkit&lt;/code&gt;, &lt;code&gt;ora&lt;/code&gt;, &lt;code&gt;chalk&lt;/code&gt;, and so on.&lt;/li&gt;
&lt;li&gt;Third-party supply-chain scanners (not us, not anything we control) independently analyze the published package and its transitive dependencies for known vulnerabilities, licensing issues, and suspicious behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the part worth taking seriously: you don't have to trust &lt;em&gt;our&lt;/em&gt; claims about the code — you can check what independent tooling says about the artifact you're actually running.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Snyk says
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://security.snyk.io/package/npm/greenops-scan" rel="noopener noreferrer"&gt;security.snyk.io/package/npm/greenops-scan&lt;/a&gt;&lt;/strong&gt; runs Snyk's vulnerability database against every published version of the package and its full dependency tree. It's the same database and scanning approach Snyk uses for every package on npm — GreenOps Scan gets no special treatment, favorable or otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Socket.dev says
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://socket.dev/npm/package/greenops-scan/alerts/0.1.30?tab=dependencies" rel="noopener noreferrer"&gt;socket.dev/npm/package/greenops-scan/alerts/0.1.30?tab=dependencies&lt;/a&gt;&lt;/strong&gt; goes a step further than a CVE database. Socket's static analysis looks at &lt;em&gt;behavior&lt;/em&gt;, not just known vulnerabilities — install scripts, filesystem/network/shell access, obfuscated code, typosquatting risk, maintainer changes, and dependency freshness. That kind of analysis is exactly what you'd want to check for a CLI tool that's about to run with your AWS credentials.&lt;/p&gt;

&lt;p&gt;We treat Socket's findings as a maintenance backlog, not a one-time checkbox. Recently that meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bumping every &lt;code&gt;@aws-sdk/*&lt;/code&gt; client to a current release (one older version had a documented caching bug in credential resolution, unrelated to Socket but worth fixing anyway)&lt;/li&gt;
&lt;li&gt;Bumping &lt;code&gt;googleapis&lt;/code&gt;, &lt;code&gt;@inquirer/prompts&lt;/code&gt;, &lt;code&gt;ini&lt;/code&gt;, &lt;code&gt;open&lt;/code&gt;, &lt;code&gt;ora&lt;/code&gt;, and &lt;code&gt;pdfkit&lt;/code&gt; off stale majors&lt;/li&gt;
&lt;li&gt;Pinning &lt;code&gt;gaxios&lt;/code&gt; to a version that drops a deprecated &lt;code&gt;rimraf&lt;/code&gt;/&lt;code&gt;glob&lt;/code&gt; chain pulled in transitively through &lt;code&gt;googleapis-common&lt;/code&gt; — a case where the &lt;em&gt;direct&lt;/em&gt; dependency (&lt;code&gt;googleapis&lt;/code&gt;) was current, but a deep transitive pin was still forcing a deprecated package into the tree&lt;/li&gt;
&lt;li&gt;Deliberately &lt;strong&gt;not&lt;/strong&gt; jumping &lt;code&gt;chalk&lt;/code&gt; to its latest major, because that version is ESM-only and would have forced a much larger, riskier rewrite of the CLI's module system for no security benefit — a reminder that "bump everything to latest" isn't always the safer choice&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some low-severity items remain and are expected to for a while — &lt;code&gt;node-domexception&lt;/code&gt;, for instance, is deprecated several layers deep inside &lt;code&gt;node-fetch&lt;/code&gt; (a dependency of Google's own &lt;code&gt;gaxios&lt;/code&gt; HTTP client), with no fix available from our side short of dropping GCP support entirely. That's a normal, low-risk state for a Node.js project with any HTTP or cloud SDK dependencies — the goal isn't a zero-alert dashboard, it's making sure nothing exploitable or high-risk sits unaddressed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the CLI actually does at runtime — verifiable independent of the source
&lt;/h2&gt;

&lt;p&gt;Beyond the dependency tree, the two things that matter most for a tool touching your cloud account are (1) what API calls it makes and (2) where your data goes. Both are observable without reading a line of source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read-only AWS calls only.&lt;/strong&gt; Every AWS API call GreenOps Scan makes is a &lt;code&gt;Describe*&lt;/code&gt;, &lt;code&gt;Get*&lt;/code&gt;, &lt;code&gt;List*&lt;/code&gt;, or equivalent read-only operation. You don't have to take our word for it — run the scan against an IAM profile with only the AWS-managed &lt;code&gt;ReadOnlyAccess&lt;/code&gt; policy attached (see our &lt;a href="https://dev.to/blog/blog-aws-profile-readonly"&gt;read-only profile walkthrough&lt;/a&gt;) and any accidental write call would fail with &lt;code&gt;AccessDenied&lt;/code&gt;, loudly, immediately. IAM enforces this, not the tool's good behavior.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing leaves your machine.&lt;/strong&gt; The scan runs locally, reads your local AWS credentials the same way the AWS CLI does, and writes its report (JSON, table, or PDF) to your local terminal or filesystem. There's no telemetry endpoint, no upload step, no server-side account required to get a scan result. You can verify this yourself with a network monitor (e.g. &lt;code&gt;lsof -i&lt;/code&gt; or a proxy like &lt;code&gt;mitmproxy&lt;/code&gt;) while a scan runs — the only outbound calls you'll see are to AWS's own API endpoints (and Google's, if you're scanning GCP).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard, versioned distribution.&lt;/strong&gt; The package is published to the public npm registry under a fixed name and semantic version, the same distribution mechanism as every other npm package — no custom installer, no binary blob, no &lt;code&gt;curl | bash&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  So why keep the source closed at all?
&lt;/h2&gt;

&lt;p&gt;Fair question, and we don't dodge it: GreenOps Scan is free to use but not free to fork or resell — the business behind it depends on that. Closed source is a commercial choice, not a security posture. The point of this post is that those are separable: you can independently verify the security of the &lt;em&gt;published artifact&lt;/em&gt; (via Snyk and Socket) and its &lt;em&gt;runtime behavior&lt;/em&gt; (via IAM and network inspection) without needing the source itself. Both checks currently come back clean, and we intend to keep it that way as new versions ship.&lt;/p&gt;

&lt;p&gt;If you want to see the current numbers for yourself rather than trust a screenshot in a blog post, the links are right there at the top — check them before you run the scanner, and check them again after every version bump.&lt;/p&gt;

</description>
      <category>security</category>
      <category>supplychain</category>
      <category>snyk</category>
    </item>
    <item>
      <title>Try GreenOps Scan Safely: Create a Read-Only AWS Profile First</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Wed, 19 Aug 2026 20:33:23 +0000</pubDate>
      <link>https://dev.to/spidgorny/try-greenops-scan-safely-create-a-read-only-aws-profile-first-3nle</link>
      <guid>https://dev.to/spidgorny/try-greenops-scan-safely-create-a-read-only-aws-profile-first-3nle</guid>
      <description>&lt;h2&gt;
  
  
  A five-minute setup that guarantees the scanner can't touch anything
&lt;/h2&gt;

&lt;p&gt;Running a third-party tool against your AWS account raises a fair question before you type a single command: &lt;strong&gt;what can it actually do with my credentials?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://greenops.cloud" rel="noopener noreferrer"&gt;GreenOps Scan&lt;/a&gt; the honest answer should be "nothing but read." But you do not have to take that on faith. AWS lets you create a dedicated IAM user or role that is &lt;em&gt;technically incapable&lt;/em&gt; of making changes — no write, no delete, no configuration changes, anywhere. If you attach only &lt;code&gt;ReadOnlyAccess&lt;/code&gt; to the credentials you scan with, there is no policy misconfiguration or bug in the scanner that could put your infrastructure at risk.&lt;/p&gt;

&lt;p&gt;This post walks through creating that profile with the AWS CLI, so you can try &lt;code&gt;npx greenops-scan&lt;/code&gt; with full confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a dedicated profile instead of your existing one
&lt;/h2&gt;

&lt;p&gt;Your day-to-day AWS CLI profile is probably tied to broad permissions you use for real work — deploying, provisioning, tagging, cleaning up. Even if you trust the tool, reusing that profile means the &lt;em&gt;blast radius&lt;/em&gt; of any mistake (yours, the tool's, or a future dependency's) is as large as your normal permissions.&lt;/p&gt;

&lt;p&gt;A dedicated read-only profile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;can be created and deleted in minutes&lt;/li&gt;
&lt;li&gt;is scoped with an AWS-managed policy, not something you have to write and audit yourself&lt;/li&gt;
&lt;li&gt;makes the guarantee "this can't change anything" enforced by IAM, not by trusting the tool's code&lt;/li&gt;
&lt;li&gt;can be reused later for any other inspection tool, dashboard, or audit script&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Create an IAM user for scanning
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam create-user &lt;span class="nt"&gt;--user-name&lt;/span&gt; greenops-scan-readonly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a new IAM user with no permissions attached yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Attach the AWS-managed ReadOnlyAccess policy
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam attach-user-policy &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--user-name&lt;/span&gt; greenops-scan-readonly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/ReadOnlyAccess
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ReadOnlyAccess&lt;/code&gt; is an AWS-managed policy (you don't own or maintain it — AWS does) that grants &lt;code&gt;Describe*&lt;/code&gt;, &lt;code&gt;Get*&lt;/code&gt;, &lt;code&gt;List*&lt;/code&gt;, and similar read-only actions across services, while explicitly excluding any action that creates, modifies, or deletes a resource. It's the same policy GreenOps' own &lt;a href="https://greenops.cloud/accounts/add" rel="noopener noreferrer"&gt;cross-account scanner role&lt;/a&gt; uses for continuous monitoring.&lt;/p&gt;

&lt;p&gt;Do not attach any additional policies to this user. The whole point is that this identity has exactly one capability: reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Create an access key for the user
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam create-access-key &lt;span class="nt"&gt;--user-name&lt;/span&gt; greenops-scan-readonly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output looks like this — copy the &lt;code&gt;AccessKeyId&lt;/code&gt; and &lt;code&gt;SecretAccessKey&lt;/code&gt;, since the secret is only shown once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"AccessKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"UserName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"greenops-scan-readonly"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"AccessKeyId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AKIAEXAMPLE1234567"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"SecretAccessKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abcdEXAMPLEsecretkeyvaluexxxxxxxxxxxxxxxx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"CreateDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-08-13T09:00:00Z"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Add the credentials as a new local AWS CLI profile
&lt;/h2&gt;

&lt;p&gt;Rather than overwriting your default profile, add a named profile — call it something obvious like &lt;code&gt;greenops-readonly&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws configure &lt;span class="nt"&gt;--profile&lt;/span&gt; greenops-readonly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll be prompted for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="err"&gt;AWS&lt;/span&gt; &lt;span class="err"&gt;Access&lt;/span&gt; &lt;span class="err"&gt;Key&lt;/span&gt; &lt;span class="err"&gt;ID&lt;/span&gt; &lt;span class="err"&gt;[None]:&lt;/span&gt; &lt;span class="err"&gt;AKIAEXAMPLE1234567&lt;/span&gt;
&lt;span class="err"&gt;AWS&lt;/span&gt; &lt;span class="err"&gt;Secret&lt;/span&gt; &lt;span class="err"&gt;Access&lt;/span&gt; &lt;span class="err"&gt;Key&lt;/span&gt; &lt;span class="err"&gt;[None]:&lt;/span&gt; &lt;span class="err"&gt;abcdEXAMPLEsecretkeyvaluexxxxxxxxxxxxxxxx&lt;/span&gt;
&lt;span class="err"&gt;Default&lt;/span&gt; &lt;span class="err"&gt;region&lt;/span&gt; &lt;span class="err"&gt;name&lt;/span&gt; &lt;span class="err"&gt;[None]:&lt;/span&gt; &lt;span class="err"&gt;eu-west-1&lt;/span&gt;
&lt;span class="err"&gt;Default&lt;/span&gt; &lt;span class="err"&gt;output&lt;/span&gt; &lt;span class="err"&gt;format&lt;/span&gt; &lt;span class="err"&gt;[None]:&lt;/span&gt; &lt;span class="err"&gt;json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This writes the profile into &lt;code&gt;~/.aws/credentials&lt;/code&gt; and &lt;code&gt;~/.aws/config&lt;/code&gt;, alongside — not over — any existing profiles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Verify the profile actually has read-only access (and nothing more)
&lt;/h2&gt;

&lt;p&gt;Confirm the identity resolves correctly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sts get-caller-identity &lt;span class="nt"&gt;--profile&lt;/span&gt; greenops-readonly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then confirm it can read, as expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 describe-instances &lt;span class="nt"&gt;--profile&lt;/span&gt; greenops-readonly &lt;span class="nt"&gt;--region&lt;/span&gt; eu-west-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And confirm it genuinely cannot write. Try something harmless but mutating, like creating a tag or a security group, and expect an &lt;code&gt;UnauthorizedOperation&lt;/code&gt; / &lt;code&gt;AccessDenied&lt;/code&gt; error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ec2 create-tags &lt;span class="nt"&gt;--profile&lt;/span&gt; greenops-readonly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--resources&lt;/span&gt; i-0123456789abcdef0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--tags&lt;/span&gt; &lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;test&lt;/span&gt;,Value&lt;span class="o"&gt;=&lt;/span&gt;should-fail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;An error occurred (UnauthorizedOperation) when calling the CreateTags operation:
You are not authorized to perform this operation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that call fails with an authorization error, the profile is doing exactly what it should.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Run GreenOps Scan against the read-only profile
&lt;/h2&gt;

&lt;p&gt;Now you can run the scanner with full confidence that it is structurally unable to change anything in your account:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx greenops-scan &lt;span class="nt"&gt;--profile&lt;/span&gt; greenops-readonly &lt;span class="nt"&gt;--region&lt;/span&gt; eu-west-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or omit the flags and let the interactive prompt list your available profiles, including &lt;code&gt;greenops-readonly&lt;/code&gt;, so you can pick it explicitly each time.&lt;/p&gt;

&lt;p&gt;GreenOps Scan itself only ever calls read-only AWS APIs (&lt;code&gt;Describe*&lt;/code&gt;, &lt;code&gt;Get*&lt;/code&gt;, &lt;code&gt;List*&lt;/code&gt;) — see &lt;a href="https://dev.to/blog/blog-cloud-waste"&gt;how GreenOps Scan handles credentials&lt;/a&gt; for more on that design. Pairing that behavior with a profile that is &lt;em&gt;incapable&lt;/em&gt; of anything else gives you two independent layers of protection instead of one: the tool's own design, and IAM's enforcement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleaning up afterwards
&lt;/h2&gt;

&lt;p&gt;If you only wanted to try the CLI once, you can safely remove the user when you're done:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws iam detach-user-policy &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--user-name&lt;/span&gt; greenops-scan-readonly &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--policy-arn&lt;/span&gt; arn:aws:iam::aws:policy/ReadOnlyAccess

aws iam list-access-keys &lt;span class="nt"&gt;--user-name&lt;/span&gt; greenops-scan-readonly
aws iam delete-access-key &lt;span class="nt"&gt;--user-name&lt;/span&gt; greenops-scan-readonly &lt;span class="nt"&gt;--access-key-id&lt;/span&gt; AKIAEXAMPLE1234567

aws iam delete-user &lt;span class="nt"&gt;--user-name&lt;/span&gt; greenops-scan-readonly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And drop the corresponding profile block from &lt;code&gt;~/.aws/credentials&lt;/code&gt; and &lt;code&gt;~/.aws/config&lt;/code&gt; if you no longer need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a one-off scan to continuous, still-read-only monitoring
&lt;/h2&gt;

&lt;p&gt;If the scan surfaces useful findings and your team wants recurring visibility instead of a one-time snapshot, &lt;a href="https://greenops.cloud" rel="noopener noreferrer"&gt;GreenOps Cloud&lt;/a&gt; extends the same read-only model with a cross-account IAM role (scoped with &lt;code&gt;sts:ExternalId&lt;/code&gt; and the same &lt;code&gt;ReadOnlyAccess&lt;/code&gt; policy) so continuous monitoring never requires write access either.&lt;/p&gt;

&lt;p&gt;Either way — a local profile for a single &lt;code&gt;npx greenops-scan&lt;/code&gt; run, or a cross-account role for ongoing monitoring — the underlying guarantee stays the same: the scanner can look, but it cannot touch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #AWS #IAM #ReadOnlyAccess #CloudSecurity #FinOps #GreenOps&lt;/p&gt;

</description>
      <category>aws</category>
      <category>readonlyaccess</category>
      <category>cloudsecurity</category>
      <category>finops</category>
    </item>
    <item>
      <title>GreenOps vs. AWS Native Cost &amp; Carbon Tools</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Wed, 19 Aug 2026 20:31:44 +0000</pubDate>
      <link>https://dev.to/spidgorny/greenops-vs-aws-native-cost-carbon-tools-571k</link>
      <guid>https://dev.to/spidgorny/greenops-vs-aws-native-cost-carbon-tools-571k</guid>
      <description>&lt;h2&gt;
  
  
  Where the added value is
&lt;/h2&gt;

&lt;p&gt;AWS gives teams an impressive set of cost and sustainability tools. If you are already using Trusted Advisor, Cost Explorer, the Customer Carbon Footprint Tool, or Compute Optimizer, you are doing the right things.&lt;/p&gt;

&lt;p&gt;The question a lot of teams run into is: what do I do with the signal those tools give me? GreenOps is designed to answer that next step. It is not a replacement for AWS services; it is a focused, actionable second opinion that turns their high-level data into a ranked list of specific resources worth reviewing, with cost, carbon, and the exact command to investigate each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  At a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you want to do&lt;/th&gt;
&lt;th&gt;AWS tool&lt;/th&gt;
&lt;th&gt;What GreenOps adds&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Get a high-level health check&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Trusted Advisor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resource-level findings with estimated savings, carbon impact, and the exact CLI command to review or fix it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understand where your money went&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Cost Explorer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The specific resources driving that spend, why they are wasteful, and what to change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Report annual carbon footprint&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Customer Carbon Footprint Tool&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Modeled carbon-reduction opportunities tied to individual resources and remediation actions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right-size EC2, ASG, Lambda, EBS&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Compute Optimizer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A broader waste lens across more services — idle, zombie, stale, untiered resources — plus carbon and remediation commands.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Get alerted when spend spikes&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Budgets / Anomaly Detection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A short, prioritized list of the actual resources that caused the variance.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the output looks like
&lt;/h2&gt;

&lt;p&gt;A read-only scan returns a ranked list of findings — each tied to a specific resource, with estimated monthly cost savings, carbon savings, and the context needed to review it.&lt;/p&gt;

&lt;p&gt;&lt;a href="/blog/cli-findings.png" class="article-body-image-wrapper"&gt;&lt;img src="/blog/cli-findings.png" alt="GreenOps Scan findings table showing over-provisioned ECS tasks and an Intel-based RDS instance with cost and CO2 savings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The summary rolls those findings up into monthly and annual cost and carbon totals, plus relatable equivalents to make the numbers tangible.&lt;/p&gt;

&lt;p&gt;&lt;a href="/blog/cli-summary.png" class="article-body-image-wrapper"&gt;&lt;img src="/blog/cli-summary.png" alt="GreenOps Scan summary showing $825/mo cost savings, 17 kg/mo CO2 reduction, and carbon equivalents"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Trusted Advisor: broad best-practice checks
&lt;/h2&gt;

&lt;p&gt;Trusted Advisor is a great first-line health check. It covers cost, security, performance, fault tolerance, and service limits, and it can flag patterns like low-utilization EC2 instances or exposed security groups.&lt;/p&gt;

&lt;p&gt;GreenOps narrows the focus to cost-and-carbon waste and adds a few things Trusted Advisor does not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Resource-level scoring.&lt;/strong&gt; Each finding is tied to a specific resource and estimated in dollars per month and kilograms of CO2 per month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Carbon context.&lt;/strong&gt; GreenOps uses regional grid-carbon intensity to estimate the carbon reduction of acting on each finding, not just the cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actionability.&lt;/strong&gt; Instead of a recommendation, GreenOps outputs the specific &lt;code&gt;aws&lt;/code&gt; CLI command or configuration change to review, and includes a safety warning when a command is destructive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;History and trends.&lt;/strong&gt; GreenOps Cloud stores findings over time so a team can see whether remediation actually moved the needle.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cost Explorer: where the money went
&lt;/h2&gt;

&lt;p&gt;Cost Explorer is the right place for historical spend analysis, chargeback, and reservation planning. It can slice your bill by account, service, tag, reservation, and time.&lt;/p&gt;

&lt;p&gt;The next question is usually: &lt;em&gt;which specific resources&lt;/em&gt; caused the change? GreenOps is built for that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost Explorer says:&lt;/strong&gt; "EC2 spend rose 18% last month."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GreenOps says:&lt;/strong&gt; "Three &lt;code&gt;t3.xlarge&lt;/code&gt; instances in &lt;code&gt;us-east-1&lt;/code&gt; averaged &amp;lt;5% CPU for 14 days; right-sizing them could save $X/month and avoid Y kg CO2/month, and here is the command to review it."&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customer Carbon Footprint Tool: account-level reporting
&lt;/h2&gt;

&lt;p&gt;AWS's Customer Carbon Footprint Tool is designed for ESG and CSRD-style reporting. It gives an annual, account-level view of emissions from your AWS usage.&lt;/p&gt;

&lt;p&gt;GreenOps takes a different cut. It is per-resource and forward-looking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It estimates the carbon reduction you could achieve if a specific finding is fixed.&lt;/li&gt;
&lt;li&gt;It links carbon directly to cost, so engineering, finance, and sustainability can triage with the same data.&lt;/li&gt;
&lt;li&gt;It is not an audited carbon inventory. It is a modeled estimate intended for prioritization, not compliance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Compute Optimizer: right-sizing for supported services
&lt;/h2&gt;

&lt;p&gt;Compute Optimizer recommends instance sizes and configurations for EC2, Auto Scaling groups, Lambda, and EBS. When your workload is a good fit, it is the right tool.&lt;/p&gt;

&lt;p&gt;GreenOps covers a wider waste surface and adds execution context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It flags idle resources, not just oversized ones: zombie Lambda, empty ECS clusters, unattached EBS volumes, stale snapshots, unused CloudFront distributions, and more.&lt;/li&gt;
&lt;li&gt;It estimates savings and carbon in the same view.&lt;/li&gt;
&lt;li&gt;It gives you a shell command to investigate rather than only a sizing recommendation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What GreenOps is best for
&lt;/h2&gt;

&lt;p&gt;GreenOps makes sense when you want a fast, low-risk second opinion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run a local, read-only scan with &lt;code&gt;npx greenops-scan&lt;/code&gt; against a dev or sandbox account.&lt;/li&gt;
&lt;li&gt;Get a ranked list of waste with estimated cost and carbon.&lt;/li&gt;
&lt;li&gt;Share a PDF or JSON report with the people who own the workloads.&lt;/li&gt;
&lt;li&gt;Track findings over time with GreenOps Cloud once you are ready for continuous monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What AWS tools still do better
&lt;/h2&gt;

&lt;p&gt;AWS tools are still the right place for several jobs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reservation and Savings Plan analysis&lt;/strong&gt; — use Cost Explorer and Cost &amp;amp; Usage Reports.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance-grade carbon accounting&lt;/strong&gt; — use the Customer Carbon Footprint Tool and a formal GHG inventory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service-limit and security checks&lt;/strong&gt; — use Trusted Advisor and Security Hub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise chargeback and cost allocation&lt;/strong&gt; — use Cost Explorer tags and AWS Billing Conductor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;GreenOps is a narrow, opinioned layer: find wasteful resources, estimate the cost and carbon impact, and hand the right person a concrete command to review. AWS tools are broad platforms for cost accounting and compliance.&lt;/p&gt;

&lt;p&gt;If you already use Cost Explorer, Compute Optimizer, and Trusted Advisor, you can add GreenOps on the side and get a faster path from "we spent too much" to "this is the specific resource to fix."&lt;/p&gt;

&lt;p&gt;Want to see what it surfaces for you? Run a read-only scan:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx greenops-scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For teams that need recurring scans, shared dashboards, and trend tracking, &lt;a href="https://greenops.cloud/scan?utm_source=blog&amp;amp;utm_medium=organic&amp;amp;utm_campaign=greenops_launch_2026q3&amp;amp;utm_content=aws_tools_comparison" rel="noopener noreferrer"&gt;GreenOps Cloud&lt;/a&gt; adds continuous monitoring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #AWS #FinOps #CloudCostOptimization #Sustainability #CarbonReduction #TrustedAdvisor #CostExplorer #ComputeOptimizer #GreenOps&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Your Fargate Tasks Are Probably Bigger Than They Need to Be</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Mon, 17 Aug 2026 16:33:08 +0000</pubDate>
      <link>https://dev.to/spidgorny/your-fargate-tasks-are-probably-bigger-than-they-need-to-be-4hgo</link>
      <guid>https://dev.to/spidgorny/your-fargate-tasks-are-probably-bigger-than-they-need-to-be-4hgo</guid>
      <description>&lt;h2&gt;
  
  
  How to detect over-provisioned ECS/Fargate services and right-size them to actual load
&lt;/h2&gt;

&lt;p&gt;AWS Fargate made it easy to stop thinking about servers. It also made it easy to stop thinking about task sizing.&lt;/p&gt;

&lt;p&gt;Most teams pick a CPU/memory combination once — often copied from a template, a tutorial, or "what worked last time" — and never revisit it. Traffic patterns change, code gets optimized, dependencies get swapped, but the task definition stays the same. Six months later, a service that peaks at 15% CPU is still provisioned as if it were about to get hammered.&lt;/p&gt;

&lt;p&gt;That gap between allocated and actual resource use is one of the most common (and most fixable) sources of waste on AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Fargate over-provisioning is so easy to miss
&lt;/h2&gt;

&lt;p&gt;A few things make this specific waste pattern sneaky:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Billing is per-task, not per-utilization.&lt;/strong&gt; You pay for the vCPU and memory you reserved, whether the task uses 5% or 95% of it. The bill doesn't nudge you to look.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing fails when a task is oversized.&lt;/strong&gt; Unlike a memory leak or an outage, over-provisioning has no symptom. The service just quietly runs fine — at 3x the cost it needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudWatch has the answer, but no one's watching it.&lt;/strong&gt; &lt;code&gt;CPUUtilization&lt;/code&gt; and &lt;code&gt;MemoryUtilization&lt;/code&gt; per ECS service are recorded by default. Almost nobody builds a habit of reviewing 30-day averages across every service in every cluster.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Empty clusters accumulate too.&lt;/strong&gt; Test clusters, deprecated environments, and abandoned proofs-of-concept often keep existing with zero running tasks, adding clutter and occasional accidental cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A practical way to detect it
&lt;/h2&gt;

&lt;p&gt;You don't need a full FinOps platform to find this. The core signal is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List every ECS cluster and service&lt;/strong&gt; in the account and region you care about.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pull 30-day average CPU and memory utilization&lt;/strong&gt; per service from CloudWatch (&lt;code&gt;GetMetricStatistics&lt;/code&gt;, &lt;code&gt;Period: 86400&lt;/code&gt; for daily granularity, &lt;code&gt;Statistics: Average&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flag services where both CPU and memory averages sit below ~30%.&lt;/strong&gt; A single low spike day isn't a signal — a sustained 30-day average is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Estimate the achievable savings conservatively.&lt;/strong&gt; Don't assume you can cut a service down to exactly its average usage — leave headroom for spikes. A reasonable rule of thumb: take the larger of the CPU or memory waste ratio, apply a 50% haircut for safety margin, and multiply that against the service's current Fargate cost (vCPU price + memory price × 730 hours/month).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-check &lt;code&gt;desiredCount&lt;/code&gt; vs &lt;code&gt;runningCount&lt;/code&gt;.&lt;/strong&gt; If a service consistently wants more tasks than it can get running, that's a different problem (constrained capacity or a stuck deployment) worth investigating separately from right-sizing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look for clusters with zero running tasks and zero active services.&lt;/strong&gt; These are candidates for deletion, not right-sizing — but always back up the cluster config first (&lt;code&gt;aws ecs describe-clusters&lt;/code&gt; output saved to a file) before deleting anything.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What to do once you've found one
&lt;/h2&gt;

&lt;p&gt;Right-sizing a Fargate task is low-risk compared to most cost optimizations, because you can revert instantly if you get it wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick the next tier down in vCPU/memory that still comfortably covers your 30-day peak, not just the average.&lt;/li&gt;
&lt;li&gt;Deploy the change to a canary or a percentage of tasks first if your deployment tooling supports it.&lt;/li&gt;
&lt;li&gt;Re-check &lt;code&gt;CPUUtilization&lt;/code&gt;/&lt;code&gt;MemoryUtilization&lt;/code&gt; a week later. If the new allocation still sits comfortably below 70-80% at peak, you're done. If you see throttling or OOM-kills, step back up one tier.&lt;/li&gt;
&lt;li&gt;Repeat quarterly — traffic and code both drift over time, so a service sized correctly today may not be next year.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern above (CPU/memory averages below 30% over 30 days, checked per service rather than per cluster) is deliberately conservative. It's meant to surface real candidates for review, not to declare every quiet service "wrong." Some services are supposed to run cool — that's headroom for traffic spikes, not waste. Use judgment before resizing anything customer-facing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking this by hand doesn't scale
&lt;/h2&gt;

&lt;p&gt;Doing this manually for one or two clusters is a reasonable afternoon project. Doing it for every cluster, every service, across every region and account your company runs — while also checking EC2, RDS, Lambda, S3, EBS snapshots, and the rest of the surface area where waste hides — is a different problem entirely.&lt;/p&gt;

&lt;p&gt;That's exactly the check GreenOps Scan automates. It's a free, read-only CLI that runs the same kind of 30-day CloudWatch analysis described above across ECS/Fargate, along with idle EC2 instances, unused EBS snapshots, S3 buckets without lifecycle policies, underused RDS instances, stale Lambda functions, and more — in one pass, with cost and CO2 estimates attached to each finding.&lt;/p&gt;

&lt;p&gt;Run it against a read-only IAM role:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx greenops-scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It won't touch anything in your account. Every finding comes with the specific resource, the issue, an estimated monthly cost and carbon impact, and a remediation command or recommendation you can review before acting on it. If your Fargate services are quietly over-provisioned, it'll be near the top of the list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://greenops.cloud/scan?utm_source=blog&amp;amp;utm_medium=organic&amp;amp;utm_campaign=greenops_launch_2026q3&amp;amp;utm_content=ecs_overprovisioning" rel="noopener noreferrer"&gt;Learn more about GreenOps Scan →&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>containers</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>My first article. Short. Request feedback.</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Thu, 06 Aug 2026 12:22:56 +0000</pubDate>
      <link>https://dev.to/spidgorny/my-first-article-short-request-feedback-dof</link>
      <guid>https://dev.to/spidgorny/my-first-article-short-request-feedback-dof</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/spidgorny/the-cloud-waste-no-one-is-looking-at-160j" class="crayons-story__hidden-navigation-link"&gt;The Cloud Waste No One Is Looking At&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/spidgorny" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F111799%2F0738554c-8f6d-4819-9be2-e87d4612b89f.jpeg" alt="spidgorny profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/spidgorny" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Slawa Pidgorny
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Slawa Pidgorny
                
                
              
              &lt;div id="story-author-preview-content-4332301" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/spidgorny" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F111799%2F0738554c-8f6d-4819-9be2-e87d4612b89f.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Slawa Pidgorny&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/spidgorny/the-cloud-waste-no-one-is-looking-at-160j" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 6&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/spidgorny/the-cloud-waste-no-one-is-looking-at-160j" id="article-link-4332301"&gt;
          The Cloud Waste No One Is Looking At
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/aws"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;aws&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloudwaste"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloudwaste&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/finops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;finops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sustainability"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sustainability&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/spidgorny/the-cloud-waste-no-one-is-looking-at-160j" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/spidgorny/the-cloud-waste-no-one-is-looking-at-160j#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              3&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>beginners</category>
      <category>discuss</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The Cloud Waste No One Is Looking At</title>
      <dc:creator>Slawa Pidgorny</dc:creator>
      <pubDate>Thu, 06 Aug 2026 12:21:15 +0000</pubDate>
      <link>https://dev.to/spidgorny/the-cloud-waste-no-one-is-looking-at-160j</link>
      <guid>https://dev.to/spidgorny/the-cloud-waste-no-one-is-looking-at-160j</guid>
      <description>&lt;h1&gt;
  
  
  The Cloud Waste No One Is Looking At
&lt;/h1&gt;

&lt;h2&gt;
  
  
  How one command finds the money hiding in your AWS bill
&lt;/h2&gt;

&lt;p&gt;Cloud waste is the electricity bill no one reads.&lt;/p&gt;

&lt;p&gt;The total gets attention, but the individual line items often do not. An EC2 instance was sized for a launch that ended months ago. A Fargate service still has capacity for a traffic peak that never returned. A database is technically running but barely queried. Snapshots and object versions accumulate because nobody owns the cleanup decision.&lt;/p&gt;

&lt;p&gt;None of these choices looks unreasonable when it is made. Together, they can become a quiet, recurring cost.&lt;/p&gt;

&lt;p&gt;Industry surveys consistently estimate that &lt;strong&gt;27–32% of cloud spend is wasted&lt;/strong&gt;. That does not mean every company can remove a third of its bill tomorrow. It means many teams could benefit from a systematic way to find resources worth reviewing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Waste hides behind ordinary line items
&lt;/h2&gt;

&lt;p&gt;AWS gives teams extraordinary flexibility. It also distributes spending across thousands of resources, usage types, and decisions. Billing dashboards can show where money went without always explaining which specific resource no longer delivers enough value.&lt;/p&gt;

&lt;p&gt;The difficult questions live below the account total:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which compute instances are idle?&lt;/li&gt;
&lt;li&gt;Which Fargate services are consistently over-provisioned?&lt;/li&gt;
&lt;li&gt;Which Lambda functions are no longer invoked?&lt;/li&gt;
&lt;li&gt;Which databases are quiet enough to review?&lt;/li&gt;
&lt;li&gt;Which S3 buckets lack lifecycle policies?&lt;/li&gt;
&lt;li&gt;Which snapshots and machine images have outlived their purpose?&lt;/li&gt;
&lt;li&gt;Which workloads might be candidates for more efficient architectures?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answering those questions manually takes time, service knowledge, and context. That is why the review is so easy to postpone.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful second opinion in one command
&lt;/h2&gt;

&lt;p&gt;GreenOps Scan is a free CLI that inspects AWS resource metadata and usage signals for potential cost and carbon opportunities.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx greenops-scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose an AWS profile and region, then let the scanner check services including EC2, S3, ECS, EKS, Lambda, RDS, ElastiCache, CloudFront, and EBS snapshots.&lt;/p&gt;

&lt;p&gt;The result is a terminal summary plus JSON and a branded PDF report. Each finding identifies the affected resource, explains the issue, estimates the potential cost and carbon impact, and provides remediation guidance for review.&lt;/p&gt;

&lt;p&gt;The estimates are a starting point, not a promise. Workload requirements, contractual pricing, architecture, and business context determine whether a finding can become a realized saving.&lt;/p&gt;

&lt;h2&gt;
  
  
  What one real scan surfaced
&lt;/h2&gt;

&lt;p&gt;On one real AWS account, GreenOps surfaced:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;130 issues&lt;/strong&gt; across nine services&lt;/li&gt;
&lt;li&gt;approximately &lt;strong&gt;$2,209 per month&lt;/strong&gt; in estimated savings opportunities&lt;/li&gt;
&lt;li&gt;approximately &lt;strong&gt;$26,510 per year&lt;/strong&gt; in estimated savings opportunities&lt;/li&gt;
&lt;li&gt;approximately &lt;strong&gt;1,210 kg CO2 per year&lt;/strong&gt; in modeled carbon-reduction opportunities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The largest groups included over-provisioned ECS Fargate services, S3 buckets without effective lifecycle policies, idle or older RDS resources, and Lambda functions with low usage or efficiency opportunities.&lt;/p&gt;

&lt;p&gt;Those figures describe one account at one point in time. They do not guarantee that another account will produce the same result, or that every surfaced estimate should be acted on. The value of the scan is that it turns an abstract concern into a concrete review list.&lt;/p&gt;

&lt;p&gt;Even when only a small number of findings survive technical and business review, they might be enough to justify the few minutes required to run the command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safe by design: read-only and local
&lt;/h2&gt;

&lt;p&gt;The first question for any infrastructure tool should be: what can it access, and where does the data go?&lt;/p&gt;

&lt;p&gt;GreenOps Scan is designed for a low-risk first look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it uses &lt;strong&gt;read-only AWS APIs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;it runs &lt;strong&gt;locally on your machine&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;your AWS credentials &lt;strong&gt;never leave your machine&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;it does not install an agent in the account&lt;/li&gt;
&lt;li&gt;it cannot modify, stop, resize, or delete resources&lt;/li&gt;
&lt;li&gt;the report stays local unless you choose to share it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The scanner reports; it does not remediate automatically. Every recommendation should be reviewed by someone who understands the workload, its owners, and its recovery requirements before a change is made.&lt;/p&gt;

&lt;p&gt;That separation matters. A team can begin with a dev or sandbox account, inspect exactly what the scanner finds, and decide whether the evidence is useful without granting write access or onboarding a SaaS platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost efficiency and carbon efficiency are connected
&lt;/h2&gt;

&lt;p&gt;Unused and over-provisioned infrastructure is not only a financial inefficiency. Compute, storage, and data movement require hardware and energy even when they deliver little useful work.&lt;/p&gt;

&lt;p&gt;GreenOps models carbon opportunities using principles from the &lt;strong&gt;Green Software Foundation&lt;/strong&gt; methodology. The estimates help translate technical findings into a second dimension: the potential emissions associated with avoidable resource use.&lt;/p&gt;

&lt;p&gt;These figures are modeled estimates, not audited emissions measurements. They do not make an organization CSRD compliant and should not be presented as guaranteed carbon reductions.&lt;/p&gt;

&lt;p&gt;They could still be useful. CSRD and other sustainability programs increase the need for engineering, finance, and sustainability teams to understand where digital infrastructure consumes resources and how improvement opportunities are identified. A documented, repeatable scan can contribute evidence to that internal conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  From a one-time scan to continuous monitoring
&lt;/h2&gt;

&lt;p&gt;A one-time scan answers an immediate question: &lt;strong&gt;what might be worth reviewing today?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cloud environments do not stand still. Teams deploy new services, traffic changes, temporary resources become permanent, and yesterday's reasonable allocation can become tomorrow's waste. The same account can look different a month later.&lt;/p&gt;

&lt;p&gt;That is where GreenOps Cloud fits. It extends the free CLI approach with continuous monitoring, scan history, shared visibility, and recurring detection for teams that need more than a point-in-time report.&lt;/p&gt;

&lt;p&gt;Start with the lowest-friction step:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx greenops-scan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the findings with the people who own the workloads. If the scan surfaces useful opportunities and the team wants ongoing visibility, explore &lt;a href="https://greenops.cloud" rel="noopener noreferrer"&gt;GreenOps Cloud&lt;/a&gt; for continuous monitoring.&lt;/p&gt;

&lt;p&gt;You might find a meaningful saving. You might find only a few cleanup tasks. Either way, you will have replaced a vague suspicion with evidence.&lt;/p&gt;

&lt;p&gt;P.S. Upvote on Product Hunt: &lt;a href="https://www.producthunt.com/products/greenops-scan" rel="noopener noreferrer"&gt;https://www.producthunt.com/products/greenops-scan&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudwaste</category>
      <category>finops</category>
      <category>sustainability</category>
    </item>
  </channel>
</rss>
