<?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: S A R</title>
    <description>The latest articles on DEV Community by S A R (@achutharaman).</description>
    <link>https://dev.to/achutharaman</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%2F4093688%2Fa863a607-02e7-456e-8042-104c3d2657b3.jpg</url>
      <title>DEV Community: S A R</title>
      <link>https://dev.to/achutharaman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/achutharaman"/>
    <language>en</language>
    <item>
      <title>What a 12-Year AWS Engineer Expects to Get Wrong About Google Cloud</title>
      <dc:creator>S A R</dc:creator>
      <pubDate>Tue, 25 Aug 2026 08:03:20 +0000</pubDate>
      <link>https://dev.to/achutharaman/what-a-12-year-aws-engineer-expects-to-get-wrong-about-google-cloud-53gi</link>
      <guid>https://dev.to/achutharaman/what-a-12-year-aws-engineer-expects-to-get-wrong-about-google-cloud-53gi</guid>
      <description>&lt;p&gt;I have spent twelve years on AWS. IAM, Organizations, VPC, ECS, Lambda, RDS, KMS — the mental model is deep enough that I stopped noticing it was a model at all. It was just how cloud works.&lt;/p&gt;

&lt;p&gt;This week I enrolled in the Google Cloud Gen AI Academy APAC Edition, and the track I picked ends with deploying a Gemini-backed Streamlit application to Cloud Run. I have not done it yet. I am writing this first, deliberately.&lt;/p&gt;

&lt;p&gt;Here is why: once you have solved something, you reconstruct the experience as though it were obvious. The genuinely interesting information — which assumptions you carried in, which ones were load-bearing, which ones quietly failed — is only available &lt;em&gt;before&lt;/em&gt;. So this post is a set of predictions I am putting on record, from reading the documentation, before I touch the console. The follow-up will mark them right or wrong.&lt;/p&gt;

&lt;p&gt;Everything technical below comes from Google's documentation, not from my own hands. That distinction matters and I have tried to keep it visible throughout.&lt;/p&gt;

&lt;h2&gt;
  
  
  The map I built from the docs
&lt;/h2&gt;

&lt;p&gt;Most of the vocabulary translates. This is the table I assembled in the first twenty minutes of reading:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Google Cloud&lt;/th&gt;
&lt;th&gt;Closest AWS equivalent&lt;/th&gt;
&lt;th&gt;Where I expect the analogy to break&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project&lt;/td&gt;
&lt;td&gt;Account&lt;/td&gt;
&lt;td&gt;Projects appear to be cheap and disposable. AWS accounts are neither.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Run&lt;/td&gt;
&lt;td&gt;App Runner, or Fargate + ALB&lt;/td&gt;
&lt;td&gt;Cloud Run scales to zero. Fargate does not.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Artifact Registry&lt;/td&gt;
&lt;td&gt;ECR&lt;/td&gt;
&lt;td&gt;I expect this to be near-identical.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Build&lt;/td&gt;
&lt;td&gt;CodeBuild&lt;/td&gt;
&lt;td&gt;Cloud Build gets invoked implicitly on source deploys.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vertex AI&lt;/td&gt;
&lt;td&gt;Bedrock + SageMaker&lt;/td&gt;
&lt;td&gt;One surface where AWS gives me two.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service account&lt;/td&gt;
&lt;td&gt;IAM role&lt;/td&gt;
&lt;td&gt;Attached identities, not assumed ones.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret Manager&lt;/td&gt;
&lt;td&gt;Secrets Manager&lt;/td&gt;
&lt;td&gt;Same, minus the "s".&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That gets me eighty percent of the way. The remaining twenty percent is where I expect to be wrong, and three specific things in the documentation have already knocked against my instincts hard enough to be worth naming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three documented behaviours that break my AWS reflexes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Concurrency is 80, not 1
&lt;/h3&gt;

&lt;p&gt;A Lambda invocation handles exactly one request. That constraint is so fundamental to the AWS serverless model that I had internalised it as &lt;em&gt;the&lt;/em&gt; serverless model — a category truth rather than a vendor decision.&lt;/p&gt;

&lt;p&gt;Cloud Run defaults to 80 concurrent requests per instance, configurable up to 1000. One container, eighty simultaneous requests, sharing a process.&lt;/p&gt;

&lt;p&gt;Two consequences fall out of that, and only one of them is obvious.&lt;/p&gt;

&lt;p&gt;The commercial one: cost is roughly instance count multiplied by duration, and concurrency is the divisor. Raising it serves the same load on fewer instances. Which means dropping concurrency to 1 — precisely what an AWS engineer's instinct suggests, because that is what "safe" looks like to me — is close to the worst available choice. More instances, more cold starts, more load on everything downstream.&lt;/p&gt;

