For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Trust CenterStatusSupportGet a demoPlatform
DocumentationEvals API ReferenceIntegrations & OTELPlatform SettingsSelf-HostingChangelog
DocumentationEvals API ReferenceIntegrations & OTELPlatform SettingsSelf-HostingChangelog
    • Self-Hosting
    • Security & Compliance
  • AWS Deployment
    • Overview
    • Quickstart
    • Requirements
  • Azure Deployment
    • Overview
    • Quickstart
    • Requirements
  • GCP Deployment
    • Overview
    • Quickstart
    • Requirements
LogoLogo
Trust CenterStatusSupportGet a demoPlatform
On this page
  • Overview
  • Core components
  • Get started
  • Next steps
Azure Deployment

Quickstart

Was this page helpful?
Previous

Requirements

Next
Built with

Overview

This is the streamlined setup guide for getting Confident AI running on Azure. It covers cloning the repository, configuring variables, provisioning infrastructure with Terraform, and deploying workloads via ArgoCD.

If you want detailed explanations of each step, see the step-by-step guide instead. This page assumes you already have the required tools installed and Azure credentials configured — see Requirements and Prerequisites for details.

Core components

All cloud resources are defined in .tf (Terraform) files in the azure directory:

VNet & Networking

AKS/database/public/private-endpoint subnets with NAT Gateway, NSG, and Private DNS Zone.

AKS Cluster

Managed Kubernetes with autoscaling node pools and Workload Identity.

Bastion Host

Secure jump host for accessing private resources inside the VNet.

PostgreSQL Flexible Server

Managed database in a delegated subnet with automated backups and encryption.

cert-manager + Let's Encrypt

Automated TLS certificate management for HTTPS termination via NGINX Ingress.

Blob Storage

Private Storage Account with private endpoint for application data.

ECR cross-account credentials are only used for syncing image pull secrets into the AKS cluster — it handles cross-cloud image pull credentials, not hosting your own images.

Get started

1

Clone the repository

$git clone git@github.com:confident-ai/confident-terraform.git
$cd confident-terraform/azure
2

Configure your variables

Copy an environment template and save it as terraform.tfvars:

$# For staging
$cp vars/staging.vars terraform.tfvars
$
$# For production
$cp vars/production.vars terraform.tfvars

Open terraform.tfvars and set the following variables:

VariableDescription
confident_psql_db_nameDatabase name
confident_psql_usernameDatabase username
confident_psql_passwordDatabase password
confident_better_auth_secretAuth token signing secret
confident_better_auth_trusted_originsAllowed authenticated request origins
confident_google_client_idGoogle OAuth Client ID
confident_google_client_secretGoogle OAuth Client Secret
confident_subdomainRoot domain for cookies
confident_frontend_urlDashboard URL (e.g., https://app.yourdomain.com)
confident_backend_urlAPI URL (e.g., https://api.yourdomain.com)
confident_clickhouse_passwordClickHouse analytics DB password
confident_public_aksWhether AKS API is publicly accessible
argocd_admin_passwordArgoCD dashboard admin password
ecr_aws_access_key_idECR cross-account access key
ecr_aws_secret_access_keyECR cross-account secret key
ecr_aws_account_idECR AWS account ID
ecr_aws_regionECR AWS region
code_executor_aci_enabledToggle for ACI code executor
code_executor_aci_image_uriACI code executor image URI

ACI code executor image: First pull the image from 128045499490.dkr.ecr.us-east-1.amazonaws.com/confident-code-sandbox-aci:<tag>, push it to your own Azure Container Registry, then use its URI in code_executor_aci_image_uri. Azure Container Instances requires the image to be in your subscription’s private ACR.

For detailed explanations of each variable, see the Configuration page.

3

Provision infrastructure

$terraform init
$terraform apply

Approve when prompted. This takes 15-25 minutes and provisions the VNet, AKS cluster, PostgreSQL Flexible Server, Storage Account, Key Vault, managed identities, and Helm releases.

4

Set up External Secrets

External Secrets syncs credentials from Azure Key Vault into Kubernetes.

Edit app/base/common/external-secrets/external-secrets.yaml and update the key field for each secret block. Set it based on your confident_environment variable:

  • Staging: confidentai-stage-confident-secret
  • Production: confidentai-prod-confident-secret

Then in app/base/common/secret-store/secret-store.yaml, update the vaultUrl: field to match your Key Vault URI (from terraform output key_vault_uri).

5

Configure Ingress and TLS certificate

In app/base/network/ingress.yaml, update the annotations block with your cert-manager ClusterIssuer and ingress class:

1annotations:
2 cert-manager.io/cluster-issuer: letsencrypt-prod
3 kubernetes.io/ingress.class: nginx

Unlike AWS (which uses ACM), Azure deployments use cert-manager with Let’s Encrypt. Create a ClusterIssuer resource first — see TLS Certificates for the manifest. Ensure your NGINX Ingress controller is reachable from Let’s Encrypt for HTTP-01 challenges.

6

Set up ArgoCD for deployments

ArgoCD installation via Terraform is enabled in helm-charts.tf (lines 69-104). If the Terraform runner’s context window is exceeded, you’ll need to install ArgoCD manually using Helm.

To install ArgoCD manually:

$helm repo add argo https://argoproj.github.io/argo-helm
$helm repo update
$
$helm install argocd argo/argo-cd \
> --namespace argocd \
> --create-namespace \
> --version 9.4.5 \
> --set server.service.type=LoadBalancer \
> --set server.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-internal"=<true | false> \
> --set server.ingress.enabled=false \
> --set configs.secret.argocdServerAdminPassword='<your_admin_password>'

A few things to keep in mind:

  • Replace <true | false> based on your setup — use false if confident_public_aks is true (internet-facing), otherwise true (internal).
  • Replace <your_admin_password> with the same value you provided to the argocd_admin_password Terraform variable.
  • Make sure you have the correct Azure credentials and kubectl context set for your cluster before running the Helm command.

Once ArgoCD is running:

  1. Get the ArgoCD load balancer URL from terraform output
  2. Log in to ArgoCD in your browser
  3. Connect ArgoCD to the repository
  4. Provide the path to app/argocd/app-of-apps.yaml to start automated deployment of all Kubernetes workloads

ArgoCD deploys everything described in app-of-apps.yaml. You may need to approve access or confirm secrets sync depending on your cluster security settings.

7

Install Datadog in AKS

To install the Datadog Agent on your AKS cluster, use the official Datadog Helm chart:

$helm repo add datadog https://helm.datadoghq.com
$helm repo update
$
$helm install datadog-operator datadog/datadog-operator \
> --namespace datadog \
> --create-namespace \
> --set image.tag=1.2.0 \
> --set clusterName=<your-aks-cluster-name>

Replace <your-aks-cluster-name> with your AKS cluster name (available from terraform output or the Azure portal). Use your actual Datadog API Key and Application Key for authentication.

For further configuration (tags, proxy, extra features), see the Datadog Helm chart documentation.

Done ✅ All major components and workloads are handled via Terraform and ArgoCD (app-of-apps pattern).

Next steps

You’ve completed the quickstart setup. Here’s what to do next:

Verification

Test your deployment end-to-end — DNS, health checks, user login, and SDK connectivity.

Step-by-step Guide

Detailed walkthrough of each deployment step with troubleshooting guidance.