Every resource you create in Google Cloud lives inside a project, and every project occupies a place in a hierarchy. That structure is not administrative bureaucracy: it determines who can do what, who pays for what, which quotas apply, which policies are inherited and which resources can see each other. Designing it well at the outset costs an afternoon; redesigning it two years later costs a quarter.
In this lesson we build AlpinaShop's structure in Google Cloud. We will look at the full Organization → Folders → Projects → Resources hierarchy, what exactly a project is and why the projectId is immutable and global, in what sense the project is a boundary for billing, quotas, permissions and networking, how billing accounts work and who can link them, how spend is apportioned with labels, how billing is exported to BigQuery and how to read the reports and configure budgets. We will finish with structural best practices and a complete worked example with gcloud.
Contents
- The Google Cloud resource hierarchy
- AlpinaShop's hierarchy
- What exactly a project is: ID, number and name
- The project as a boundary
- Billing accounts
- Labels for apportioning spend
- Reports, export to BigQuery and budgets
- Policy inheritance in the hierarchy
- Best practices for project structure
- A complete worked example with
gcloud
- The Google Cloud resource hierarchy
Google Cloud organises everything in a four-level tree:
| Level | What it is | How many there can be | Can it be moved |
|---|---|---|---|
| Organization | The root, tied to a Cloud Identity or Workspace domain | One per domain | No |
| Folder | A logical grouping of projects and other folders | Several, nestable (up to ~10 levels) | Yes |
| Project | A container of resources and a billing boundary | Many | Yes, between folders |
| Resource | VM, bucket, database, topic and so on | Many | Depends on the type, usually not |
Each level can carry IAM policies and organization policies, and those policies are inherited downwards. That is the real reason the hierarchy exists: apply a rule once and have it cover everything underneath.
A few clarifications that prevent confusion:
- No organization means no folders. If you signed up with a personal account (lesson 01-02), your projects are loose and you cannot create folders. That is one of the main reasons for using Cloud Identity in a company.
- The organization creates itself. You do not create it: it appears automatically the first time a user of the verified domain creates a project.
- Resources do not hang from folders, only projects do. A VM is always inside a project, never directly in a folder.
- AlpinaShop's hierarchy
Marta designs this structure for AlpinaShop, deliberately simple: for a 40-person company, a hierarchy of three folders and four projects is more than enough. Complex structures are for organizations with dozens of teams.
graph TD
O[Organization alpinashop.example]
O --> F1[Folder produccion]
O --> F2[Folder desarrollo]
O --> F3[Folder compartido]
F1 --> P1[Project alpinashop-prod]
F2 --> P2[Project alpinashop-dev]
F3 --> P3[Project alpinashop-datos]
F3 --> P4[Project alpinashop-cicd]
P1 --> R1[Cloud Run alpinashop-web]
P1 --> R2[Cloud SQL alpinashop-pedidos]
P1 --> R3[Bucket alpinashop-catalogo]
P1 --> R4[GKE alpinashop-cluster]
P3 --> R5[Dataset alpinashop_analitica]
P3 --> R6[Topic pedidos-nuevos]
Why this structure and not another:
- Separate
produccionanddesarrollomake it possible to apply different policies to each world. In production, public IPs will be banned and audit logs required; in development, more freedom will be allowed and low budgets set. compartidohouses what serves both environments: the CI/CD pipeline and the analytical warehouse. Separating analytics into its own project prevents Lucía's queries from eating production quotas and makes it easier to give her broad permissions there without giving them to her on the shop.- One project per environment, not one project with "dev" and "prod" resources mixed together. It is the most important rule of all.
In this module we will work only with alpinashop-dev. The other projects will be created as the corresponding modules need them.
- What exactly a project is: ID, number and name
A project has three distinct identifiers and confusing them causes errors that are hard to diagnose.
| Identifier | Example | Who chooses it | Mutable? | Unique? | Where it is used |
|---|---|---|---|---|---|
| Display name | AlpinaShop Desarrollo |
You | Yes | No | Human interface only |
Project ID (projectId) |
alpinashop-dev |
You (or auto-generated) | No, never | Yes, globally | CLI, APIs, URLs, almost everything |
Project number (projectNumber) |
482913057261 |
No | Yes, globally | Service accounts, some internal formats, logs |
Details about the projectId you need to internalise:
- It is unique across the whole of Google Cloud, not just within your organization. If another customer somewhere in the world already uses
tienda, you cannot. That is why corporate IDs usually carry a company prefix. - It can never be changed. Not by renaming, not through support. The only way out is to create another project and migrate the resources, which in many cases means recreating them.
- Format rules: between 6 and 30 characters, lower case, digits and hyphens, must start with a letter and cannot end in a hyphen.
- When you delete a project, its ID is not released immediately (and in practice it is better to assume it is never released for your own use).
About the projectNumber, it is worth knowing that it appears in the default service accounts, in forms such as [email protected] or [email protected]. When you see a long number in a service account address, it is your project's number.
# See a project's three identifiers in one go.
gcloud projects describe alpinashop-dev \
--format="table(name, projectId, projectNumber, lifecycleState, createTime)"# List every project you have access to, sorted by creation date.
gcloud projects list --sort-by=createTime \
--format="table(projectId, name, projectNumber)"The --format="table(...)" flag selects which fields to show and presents them in columns. Without it, gcloud would return a default table with less information. In lesson 01-06 we will look at --format and --filter in depth.
- The project as a boundary
This is the central idea of the lesson: the project is simultaneously four distinct boundaries, and that is why deciding what goes in which project is an architectural decision.
| Boundary | What it means | Practical consequence |
|---|---|---|
| Billing | Each project is billed to a billing account | Separating projects is the cleanest way to know what each environment costs |
| Quotas | Most quotas apply per project (and per region) | A runaway process in dev cannot exhaust prod's quotas |
| Permissions (IAM) | Policies apply to the project and to what it contains | Dani can be an administrator in dev and only a viewer in prod |
| Networking | VPC networks belong to a project | By default, resources in different projects cannot see each other on the private network |
Of these four, networking is the one that most surprises people coming from a traditional environment. Two VMs in different projects do not share a private network unless you configure it explicitly through Shared VPC or peering, topics covered in lessons 03-01 and 07-03. This is an isolation advantage, not an obstacle.
And a useful consequence that gets exploited constantly: deleting a project deletes everything it contains. It is the most reliable way to clean up a test environment and to guarantee that nothing is left generating spend.
# Delete an entire project. Careful: it removes ALL its resources.
# The project stays 30 days in DELETE_REQUESTED state before disappearing,
# and during that window it can be recovered with "gcloud projects undelete".
gcloud projects delete alpinashop-pruebasThat 30-day window is an important safety net: an accidental deletion is recoverable, as long as it is spotted in time.
- Billing accounts
A billing account defines who pays, by what payment method and to which tax details the invoice is issued. It is an object that lives outside the project hierarchy: it does not hang from a folder or a project, it is associated with them.
The relationship is N to 1: many projects can point at the same billing account, but each project has at most one.
| Concept | Description |
|---|---|
| Billing account | The object that pays. It has an ID in the format XXXXXX-XXXXXX-XXXXXX |
| Self-service type | Card payment, automatic monthly invoice. The usual choice in small businesses |
| Invoiced type | Payment by bank transfer on negotiated terms. Requires volume and approval |
| Subaccount | A child account that groups spend separately within a parent account. Designed above all for resellers and for splitting spend between subsidiaries |
| Project with no billing | Can only use free services; most APIs fail |
Who can link projects and accounts
Linking a project to a billing account requires permissions on both sides, and this is a deliberate separation of duties:
| Role | What it allows |
|---|---|
roles/billing.admin |
Manage the whole billing account: payment methods, budgets, linking projects |
roles/billing.user |
Link projects to the billing account (but not manage payment) |
roles/billing.viewer |
View spend without being able to change anything |
roles/billing.projectManager |
Unlink a project from its billing account |
roles/resourcemanager.projectCreator |
Create projects |
At AlpinaShop, Marta has billing.admin, the finance manager has billing.viewer so as to consult spend without being able to touch anything, and Dani has billing.user on the account so he can link test projects himself. The detail of how IAM roles work is studied in lesson 03-04.
# See which account a project is linked to and whether billing is active
gcloud billing projects describe alpinashop-dev# Link a project to a billing account
gcloud billing projects link alpinashop-dev \
--billing-account=0X0X0X-0X0X0X-0X0X0X# Unlink (the project immediately loses the ability to use paid services)
gcloud billing projects unlink alpinashop-devunlink is a blunt and very useful tool: it is the "emergency cut-off" when a project's cost runs away. It stops consumption of billable services almost immediately, although it can also cause data loss in services that do not tolerate being left without billing. Use it knowing what you are doing.
- Labels for apportioning spend
Labels (labels) are key-value pairs that can be applied to projects and to most resources. Their superpower is that they appear in the billing reports and in the BigQuery export, which makes it possible to answer questions such as "how much did the development environment cost us last month?" or "what does the data team spend?".
Format rules:
- Key and value in lower case, with digits, hyphens and underscores.
- A maximum of 63 characters each; up to 64 labels per resource.
- The key cannot be empty; the value can.
A reasonable labelling scheme for AlpinaShop:
| Key | Possible values | What it is for |
|---|---|---|
entorno |
produccion, desarrollo, pruebas |
Separating spend by environment |
equipo |
infraestructura, backend, datos |
Apportioning cost by area |
centro-coste |
cc-100, cc-200 |
Accounting allocation |
aplicacion |
tienda, analitica, cicd |
Cost per product |
responsable |
marta, dani, lucia |
Knowing who to ask |
# Label the development project
gcloud projects update alpinashop-dev \
--update-labels=entorno=desarrollo,equipo=infraestructura,centro-coste=cc-100Tips on labelling, learned the hard way by many teams:
- Define the scheme before you start creating resources. Labelling 300 resources after the fact is a project in itself.
- Be strict about values.
dev,desarrolloandDesarrolloare three different labels and will break your reports. - Do not put sensitive information in labels. They are visible to anyone with read permissions on the resource.
- Do not confuse
labelswithtags. Google Cloud also has tags (governed labels) that serve to apply policies conditionally, not for billing. They are covered in lesson 07-07.
- Reports, export to BigQuery and budgets
Billing reports
In the console, Billing → Reports offers an interactive view of spend with filters by project, service, SKU, region, labels and period, and configurable grouping. It is where most day-to-day questions are answered.
Concepts that appear in those reports and are worth distinguishing:
| Concept | Meaning |
|---|---|
| SKU | The smallest billable unit. You do not pay "for Compute Engine", you pay for SKUs such as "N2 Instance Core running in EMEA" |
| Gross cost | Before discounts and credits are applied |
| Credits | Sustained use discounts, commitments, trial credit, promotions |
| Net cost | What you actually pay |
| Forecast cost | An end-of-month estimate based on the trend |
A very concrete tip: when spend does not add up, group by SKU, not by service. "Compute Engine: €210" tells you nothing; "Storage PD Capacity: €140" tells you that you have orphaned disks.
Export to BigQuery
The console reports are convenient but limited. For serious analysis, Google lets you export billing data to a BigQuery dataset, where it arrives with daily detail by SKU, project, label and region, and where it can be queried with SQL.
It is enabled under Billing → Billing export, choosing the destination project and dataset. AlpinaShop will send it to the alpinashop_analitica dataset in the alpinashop-datos project, so that Lucía can cross spend with business data.
Two warnings:
- The export is not retroactive: it only brings in data from the moment you enable it. That is another reason to configure it early even if you are not going to use it yet.
- The data takes several hours to appear and is corrected during the month, so it is no good for real-time alerts.
Analysing that data with SQL belongs to lesson 04-01 (BigQuery) and using it to optimise costs to lesson 07-05. Here it is enough to enable it.
Budgets and alerts
We already created a basic budget in lesson 01-02. Now we can take advantage of the hierarchy and the labels to refine it:
# A budget that watches ALL spend labelled entorno=desarrollo,
# warning when the end-of-month FORECAST exceeds 100% of the amount.
gcloud billing budgets create \
--billing-account=0X0X0X-0X0X0X-0X0X0X \
--display-name="Presupuesto entorno desarrollo" \
--budget-amount=80EUR \
--threshold-rule=percent=0.5 \
--threshold-rule=percent=0.9,basis=forecasted-spend \
--threshold-rule=percent=1.0 \
--filter-labels=entorno=desarrolloPoints to note about the command:
--filter-labelslimits the budget to spend on resources carrying that label, rather than to a specific project. It is more flexible: if tomorrow there are three development projects, the budget covers them all without any changes.basis=forecasted-spendchanges the nature of the warning: instead of warning you when you have already spent 90 %, it warns you when the end-of-month projection reaches that percentage. It gives you days of leeway instead of hours.- Remember from lesson 01-02: budgets warn, they do not block.
Depending on the SDK version, this command group may require the
alphaprefix (gcloud alpha billing budgets ...). Check withgcloud billing budgets --help.
- Policy inheritance in the hierarchy
The hierarchy exists, above all, so that policies are applied once and cover everything below. There are two types of policy and both are inherited:
| Type | What it controls | Example applied to AlpinaShop |
|---|---|---|
| IAM policies | Who can do what | Give [email protected] the network administrator role across the whole produccion folder |
| Organization policies | What is allowed to be done, regardless of permissions | Ban the creation of VMs with a public IP in the produccion folder |
Inheritance rules that need to be well understood:
- IAM permissions accumulate downwards and cannot be subtracted. If you grant someone the editor role at organization level, they will be an editor in every project, and you cannot take it away in a specific one through IAM. That is why granting broad roles at high levels is dangerous.
- Organization policies do restrict. They are the right tool for banning things, and by default a policy defined at a node replaces or combines with the inherited one depending on its configuration.
- The practical rule: grant permissions at the lowest possible level and restrictions at the highest possible level.
Both topics are studied in depth later: IAM in lesson 03-04 and organization policies and governance at scale in 07-07. What you need to retain now is that where you place a project in the hierarchy determines what it inherits, and that is why moving a project between folders changes its effective policies.
- Best practices for project structure
| Practice | Why |
|---|---|
| One project per environment (dev, staging, prod) | Isolates failures, quotas and access; spend per environment comes for free |
| Do not mix very different workloads in one project | It makes it easier to apply specific policies and understand cost |
| An explicit, stable naming convention | company-workload-environment; it reads at a glance and automates well |
| A separate project for data and analytics | Broad permissions for the data team without touching the shop |
| A separate project for CI/CD | The pipeline needs unusual permissions that should not live in production |
| Label everything from the start | Without labels, apportioning costs is impossible |
| Create projects with scripts or Terraform | Manual creation ends in inconsistent structures |
| A budget on every project | Including the test ones: they are precisely the ones that get forgotten |
| Avoid too many projects | Every project has a management cost: permissions, networks, budgets |
On the last point: there is a school of thought that argues for one project per microservice and environment. For a large organization with autonomous teams that can make sense; for AlpinaShop it would be a disproportionate maintenance burden. The structure should be proportional to the size of the team. Four projects for 40 people is reasonable; forty would not be.
- A complete worked example with
gcloud
gcloudMarta is going to set up AlpinaShop's structure from Cloud Shell. This block brings together everything we have seen.
# Step 0: variables so as not to repeat values and to avoid typos.
export ORG_ID=$(gcloud organizations list --format="value(ID)" | head -n1)
export BILLING_ACCOUNT="0X0X0X-0X0X0X-0X0X0X"
echo "Organization: $ORG_ID"gcloud organizations list returns the organizations you have permissions on. With --format="value(ID)" we extract only the numeric identifier, without headers, so it can be stored in a variable. If the output is empty, you have no organization (a personal account) and you will have to skip the folder steps.
# Step 1: create the top-level folders under the organization.
gcloud resource-manager folders create \
--display-name="produccion" --organization=$ORG_ID
gcloud resource-manager folders create \
--display-name="desarrollo" --organization=$ORG_ID# Step 2: retrieve the numeric ID of the development folder.
export FOLDER_DEV=$(gcloud resource-manager folders list \
--organization=$ORG_ID \
--filter="displayName=desarrollo" \
--format="value(name)")
echo "Development folder: $FOLDER_DEV"Here --filter and --format appear together for the first time. --filter="displayName=desarrollo" narrows the list down to the folder we are interested in, and --format="value(name)" extracts only its identifier. It is the scripting pattern we will use throughout the course.
# Step 3: create the development project inside that folder.
gcloud projects create alpinashop-dev \
--name="AlpinaShop Desarrollo" \
--folder=$FOLDER_DEV \
--labels=entorno=desarrollo,equipo=infraestructuraIf the project already existed from lesson 01-02 without a folder, it can be moved instead of recreated:
# Alternative: move an existing project into a folder.
gcloud beta projects move alpinashop-dev --folder=$FOLDER_DEV# Step 4: link the project to the billing account.
gcloud billing projects link alpinashop-dev \
--billing-account=$BILLING_ACCOUNT# Step 5: check that everything has ended up as expected.
gcloud projects describe alpinashop-dev \
--format="table(projectId, projectNumber, parent.type, parent.id, labels)"
gcloud billing projects describe alpinashop-dev \
--format="table(projectId, billingAccountName, billingEnabled)"The parent.type field should show folder and parent.id the identifier of the development folder. billingEnabled should be True: if it is False, the link did not complete and practically no API will work.
# Step 6: a safety-net budget for the development folder.
gcloud billing budgets create \
--billing-account=$BILLING_ACCOUNT \
--display-name="Presupuesto desarrollo AlpinaShop" \
--budget-amount=50EUR \
--threshold-rule=percent=0.5 \
--threshold-rule=percent=0.9,basis=forecasted-spend \
--threshold-rule=percent=1.0 \
--filter-projects="projects/alpinashop-dev"With this, AlpinaShop has a real hierarchy, a correctly placed and labelled project, billing linked and an economic alarm active.
Common Mistakes and Tips
- Choosing the
projectIdbadly. It is immutable and global. Adopt thecompany-workload-environmentconvention and apply it without exception. - Confusing
projectIdwithprojectNumber. When an API or an error message asks for a specific one, give it that one: they are not interchangeable in every context. - Mixing development and production in one project. The day someone deletes the wrong database by mistake you will understand why. It also makes it impossible to separate quotas, permissions and cost.
- Granting broad roles at organization or folder level. IAM permissions are inherited downwards and cannot be subtracted at a lower level.
- Labelling late or inconsistently. A scheme defined from the start and respected is worth more than a sophisticated one applied half-heartedly.
- Enabling the billing export to BigQuery once you already need it. It is not retroactive: the previous months are lost.
- Assuming the budget cuts off spend. It does not. It remains a smoke detector.
- Tip: use
gcloud projects deleteto clean up test environments. It is the only reliable way to make sure nothing is left billing, and you have 30 days to change your mind. - Tip: do not create more projects than you can govern. Each one drags along permissions, networking, quotas and a budget.
Exercises
Exercise 1: designing the hierarchy
AlpinaShop grows and opens a subsidiary in Portugal that will run its own shop (alpinashop.pt) with its own database, but will share the CI/CD pipeline and the analytical warehouse with the parent company. On top of that, management insists on being able to see at a glance what each country costs separately.
Design the resulting hierarchy (folders and projects), state which labels you would add, and explain at which level you would place the policy banning the creation of VMs with a public IP in production, and why.
Exercise 2: identifiers and billing
Answer with reasoning:
- Marta has made a mistake and created the project with the ID
alpinshop-dev(anais missing). Can she correct it? What options does she have? - Dani sees the address
[email protected]in a log. What is that number and how would he check which project it belongs to? - Marta wants spend on the
alpinashop-devproject to stop immediately because a process has run out of control. What command does she run and what risk does she take on?
Exercise 3: a creation script
Write a bash script that creates a project called alpinashop-pruebas with these characteristics, checking at every step that the operation succeeded:
- Located in the
desarrollofolder. - Labelled with
entorno=pruebas,equipo=infraestructuraandresponsable=marta. - Linked to the billing account.
- With a budget of 10 EUR and warnings at 50 %, 90 % (on forecast) and 100 %.
And add at the end the command you would use to remove that environment completely when you have finished testing.
Solutions
Solution 1
A reasonable structure:
graph TD
O[Organization alpinashop.example]
O --> F1[Folder produccion]
O --> F2[Folder desarrollo]
O --> F3[Folder compartido]
F1 --> F1A[Folder es]
F1 --> F1B[Folder pt]
F1A --> P1[alpinashop-prod]
F1B --> P2[alpinashop-pt-prod]
F2 --> P3[alpinashop-dev]
F2 --> P4[alpinashop-pt-dev]
F3 --> P5[alpinashop-datos]
F3 --> P6[alpinashop-cicd]
Labels: to the existing ones (entorno, equipo, centro-coste) a pais label is added with values es and pt. With that label, management gets the breakdown by country in the billing reports without having to look at the hierarchy, and budgets can be created per country with --filter-labels=pais=pt.
The policy banning public IPs is placed on the produccion folder, not on each project. The reasons: it is defined once, it is inherited automatically by es and pt and by any country added in the future, and it does not affect development, where that restriction would get in the way of the work. Placing it on the organization would be excessive (it would break development) and placing it on each project would be fragile (the next project would be created without it).
Solution 2
- She cannot correct it. The
projectIdis immutable. Her options are: (a) create a new project with the correct ID and recreate or migrate the resources, which is cheap if the project is newly created and practically empty; or (b) keep the wrong ID and correct only the display name, which is editable withgcloud projects update alpinashop-dev --name="...". Given that the project is young, the sensible thing is to recreate it and delete the wrong one. - It is the
projectNumber, the project's numeric identifier, and that address corresponds to that project's default Compute Engine service account. To find out which project it belongs to:gcloud projects list --filter="projectNumber=482913057261" \\ --format="value(projectId)" - She runs
gcloud billing projects unlink alpinashop-dev. Unlinking billing means paid services stop working almost immediately and spend halts. The risk is that some services do not tolerate being left without billing and may lose data or resources: stopped instances, cancelled jobs, and in certain cases deletion of resources if the situation drags on. It is an emergency measure, not a way to "pause" a project. A less aggressive alternative is to identify and stop the specific resource that has run out of control.
Solution 3
#!/bin/bash
set -e # Stops the script as soon as a command fails
BILLING_ACCOUNT="0X0X0X-0X0X0X-0X0X0X"
PROJECT_ID="alpinashop-pruebas"
# 1. Find the organization and the development folder
ORG_ID=$(gcloud organizations list --format="value(ID)" | head -n1)
FOLDER_DEV=$(gcloud resource-manager folders list \
--organization="$ORG_ID" \
--filter="displayName=desarrollo" \
--format="value(name)")
if [ -z "$FOLDER_DEV" ]; then
echo "ERROR: the 'desarrollo' folder was not found"
exit 1
fi
# 2. Create the project with its labels
gcloud projects create "$PROJECT_ID" \
--name="AlpinaShop Pruebas" \
--folder="$FOLDER_DEV" \
--labels=entorno=pruebas,equipo=infraestructura,responsable=marta
# 3. Link billing
gcloud billing projects link "$PROJECT_ID" \
--billing-account="$BILLING_ACCOUNT"
# 4. Verify that billing has ended up active
BILLING_OK=$(gcloud billing projects describe "$PROJECT_ID" \
--format="value(billingEnabled)")
if [ "$BILLING_OK" != "True" ]; then
echo "ERROR: billing was not activated correctly"
exit 1
fi
# 5. Create the safety-net budget
gcloud billing budgets create \
--billing-account="$BILLING_ACCOUNT" \
--display-name="Presupuesto pruebas AlpinaShop" \
--budget-amount=10EUR \
--threshold-rule=percent=0.5 \
--threshold-rule=percent=0.9,basis=forecasted-spend \
--threshold-rule=percent=1.0 \
--filter-projects="projects/$PROJECT_ID"
echo "Project $PROJECT_ID created and protected successfully."To remove the environment completely when you have finished:
This single command removes the project and all its resources, guaranteeing that nothing is left generating spend. The project stays 30 days in DELETE_REQUESTED state and can be recovered within that window with gcloud projects undelete alpinashop-pruebas.
Conclusion
This lesson has established the skeleton on which everything else will rest. We have gone through the Organization → Folders → Projects → Resources hierarchy and applied it to AlpinaShop with the produccion, desarrollo and compartido folders; we have distinguished a project's three identifiers and fixed in our minds that the projectId is immutable and unique across the whole of Google Cloud; we have seen that the project is simultaneously a boundary for billing, quotas, permissions and networking, and that deleting it is the most reliable way to clean up an environment; we have understood billing accounts, their N-to-1 relationship with projects, who can link them and what unlink means as an emergency cut-off; we have defined a labelling scheme for apportioning spend by environment, team and cost centre; we have enabled the export to BigQuery into alpinashop_analitica and refined the budgets with forecast-based warnings; and we have reviewed how each type of policy is inherited and what project structure is proportional to a 40-person company.
We now know who owns what and who pays. The other coordinate is still missing: where the resources live. In the next lesson, Regions, Zones and the Shared Responsibility Model, we will look at Google Cloud's geography —multi-region, region and zone—, what it means for a service to be zonal, regional or global, how Google's private backbone network works, what criteria lead AlpinaShop to decide between europe-west1 and europe-southwest1 (latency, price, available services and data residency under the GDPR), what deploying across several zones really protects against, and how security responsibility is divided between Google and you depending on the type of service.
Google Cloud Platform (GCP) Course
Module 1: Introduction to Google Cloud Platform
- What is Google Cloud Platform?
- Setting Up Your GCP Account
- A Tour of the GCP Console
- Projects, Resource Hierarchy and Billing
- Regions, Zones and the Shared Responsibility Model
- Cloud Shell and the gcloud CLI
Module 2: Core GCP Services
- Compute Engine: Virtual Machines on Google Cloud
- Cloud Storage: Object Storage
- Cloud SQL: Managed Relational Databases
- App Engine: Platform as a Service
- Google Kubernetes Engine (GKE)
- NoSQL Databases: Firestore, Bigtable and Spanner
- How to Choose the Right Compute Service
Module 3: Networking and Security
- VPC Networks
- Cloud Load Balancing
- Cloud CDN
- Identity and Access Management (IAM)
- Cloud Armor
- Secrets and Encryption: Secret Manager and Cloud KMS
- Cloud DNS, TLS Certificates and Publishing Services Securely
Module 4: Data and Analytics
- BigQuery: The Analytical Data Warehouse
- Cloud Dataflow: Batch and Streaming Data Processing
- Cloud Dataproc: Managed Spark and Hadoop
- Cloud Pub/Sub: Asynchronous Messaging
- Cloud Data Fusion: Code-Free Data Integration
- Orchestrating Pipelines with Cloud Composer and Workflows
- Data Governance and Dashboards with Dataplex and Looker Studio
Module 5: Machine Learning and AI
- Vertex AI: The Machine Learning Platform on GCP
- AutoML: Custom Models Without Writing Code
- TensorFlow on GCP: Training and Serving Models
- Natural Language API
- Vision API
- Generative AI on Vertex AI: Gemini Models and Embeddings
- MLOps: From Model to Product with Vertex AI Pipelines
Module 6: DevOps and Monitoring
- Cloud Build: Continuous Integration on GCP
- Cloud Source Repositories and Source Code Management
- Cloud Functions: Serverless Functions
- Cloud Monitoring (formerly Stackdriver): Metrics, Dashboards and Alerts
- Cloud Deployment Manager and Native Infrastructure as Code
- Cloud Logging and Cloud Trace: Logs, Traces and Diagnostics
- Terraform on GCP: Infrastructure as Code in Practice
Module 7: Advanced GCP Topics
- Hybrid and Multicloud with Anthos
- Serverless Computing with Cloud Run
- Advanced Networking: Shared VPC, Peering and Hybrid Connectivity
- Security Best Practices
- Cost Management and Optimization
- Reliability: SLOs, High Availability and Disaster Recovery
- Governance at Scale: Organization, Policies and Auditing
