Dazbo's Acme Blogging App on Google Cloud

Acme Blogging App Hosting on Google Cloud Platform

Zoom Out

High Level Design

Sections in this Page

Architecture

Component Overview

Architecture Overview

Google Organisation Resource Hierarchy

The resource hierarchy will be provisioned as shown here:

Resource hiearchy

This provides:

The folders are organised as follows:

Identity and Access

Users and Clients

Architecture Overview

Applications Overview

The Ghost Blogging Application

Note: according to Ghost documentation, Ghost is always intended to be deployed on a single instance. Unfortunately, the design of Ghost itself is not readily compatible with a highly-available deployment pattern, even when pointing Ghost to a database backend. Thus, whilst the design described here does work and meets the brief, it has required considerably more effort than a ‘well-behaved’ stateless application.

The Post-Purging Application

Security

This design deploys tiered security:

Scalability

Availability

Disaster Recovery and Data Protection

Foundation and Infrastructure-as-Code

Foundation Build

Foundation Build

The overall deployment is split into phases, as shown here:

Layered Deployment

  1. Initial bootstrap of the organisation.
    For this PoC, I’ve completed the boostrap manually. However, much of it could be automated. The bootstrap includes:
    • Creation of the Acme-Ltd GCP organisation.
    • Creation of identities and groups, as described above.
    • Creation of the top-level folder hierarchy, i.e. the Shared, Non-Prod, and Prod folders.
  2. Create the Shared Infra-Admin project, to host the Terraform Project Factory
  3. Provisioning Terraform run infrastructure for users, using Terraform itself
  4. Provisiong the Shared Services CI/CD project, to host the CI/CD Pipeline

Terraform Project Factory

Project Factory

The Project Factory creates new projects, as needed. The projects include:

This design leverages the principle of Immutable Infrastructure: cloud infrastructure resources should always be deployed using Terraform. This ensures consistency and prevents configuration drift from the design, as well as configuration drift between environments.

Terraform IaC configurations are stored in GitHub. A DevOps admin can pull from the repo, and use these configurations to spin up new projects. Each project contains everything needed for a particular DevOps team. The actual provisioning is under the control of a dedicated infra-admin service account.

As shown above, the project factory is itself split up into multiple layers:

Having a layered factory means that each layer can be run independently. This carries advantages:

Terraform state is persisted in a Google Cloud Storage bucket.

Cloud Build CI/CD Pipeline

IAP rejected

Distinct from the infrastructure provisioning process, this CI/CD pipeline enables development teams to automatically test, build and deploy, following any check-in of code.

Here I’ve elected to use a fully GCP-native pipeline for simplicity. The components are:

Observability

Monitoring and Alerting

Billing

See Billing and Dashboards for a more in-depth view of how this has been implemented, including some of the sample reports and dashboards that have been created.

Cost by Env Type

Cost Management

Migration and Decommissioning

Still To Do / Future Work Considerations

Parked / Deprecated