Skip to main content
Qovery creates it in the AWS account of the environment’s cluster, as a Blueprint service in one of your environments.
New to this? You don’t need to know Kubernetes or Terraform. Qovery sets up Amazon RDS for MySQL in your cloud account and manages it for you: you fill in a form, or paste the prompt below into your coding agent. The values it publishes, listed under Outputs, reach your other services as environment variables. Qovery tells you when a newer version of the Blueprint is available. Check the requirements in the Reference section before you start, and try it first in a development environment.

Create it

  1. Open the environment, then New service › Blueprint.
  2. Find Amazon RDS for MySQL in the catalog and pick the major version.
  3. Fill in the variables. Required ones are marked; the others use their defaults.
  4. Create the service, and deploy it now or later.
You don’t add any file to your repository. Qovery creates the Blueprint from the Console or the API.

Variables and outputs

Generated from qbm.yml at AWS/mysql/8/3.5.1, the manifest the Console form is built from.
Outputs become environment variables that other services in the environment can use. By default Qovery also creates an alias for each output, prefixed with the Blueprint’s name; see Aliases Qovery creates for outputs for the naming rules and the cases where no alias is created.
Secret variables and outputs are encrypted and masked in Qovery, but Terraform can also keep their values, and values derived from them, in its state. With the Qovery-managed state backend (the default), Qovery stores the state. If you use your own backend, protect it and keep state files out of version control.

Reference

From the Blueprint’s README. Creates an AWS RDS MySQL 8.4 instance with configurable instance class, storage, backups, maintenance window, monitoring, and network settings. Storage is encrypted by default. A dedicated parameter group is attached with log_bin_trust_function_creators = 1 so the master user can create triggers/stored procedures without superuser privileges. The RDS identifier is derived from db_name by lowercasing and replacing underscores with hyphens (AWS requirement). The actual MySQL database name is kept as provided.

Variables

Required

Available instance classes: every RDS instance class Qovery offers for native managed PostgreSQL and MySQL — the db.t3, db.t4g, db.m5–db.m8g, db.r5–db.r8g (including db.r5b), db.x2g, db.x2idn and db.x2iedn families, with their Graviton (g), Intel (i), local-storage (d) and network-optimized (n) variants. db.c6gd is left out because RDS offers it only for Multi-AZ DB clusters. The full list is in qbm.yml.

Credentials

Both are optional — omit them and Qovery supplies the values, the way native managed databases did. In the console, leaving the field blank omits it. Through the API or Terraform, omit the variable rather than sending an empty string: the platform rejects an empty variable value. Changing db_password rotates the live instance’s master password: the value is sent as a write-only argument, triggered by a version derived from the password itself, so a change reaches RDS and an unchanged password sends nothing. An adopted instance does not take part until manage_db_password is set to true. That keeps its import plan clean, and it has a consequence worth stating plainly: while the flag is false, editing db_password changes what the blueprint publishes without changing anything on the instance. Consumers pick up a credential RDS will reject. On an adopted instance, either set the flag before touching the password, or do not touch the password at all. Setting the flag is itself a write. Until then the version that triggers the send is null in state, so switching it to true moves that value and applies db_password to the instance — harmless when the two already agree, and an overwrite of the live password when they do not. Confirm the stored password is the one the instance actually has before opting in. A rotation also obeys apply_changes_now. Left false, RDS defers the password change to the maintenance window while the new value is published immediately — consumers redeployed in between cannot connect. Set apply_changes_now when you rotate. Adoption (import_identifier set) requires both explicitly. username is ForceNew on aws_db_instance, so a defaulted value would plan a replacement and destroy the live database; and RDS never returns the master password, so a generated one would be published as the credential without ever being applied.

Instance & storage

Network

By default the instance is attached to the Qovery cluster network: the DB subnet group created at cluster bootstrap (named after the cluster VPC id) and the cluster workers security group, so pods in the cluster can reach the database out of the box. On clusters deployed into an existing VPC (user-provided network), the ClusterId tag lookup may not resolve; set db_subnet_group_name and security_group_ids explicitly in that case.