&lt;p&gt;The technical one is sharper. My code now has to actually be concurrency-safe. On Lambda, module-level mutable state is &lt;em&gt;accidentally&lt;/em&gt; safe, because only one request is ever in flight. On Cloud Run that assumption is simply false. A module-scoped dictionary I would not have thought twice about becomes a race condition.&lt;/p&gt;

&lt;p&gt;I have written a lot of Python that runs on Lambda. I do not know how much of it would survive being moved here unchanged, and I suspect the honest answer is "less than I would like".&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Scale to zero is the default, not a feature you enable
&lt;/h3&gt;

&lt;p&gt;Minimum instances defaults to 0. No traffic, no instances, no cost — without configuring anything. Maximum instances defaults to 100.&lt;/p&gt;

&lt;p&gt;The AWS equivalent requires choosing Lambda specifically and accepting its constraints, or accepting that Fargate keeps a task running and billing whether anyone shows up or not.&lt;/p&gt;

&lt;p&gt;My prediction is that this default is excellent for a proof of concept and quietly wrong for anything user-facing, because the first request after an idle period pays the cold start. The documented lever is &lt;code&gt;--min-instances=1&lt;/code&gt;. I expect I will reach for it faster than I expect to.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. There is no VPC in the deployment path
&lt;/h3&gt;

&lt;p&gt;This is the one I keep re-reading because it does not feel right.&lt;/p&gt;

&lt;p&gt;The documented deployment is a single command that builds from source, pushes to Artifact Registry, and returns an HTTPS URL with a managed certificate attached:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcloud run deploy my-service &lt;span class="nt"&gt;--source&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Dockerfile strictly required — Cloud Run can build from source using buildpacks.&lt;/p&gt;

&lt;p&gt;Count the AWS path for the same outcome. Build the image. Authenticate to ECR. Push. Write a task definition. Create the service. Provision an ALB. Request a certificate in ACM. Wire up a target group, a listener, a security group, subnets across two availability zones. Point Route 53 at it.&lt;/p&gt;

&lt;p&gt;I am not claiming the AWS path is wrong. That ALB does real work and exposes control Cloud Run does not. But I have spent years treating the VPC as the load-bearing wall of any design, and the idea of something publicly reachable without opening the networking console at all is genuinely disorienting. Cloud Run appears to give you a public endpoint by default and have you opt &lt;em&gt;into&lt;/em&gt; restriction — ingress controls, Direct VPC egress, a load balancer with Cloud Armor in front — rather than opting out of isolation.&lt;/p&gt;

&lt;p&gt;That is a real philosophical difference about where the default sits, and I do not yet know whether I will end up thinking it is right.&lt;/p&gt;

&lt;h2&gt;
  
  
  The predictions, stated so they can be wrong
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The first deploy will work faster than I expect, and I will distrust it.&lt;/strong&gt; I predict I spend more time verifying that it really is deployed and really is public than I spend deploying it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM will be where I struggle.&lt;/strong&gt; GCP's predefined roles look coarser to me than a hand-written IAM policy with conditions and resource ARNs. I predict this turns out to be my inexperience rather than a real limitation, and that custom roles cover it — but I am recording the discomfort now so I can check it later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I will over-provision out of habit.&lt;/strong&gt; Specifically, I predict I reach for &lt;code&gt;--concurrency=1&lt;/code&gt; at some point because it feels safe, and have to talk myself out of it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why bother
&lt;/h2&gt;

&lt;p&gt;I am not planning to move anyone off AWS. That is rarely the right answer and my existing depth is an asset, not a sunk cost.&lt;/p&gt;

&lt;p&gt;The narrower question is the interesting one. For a workload that is &lt;em&gt;specifically&lt;/em&gt; a Gen AI application — request-driven, bursty, stateless, where the expensive thing is the model call rather than the compute wrapped around it — is Cloud Run plus Vertex AI a better fit than Fargate plus Bedrock? I do not know. I would like to have an informed opinion instead of a default one.&lt;/p&gt;

&lt;p&gt;And there is a more general point I would make to any engineer who has gone deep on a single platform: the depth is worth having, but it quietly converts vendor-specific decisions into invisible assumptions. Half a day somewhere else is the cheapest available way to find out which of your beliefs are about computing and which are about a company.&lt;/p&gt;

&lt;p&gt;Part two will report which of the three predictions survived.&lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>aws</category>
      <category>genai</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
