Skip to main content

Schema Registry


By pushing your schemas to the Atlas Cloud Schema Registry, teams can maintain a single source of truth for their database schemas and schema changes. It is like Docker Hub but for database schema changes.

How it works

Push your migration directory to the Schema Registry by using the atlas migrate push command. This will upload your migration files to the registry and make it available to others in your organization:

atlas migrate push --env local helloworld

Simplifying Deployments

When you push a migration directory to the Schema Registry, you can give it a tag in the same way that you would tag a Docker image. This makes any version of your schema effectively addressable which dramatically simplifies deployments.

References to a schema version can then be used in your deployment pipelines with an expression similar to:

# Reference by version
atlas migrate apply \
--dir "atlas://myapp?version=20231201182011" \
--url "postgres://postgres:pass@:5432/example?search_path=public&sslmode=disable"

# Reference by tag
atlas migrate apply \
--dir "atlas://app?tag=39e7e4e35fce7409bd26d25d8140061695d4ffd5" \
--url "postgres://postgres:pass@:5432/example?search_path=public&sslmode=disable"

Using the Schema Registry completely eliminates the need to create custom Docker images for migrations or grant your runtime environments access to your source code repository.

Example: Kubernetes Deployment

Let's see how we can use tagged schema versions in a Kubernetes deployment:

kind: AtlasMigration
name: migration
key: url
name: postgres-credentials
project: "atlasdemo" # Atlas Cloud project name
name: atlas-credentials
key: token
name: "myapp" # Migration directory name in your atlas cloud project
tag: "39e7e4e35fce7409bd26d25d8140061695d4ffd5" # See below on how to obtain this value for your project.

Example: Terraform

You can also use references to the Schema Registry in your Terraform modules:

resource "atlas_migration" "myapp" {
url = "postgres://postgres:pass@:5432/example?search_path=public&sslmode=disable"
remote_dir {
name = "myapp"
tag = "39e7e4e35fce7409bd26d25d8140061695d4ffd5"

Additional Benefits

  • Schema Docs - Get automatically generated documentation for your schemas when you push them to the Schema Registry.