Maintenance & upgrades

Backups

Deleting the service keeps a final snapshot and the automated backups by default, and both keep costing storage until deleted by hand: the snapshot indefinitely, the backups for backup_retention_period days. For a throwaway or test instance, set both skip_final_snapshot and delete_automated_backups to true. The final snapshot is named <cluster name>-<db name>-<YYYYMMDDhhmmss>: db_name lowercased with _ turned into -, the UTC time the name was stamped, and any character AWS rejects removed (prefixed snap- if the result does not start with a letter). It is stamped once at creation, so successive create/destroy cycles of the same name do not collide.

Monitoring

Misc

Outputs

Upgrading from an earlier blueprint version

Read this before repointing a deployment at this version.
  • An adopted instance now keeps running its exact live version (for example 8.0.x) instead of having engine_version ignored. Nothing is sent to AWS for an instance whose version is unchanged.
  • Deleting now keeps a final snapshot and the automated backups for services created on this version. An existing service does not change behaviour: Qovery stores every variable default when the service is created, so repointing it here keeps skip_final_snapshot = true and delete_automated_backups = true. To keep a snapshot and backups on delete, set both to false on the service. The upgrade itself adds time_static.created and, with those set to false, updates skip_final_snapshot, delete_automated_backups and final_snapshot_identifier in place — Terraform-only arguments, nothing is sent to AWS and the instance is not rebooted.
  • For an instance this blueprint created, and for an adopted instance already opted in with manage_db_password, the first apply writes the master password once. Old state carries no record of what was last sent, so the value Qovery holds is applied. An instance whose password was rotated outside Terraform — which earlier versions of this document told you to do — is reset to the Qovery-held value, and applications using the out-of-band password stop connecting. Make the two agree before you upgrade. An adopted instance left at manage_db_password = false is not touched: nothing is sent, and an out-of-band rotation survives.
  • manage_db_password is one-way. Setting it back to false after an adopted instance has been handed over leaves Terraform with a change AWS rejects as “no modifications were requested”.
  • Terraform moves from 1.9.7 to 1.13.3, and 1.9.7 is no longer an accepted override. State written by 1.13.3 cannot be read by 1.9.7, so a deployment cannot be repointed at an earlier blueprint version once it has applied.

Lifecycle ignore_changes

On the primary instance, engine_version is no longer ignored. Terraform requests the exact version held in the internal engine_version variable, which Qovery sets on every deploy to the live version, so an adopted 8.0.x instance stays on 8.0.x. With auto_minor_version_upgrade enabled, AWS may still move the running minor forward; the next deploy then requests that newer version, so Terraform never tries to go back. Read replicas inherit the primary’s version. A bare "8.4" is never sent to a live instance, because AWS resolves it to the region’s default minor, which upgrades an older minor and is refused on a newer one. Without the variable, an existing instance keeps its live version (read through the aws_db_instance data source) and only a new instance gets 8.4. A few attributes remain ignored:
  • password — the master password moved to the write-only password_wo; ignoring the plain attribute stops the value left in older state reading as a removal.
  • enabled_cloudwatch_logs_exports — list type, not yet supported by the qbm.yml schema.
  • max_allocated_storage — will turn into a managed input when the storage autoscale feature is added.
Note: parameter_group_name is not ignored — the blueprint owns its parameter group.

Required AWS IAM permissions

The credentials used to deploy this blueprint must allow the actions below. The RDS actions target instances in any region you deploy to; EC2 read actions are needed so Terraform can look up the default VPC, subnets, and security groups when none are explicitly configured.
When monitoring_interval > 0, the supplied monitoring_role_arn must be assumable by RDS (monitoring.rds.amazonaws.com trust relationship) and grant the AmazonRDSEnhancedMonitoringRole managed policy.