The summary.
CHOOSE THE MOST MANAGED OPTION THAT MEETS THE REQUIREMENT
Containers on a managed runtime, scaling to zero, are frequently the right default. Orchestration for a single application is not.
ALWAYS SET MAXIMUM INSTANCES
Without it, a traffic spike or a loop scales without bound and bills accordingly.
ANALYTICAL QUERIES ARE BILLED BY DATA PROCESSED
A careless query scanning a whole large table is expensive every time it runs. Select only needed columns, partition by date, and set maximum bytes billed.
STORAGE PUBLICLY READABLE AND SERVICE ACCOUNT KEYS IN REPOSITORIES ARE THE TWO COMMONEST EXPOSURES
An organisation policy prohibiting key creation prevents the second at source.
NEVER DEPLOY FROM A MOVING TAG
You cannot establish what is running, or roll back reliably.
PLAN NON-OVERLAPPING ADDRESS RANGES BEFORE BUILDING
Renumbering afterwards is painful.
LABEL EVERYTHING AND SET BUDGETS ON DAY ONE
Resources left running are the largest avoidable waste, consistently.