AWS · Azure · Google Cloud

Different names.
Recognizable jobs.

Learn the problem each service solves before picking a logo. Use this map to connect the labs you have completed to the next layer of infrastructure.

These are sample names, not our infrastructure. Before copying commands, read Customize the examples: paths, keys, IPs and names. Substitute your own authorized account and resources. Existing lab? Retain its original resource names, usernames and state; renamed samples can cause replacement. See the existing-lab warning before applying updated recipes.

A small, useful service map

These are comparable categories, not interchangeable products. Region availability, permission models, pricing, limits and supported features differ. This is an orientation guide, not a promise that one provider's recipe ports unchanged to another.

JobAWSAzureGoogle Cloud
Run a virtual computerEC2Virtual MachinesCompute Engine
Store objects/files through APIsS3Blob StorageCloud Storage
Attach a block diskEBSManaged DisksPersistent Disk / Hyperdisk
Run containers without managing a VM fleetECS with FargateContainer AppsCloud Run
Manage Kubernetes workloadsEKSAKSGKE
Manage relational databasesRDSAzure Database for PostgreSQLCloud SQL
Host DNS recordsRoute 53Azure DNSCloud DNS
Keep application secretsSecrets ManagerKey VaultSecret Manager
Collect metrics/logs and notifyCloudWatchAzure MonitorCloud Monitoring / Cloud Logging

Official three-cloud service comparisonAWS decision guidesAzure technology choices

A product being “managed” does not mean free, maintenance-free, secure by default for your use case, or interchangeable with another product. Check the exact service's responsibilities and billable units before deployment.

1. How much of the computer do you want to manage?

You can own the kitchen, bring a lunchbox to a shared kitchen, or order one small meal when you need it. All make food; they give you different control and different chores.

PatternYou still decideGood first question
VMOS updates, processes, capacity, access and recoveryDo I need OS-level control or a long-running existing program?
Container on a VMVM upkeep plus image lifecycle, runtime configuration and dataCan I package the app repeatably before adding orchestration?
Managed container platformImages, IAM, ingress, scaling settings, dependencies and dataCan this platform support my runtime, networking and persistence requirements?
FunctionCode, triggers, permissions, timeouts and downstream failuresIs this a bounded event-driven task rather than a whole server?
KubernetesWorkload design, policy, configuration and operational expertiseDo my requirements justify the added complexity?

Containers do not require Kubernetes. A platform that can scale to zero may still leave paid storage, networking, minimum instances, logging or external dependencies. Compare the whole design, not only the compute headline.

Try it now

Complete one container on your existing VM. Then write two responsibilities a managed platform could take over and two it would leave with you. Do not create a cluster just to answer that question.

2. Object, block, file, and database are different tools

TypePlain EnglishWrong assumption to avoid
ObjectA named parcel accessed by an APIIt is a running server or a normal writable OS disk
BlockA disk the OS divides into filesystemsDeleting/stopping a VM necessarily deletes every disk
File shareA shared filesystem using a supported protocolAll shared filesystems have the same access and performance semantics
DatabaseA system that organizes queries and updatesCopying a live data directory is always a usable database backup

Managed relational databases still need scoped access, patch/version planning, backup retention, tested restoration and a way to manage application connections. Do not use a publicly reachable database or open every IP to solve connectivity.

No-cost design exercise

For each item, name its storage type and recovery method: a public image, an Ubuntu boot disk, a shared team folder, and an order table. For the order table, explain how you would restore to a separate test database without overwriting the live one. This is planning; no database is provisioned here.

3. DNS, TLS, routing, and load balancing are separate jobs

DNSWhich address?
TLSWhich identity? Encrypted link?
Network pathRoute + allowed traffic
ApplicationWhich response?

DNS does not open a firewall. A certificate does not start your app. A load balancer does not guarantee that the backend is healthy. A private IP does not by itself prevent data leaving through another path.

The existing SSH-tunnel lab deliberately skips public DNS, certificates and load balancers. It is a temporary learner-access path, not public HTTPS hosting. Do not point your real GuidewellCloud domain at a disposable VM to practice.

Plan before adding infrastructure

  • DNS: who owns the domain/zone, what record changes, and how will you undo it?
  • TLS: where does encryption terminate, who renews the certificate, and is the backend leg protected?
  • Load balancer: why is it needed, what healthcheck decides readiness, and what fixed/usage charges apply?
  • Private egress: how do updates reach the VM without a public IP? Price NAT, endpoints and routing before removing the current access path.

These are design checkpoints. The Route 53 lab implements only a spare child zone and a test TXT record—not website migration, private networking or TLS.

4. Give the app an identity, not your password

A process calling a cloud API needs its own scoped authorization. Use the provider's supported workload identity pattern instead of putting a permanent human key into an image, Terraform variable or public repository.

Our demo container serves static content and needs no cloud API permissions. Do not attach an administrator role “for later.” A secrets service stores sensitive values with access controls; it does not fix an overly broad application identity.

Try it now

Use the identity review. Record separately: who deploys, who can SSH, what the running app can access, and who can read its secrets/logs. If the app needs no API, write “none” rather than inventing a permission.

5. Design the failure story as well as the happy path

Every new service introduces a failure mode and often another billable resource. Before deployment, answer:

  1. What signal proves the app works from the user's intended path?
  2. Which logs are needed, who may see them, and how long are they kept?
  3. What can be lost, and what is the acceptable recovery time?
  4. Which backup has actually been restored in a test?
  5. Who responds, and which exact runbook tells them what to do?
  6. What remains billable after stopping the main workload?

Use the operations lesson to gather evidence, then the Tenable/Ansible workflow to investigate one authorized-lab finding. Do not confuse “Terraform can rebuild the VM” with “the application data is recoverable.”

Your next three exercises

  1. Run and inspect one container on a single existing lab VM. Keep it loopback-only, pin the image, and verify cleanup.
  2. Write a one-page architecture record. Name the identities, data, access path, cost drivers and recovery evidence.
  3. Choose only one next managed service from the map. Read its official deployment, pricing and cleanup documentation; compare it to your current design before provisioning anything.
Ready for another service: you can explain its job, why the existing tools are insufficient, what access it needs, how failure is detected, and how it is removed.