Create it
- Console
- CLI and API
- Coding agent
- Open the environment, then New service › Blueprint.
- Find Snowflake Database in the catalog and pick the major version.
- Fill in the variables. Required ones are marked; the others use their defaults.
- Create the service, and deploy it now or later.
Variables and outputs
Generated fromqbm.yml at EXTERNAL/snowflake/default/1.0.3, the manifest the Console form is built from.
All 19 variables
All 19 variables
All 9 outputs
All 9 outputs
Reference
From the Blueprint’s README. Provisions a Snowflake database, schema, warehouse and application role with its grants (snowflake_database, snowflake_schema, snowflake_warehouse,
snowflake_account_role, snowflake_grant_privileges_to_account_role) and, by default, a SERVICE
user with a generated RSA key pair (snowflake_service_user, tls_private_key), via the official
snowflakedb/snowflake provider (~> 2.0).
Available on every cloud. This is an EXTERNAL blueprint: it authenticates with Snowflake
account credentials supplied as variables, never with the cluster’s cloud identity, so it deploys
the same way from an AWS, Azure, Scaleway or GCP cluster. The generated key pair is what lets a
workload anywhere authenticate to Snowflake.
Credentials
Key-pair (JWT) auth:snowflake_organization_name, snowflake_account_name, snowflake_user and
snowflake_private_key (sensitive), supplied as variables (credentials.default: env). The public
half must already be registered on that user:
SERVICE users and is
retiring single-factor password sign-in, so it is the one credential shape guaranteed to break.
snowflake_role (default ACCOUNTADMIN) is the role Terraform runs as. It needs CREATE DATABASE,
CREATE WAREHOUSE, CREATE ROLE and CREATE USER on the account plus the right to grant them;
SYSADMIN alone cannot create a role, which is why the default is not SYSADMIN.
Variables
Required
Optional
Outputs
Notes
database_namecaps at 246, not Snowflake’s 255. The derived warehouse, role and user names append up to_APP_USER, so a 255-char database would produce a 264-char identifier that Snowflake rejects at apply. The cap is unconditional — settingwarehouse_name,role_nameandservice_user_nameexplicitly does not lift it.- Identifiers are upper-cased. Snowflake upper-cases unquoted identifiers while the provider
creates objects exactly as named, so
mydbwould become a case-sensitive object that only resolves when double-quoted. Every name here goes throughupper()to avoid that. - Table grants are future grants. The schema is created by this blueprint, so every table it will hold is a future table at apply time. Tables that predate the deployment (only possible when pointing the role at an existing schema) are not covered.
- The warehouse starts suspended and suspends again after
auto_suspend_seconds; the first query resumes it. A warehouse bills per second while it is up, so this default is the difference between paying for queries and paying for idle time. - The generated private key is a long-lived credential, surfaced as a sensitive output and
stored encrypted by Qovery. Rotating it means tainting
tls_private_key.appand redeploying, which also updates the user’s registered public key. data_retention_time_in_daysabove 1 requires Enterprise Edition; a Standard account rejects the apply rather than silently clamping.- Tables and views are deliberately out of scope: their schema belongs with the application that
owns them. Point your migration tooling at
database_name.schema_name.