Overview
This guide walks you through deploying SGP in an Azure cloud subscription using the SGP Azure Terraform modules. SGP Azure infrastructure is defined by terraform modules managed by Scale.Prerequisites
- Access to an Azure subscription with sufficient permissions to create resources (Contributor + User Access Administrator roles, or equivalent)
- The following tools installed:
- The following from Scale:
- The SGP Azure Infrastructure Terraform modules (
azure-terraform/infra) - A
workspace_idandregistration_secretunique to your deployment
- The SGP Azure Infrastructure Terraform modules (
- A new application configured in your identity provider to authenticate to the SGP platform (SAML or OIDC) (optional)
- A custom domain for your deployment (optional)
Installation
Step 1: Build Configuration
Configuration is split across three files. This allows you to reuse the same configuration for multiple environments.File 1: main.tfvars.json
This file selects which configuration to load. Edit it to point at your customer and environment before running Terraform.
| Field | Description | Allowed values |
|---|---|---|
environment_type | Environment tier | dev, qa, staging, uat, prod |
domain_code | Customer identifier (3–9 alphanumeric chars/hyphens) | e.g. acme, contoso |
location | Azure region | e.g. eastus2, northeurope, southeastasia |
File 2: config/<domain_code>/default.yaml
Customer-wide baseline settings that apply to all environments unless overridden. This file is the right place for stable policy and posture decisions: tenant identity, tagging standards, and security baselines for Key Vault, PostgreSQL, Redis, Storage, and other services.
File 3: config/<domain_code>/<location>/<environment_type>.yaml
Environment-specific configuration. This is where you set everything that differs per environment: resource names, subscription, CIDRs, feature flags, node pool sizing, and bootstrapping state.
Naming constraints for Azure resources:
- Key Vault names: 3–24 alphanumeric characters and hyphens, globally unique
- Storage Account names: 3–24 lowercase letters and numbers only (no hyphens), globally unique
- PostgreSQL and Redis names: globally unique within Azure
- All names must remain stable after first apply — many Azure resources cannot be renamed
Step 2: Provision Infrastructure via Terraform
Navigate to theinfra directory and initialize:
main.tfvars.json file you configured in the previous step:
Step 3: Bootstrap the Cluster
The Azure infrastructure automatically bootstraps SGP System Manager via an Azure Deployment Script. Whenbootstrapping.enabled: true is set in your configuration, Terraform provisions an Azure Container Instance that:
- Installs Flux CD on the AKS cluster (using Azure Managed Flux if
use_managed_flux: true) - Applies the System Manager
HelmRepositoryandHelmReleaseFlux CRDs - Waits for System Manager to reconcile
Accessing the Private AKS Cluster
Because the AKS cluster is private by default, you must access it from within the provisioned VNet. Two options are provided: Option A: From the jump host VM (via Azure Bastion) The Bastion host and jump host VM are provisioned whenbastion.create: true. Connect via the Azure Portal (Bastion blade) or using the helper script:
az aks command invoke
When aks.run_command_enabled: true, you can run kubectl commands without VPN access:
Step 4: Configure DNS
Afterterraform apply completes, retrieve the Front Door endpoint hostname:
deployment_url to the Front Door endpoint (the azurefd.net hostname from the output above).
If using Azure DNS (the DNS zone is managed by Terraform when
frontdoor.create: true), CNAME records are created automatically. Verify with:Step 5: Verify the Deployment
Wait for all services to be ready:bootstrapping.desiredState value in your environment YAML is written to a secret in Azure Key Vault during terraform apply, and System Manager reads from that secret at runtime. If a HelmRelease shows Ready=False, check its events:
Step 6: Configure Identity Provider
SAML Configuration
SetauthType: "SAML" in your environment YAML, then configure your Identity Provider with:
- Service Entity ID:
https://auth.<deployment_url> - Redirect URI:
https://auth.<deployment_url>/dashboard/org/saml/callback
is-saml-secret secret in Key Vault (or via System Manager GUI):
OIDC Configuration
SetauthType: "OIDC" in your environment YAML, then configure your Identity Provider with:
- Redirect URI:
https://auth.<deployment_url>/dashboard/org/oidc/callback
is-oidc-secret secret in Key Vault (or via System Manager GUI):
Accessing the Platform
If all goes smoothly, you should be able to navigate to the SGP platform athttps://<workspace_id>.workspace.egp.scale.com (or your custom domain) and authenticate via the configured identity provider.
