Pre-built blueprints for provisioning cloud resources and Kubernetes services through the Qovery platform.
| Service | Path | Description |
|---|---|---|
| S3 | AWS/s3/default/ |
S3 bucket with encryption and versioning |
| PostgreSQL | AWS/postgres/17/ |
RDS PostgreSQL 17 instance |
| MySQL | AWS/mysql/8/ |
RDS MySQL 8.4 instance |
| CloudFront | AWS/cloudfront/default/ |
CloudFront CDN distribution in front of an HTTP/S origin |
| MSK | AWS/msk/default/ |
MSK Serverless (managed Kafka) with SASL/IAM auth |
| Service | Path | Description |
|---|---|---|
| Redis | GCP/redis/7/ |
Memorystore for Redis 7 instance |
| Service | Path | Description |
|---|---|---|
| Object Storage | SCW/object-storage/default/ |
Scaleway Object Storage bucket |
| PostgreSQL | SCW/postgres/16/ |
Managed Database PostgreSQL 16 |
| MySQL | SCW/mysql/8/ |
Managed Database MySQL 8 |
| Service | Path | Description |
|---|---|---|
| Redis | HELM/redis/8/ |
Redis 8 cache via community groundhog2k Helm chart |
| RabbitMQ | HELM/rabbitmq/4/ |
RabbitMQ 4 message broker via community groundhog2k Helm chart |
| Datadog | HELM/datadog/7/ |
Datadog Agent (metrics, logs, optional APM) via official chart |
| New Relic | HELM/newrelic/default/ |
New Relic Kubernetes monitoring via official nri-bundle chart |
Third-party services not tied to the cluster's cloud provider — shown for every cloud in the console.
They authenticate through their own sensitive variables (credentials mode is env, never cluster).
| Service | Path | Description |
|---|---|---|
| Aiven Kafka | EXTERNAL/aiven-kafka/default/ |
Managed Kafka on Aiven |
| Cloudflare DNS | EXTERNAL/cloudflare-dns-zone/default/ |
Cloudflare DNS zone and records |
| Cloudflare Workers | EXTERNAL/cloudflare-workers/default/ |
Cloudflare Worker script with optional route |
| Confluent Kafka | EXTERNAL/confluent-kafka/default/ |
Managed Kafka on Confluent Cloud |
| MongoDB Atlas | EXTERNAL/mongodb-atlas/default/ |
MongoDB Atlas cluster |
| PlanetScale | EXTERNAL/planetscale/default/ |
PlanetScale MySQL database |
| Redpanda Kafka | EXTERNAL/redpanda-kafka/default/ |
Managed Kafka-compatible Redpanda cluster |
| Temporal Cloud | EXTERNAL/temporal-cloud/default/ |
Temporal Cloud namespace |
| Timescale Cloud | EXTERNAL/timescale-cloud/default/ |
Timescale Cloud service |
{provider}/{service}/{major-version}/
qbm.yml — Blueprint manifest
main.tf — Terraform code (for TF blueprints)
variables.tf — Terraform variables
outputs.tf — Terraform outputs
providers.tf — Provider configuration
values.yaml — Helm values template (for Helm blueprints)
README.md — Blueprint documentation
- Browse the catalog in the Qovery Console
- Select a blueprint and major version
- Fill in the variables
- Deploy
Every blueprint directory contains a qbm.yml file that describes the engine selection,
configuration knobs the user can tune, and what the deployment exposes back to dependent services.
apiVersion: "qovery.com/v1"
kind: ServiceBlueprint
metadata:
name: "aws-rds-postgresql"
version: "1.2.0" # semver; CI auto-tags when this bumps
description: "..." # short, one line
icon: "app://qovery-console/postgresql"
serviceFamily: "postgres"
categories: ["database", "postgresql", "rds"]
spec:
engine: { ... } # see below
contextVariables: [...]
variables: [...]
outputs: [...]| Field | Required | Type | Allowed values |
|---|---|---|---|
type |
yes | string | terraform | opentofu | helm |
provider |
yes (terraform / opentofu) | string | AWS | GCP | AZURE | SCW | EXTERNAL — must match the top-level directory |
terraform |
yes if type=terraform |
block | see below |
opentofu |
yes if type=opentofu |
block | same shape as terraform |
chart |
yes if type=helm |
block | {repository, name, version} |
credentials |
optional | block | see below — terraform/opentofu only |
backend |
optional | block | see below — terraform/opentofu only |
timeout |
optional | integer (seconds) | platform default if omitted |
resources |
optional | block | {cpu, ram, storage} for the apply job pod |
arguments |
optional (helm) | [string] |
extra helm install args |
allowClusterWideResources |
optional (helm) | bool | default false |
terraform:
version: "1.9.7" # default the engine uses
allowedValues: ["1.5.7", "1.9.7", "1.13.3"] # optional; user can pick from theseversion is required when type is terraform or opentofu.
How the underlying terraform service authenticates against the cloud provider.
credentials:
default: cluster # cluster | env
allowedValues: ["cluster", "env"] # optional; frontend dropdown
overridable: true # optional; default false (omit = pinned to default)| Mode | Behavior |
|---|---|
cluster |
Reuse the cluster's cloud credentials |
env |
User supplies cloud credentials as environment variables on the service. Manual setup required before first deploy. |
Where the terraform state lives.
backend:
default: qovery # qovery | user_provided
allowedValues: ["qovery", "user_provided"]
overridable: true
user_provided: # required iff default=user_provided
type: s3 # s3 | gcs | azurerm | ...
config:
bucket: "..."
region: "..."
key: "..."| Mode | Behavior |
|---|---|
qovery |
Managed by Qovery in a Kubernetes secret (default for managed blueprints). |
user_provided |
User-controlled backend declared in the user_provided block (S3, GCS, …). Manual setup required before first deploy. |
Sizing for the apply pod (the k8s Job running terraform apply).
For helm blueprints this block is ignored — the chart defines its own resources.
resources:
cpu: "500m" # Kubernetes-style CPU (millicores or whole cores)
ram: "512Mi" # Mi / Gi
storage: "1Gi" # ephemeral disk for state + provider pluginsTwo layers govern what a user can pick for credentials.default / backend.default /
terraform.version / opentofu.version:
- Enum universe — values supported by the platform (e.g.
cluster | envfor credentials). allowedValues— subset a specific blueprint authorizes.
overridable: false pins the field to its default — any other value rejected.
User-tunable inputs. Each variable must also exist in variables.tf (terraform blueprints).
variables:
- name: "db_name"
type: "string" # string | number | bool
required: true
default: "mydb" # optional
description: "PostgreSQL database name"
pattern: "^[a-zA-Z][a-zA-Z0-9_]{0,62}$" # strings only — regex
minLength: 1 # strings only
maxLength: 63 # strings only
min: 20 # numbers only
max: 65536 # numbers only
allowedValues: ["db.t3.micro", "db.t3.small"] # optional;CI enforces:
sensitiveinqbm.ymlmust matchvariables.tfsensitive = true.- Variable names matching
password|secret|token|api_key|access_key|private_key|credentialmust be markedsensitive: true(or rename them).
Auto-sourced from the target cluster. Read-only for the user.
contextVariables:
- name: "region"
source: "cluster.region" # cluster.region | cluster.name
overridable: falseValues the deployed terraform/helm service publishes back to Qovery (consumable by other services via variable interpolation).
outputs:
- name: "db_endpoint"
description: "RDS instance endpoint (host:port)"
sensitive: false
- name: "db_password"
description: "Master password"
sensitive: trueTags follow the format {provider}/{service}/{major-version}/{semver} (e.g. AWS/s3/default/1.0.0).
Tags are auto-created by CI on merge to main when metadata.version in qbm.yml changes.
-
Create a directory:
{provider}/{service}/{version}/ -
Add
qbm.yml+ Terraform files or Helm values -
Add
README.mddescribing what the blueprint creates -
Regenerate
catalog.jsonlocally and commit it:mise run generate-catalog git add catalog.json
-
Open a PR — CI validates structure, variables, and that
catalog.jsonis up to date -
Merge — CI auto-tags the new blueprint version
Add sensitive: true to any variable that holds a secret (passwords, tokens, API keys). The console renders these as password inputs and Qovery encrypts the value at rest. Omit the field for non-sensitive variables (it defaults to false).
variables:
- name: "db_password"
type: "string"
required: true
sensitive: true
description: "Master password"CI enforces this two ways:
- For Terraform blueprints,
qbm.ymlsensitivemust matchvariables.tfsensitive = true. - For any blueprint, variable names that look secret (
password,secret,token,api_key,access_key,private_key,credential) must besensitive: true— or rename the variable.