Skip to content
Guilherme Nogueira
Go back

The Cloud Did Not Remove the Network. It Moved It Behind an API.

9 min read

I learned networking with my hands. Cables, switch ports, a routing table I typed into a box I could physically point at. When I moved into the cloud, the disorienting part was not that the network disappeared. It was that everything was still there, just invisible, expressed as configuration instead of copper. The network did not go away. It moved behind an API. Getting comfortable in the cloud, for me, was mostly about learning which physical thing each abstraction was standing in for.

A server rack full of orange patch cables where the cables leave the rack and turn into UI windows: an API console, a route table, a config file. The physical wiring becomes an API call.

Table of contents

Open Table of contents

The short version

A VPC is a network you describe, not one you wire

Strip away the marketing and a Virtual Private Cloud is a simple promise. You get an address space, and inside it the provider will behave as if you have your own private network, isolated from everyone else, running on hardware you share with thousands of strangers you will never know about.

That last part is the whole trick. There is one enormous shared physical network, and a control plane that makes it look like you have a dedicated one. When you create a subnet, no cable gets crimped. A row gets written somewhere, and the fabric starts enforcing a rule it did not enforce a second ago. When you add a route, no router reboots. The same fabric just starts making a different decision about your packets.

Once that clicks, the cloud network stops feeling like magic and starts feeling like the same job you always did, with the wiring replaced by declarations.

The map from physical to cloud

The fastest way I found to get fluent was to stop learning “cloud networking” as a new subject and start reading each primitive as a translation of something I already knew.

The physical world on the left, a server rack, switches and workstations, passes through an abstraction layer in the middle and becomes a cloud VPC on the right, with subnets, a router, and compute instances inside a virtual boundary.

These are mental models, not exact equivalences. A subnet is not literally a broadcast domain in a public cloud, where the network is virtualized and does not behave like a traditional LAN. But reading it as one is the closest mental model, and it gets you thinking about the right things: address scope, placement, and routing.

I used to haveIn the cloud it isWhat it does
A VLAN / broadcast domainA subnetA slice of the address space, usually pinned to one availability zone
A router’s routing tableA route tablePer-subnet rules for where a destination prefix goes
The uplink to the internetAn internet gatewayThe door that makes a subnet public
Outbound-only internetA NAT gatewayPrivate things reach out, nothing reaches back
A fixed public IPAn elastic IPA stable address you own and can move
A network cardAn elastic network interfaceThe thing an IP and a security group actually attach to
A firewall rulesetA security group or NACLWho may talk to whom
A leased line to another sitePeering, a transit gateway, a VPNJoining two networks that were separate

None of these are new ideas. A public subnet is just a broadcast domain whose route table happens to have a default route pointing at an internet gateway. Make that same subnet’s default route point at a NAT gateway instead, and you have built the classic “private servers that can pull updates but cannot be reached from outside,” except you did it with two lines of config instead of a firewall change ticket.

# a public subnet's route table
10.0.0.0/16   local          # the local route: every table has it, you cannot remove it, keeps VPC traffic internal
0.0.0.0/0     igw-xxxx        # everything else goes out the internet gateway

# a private subnet's route table, same VPC
10.0.0.0/16   local          # same local route, present automatically
0.0.0.0/0     nat-xxxx        # outbound only, through NAT

The routing decision I used to make on a box is now the route table itself. That is the abstraction in one image: the config is the router.

The one that trips everyone: security groups versus NACLs

If there is a single concept worth getting right on day one, it is this pair, because they look like the same thing and behave differently in a way that will cost you an afternoon.

A security group is stateful and attaches to an interface, so effectively to an instance. Stateful means it remembers connections. If you allow an outbound request, the response is allowed back automatically. You never write a rule for the return traffic. You also only write allow rules. Anything you did not permit is denied.

A network ACL is stateless and attaches to a subnet. Stateless means it has no memory. If you allow traffic out, you must also explicitly allow the response back in, because to the NACL the return packet is just another packet it has never seen. NACLs also have explicit deny rules, evaluated in order.

Security groupNetwork ACL
StateStatefulStateless
Attaches toAn interface, so an instanceA subnet
RulesAllow onlyAllow and deny, evaluated in order
Return trafficAutomaticYou must allow it yourself
Reach for it whenFine-grained, per-application rulesA coarse, subnet-wide deny

Ninety percent of the time you want security groups, and you reach for a NACL only when you need a coarse, subnet-wide deny that does not care about state, like blocking a bad CIDR at the edge of a subnet. The reason people lose hours here is that they add a security group rule, forget that the response is automatic, and then start “fixing” a NACL that was never the problem. Know which layer you are actually editing.

The failure modes are different, and that is the real lesson

Here is what nobody tells you when you move from physical to cloud networking. The concepts translate cleanly, but the way things break does not.

When a cable was the problem, I could find the cable. In the cloud there is no cable to find. When something cannot talk to something else, the debugging is archaeological in a different way: you read the route table, you read both security groups, you check the NACL, you confirm the subnet is where you think it is, you verify the two CIDRs do not overlap. The network is perfectly observable, but only if you know which four places to look, and it will never show you a blinking light.

Someone shines an inspection light across floating panels, security group rules, network ACL rules, a route table, an application instance, hunting for the one failure point. In the cloud you debug reachability by reading config, not by tracing a cable.

Two habits matter more in the cloud than they ever did on hardware:

Final takeaway

The cloud did not abstract the network away. It abstracted the wiring away and left every decision you used to make sitting right there in config, where a route table is a router, a security group is a firewall, and a subnet is a VLAN you spun up with an API call. That is genuinely liberating. You can build in minutes what used to take a purchase order and a trip to the rack.

But the API cuts both ways. It makes good design faster, and it makes bad design faster too. In a physical network the mess eventually shows itself: cables nobody labeled, a rack that stopped matching the diagram, a switch you are afraid to touch. In the cloud the mess can stay invisible for months, hidden inside a permissive security group, a shared route table, a CIDR nobody planned to ever connect to anything, right up until the day you try to connect it.

The tools changed. The judgment did not. If you knew how to design a network with your hands, you already know how to design one in the cloud. You just have to remember that nothing is going to blink at you when you get it wrong.


Share this post:

Previous Post
Reliability Is a Business Decision, Not an Engineering One
Next Post
The Build Did Not Fail. It Hung, Which Is Worse.