Spice.ai provides multiple deployment options on Microsoft Azure, enabling data and AI applications to run on Azure's global infrastructure. Whether using virtual machines, container orchestration, or serverless containers, Spice deploys to meet requirements for performance, scalability, and cost efficiency.
For a complete list of Azure-compatible data connectors, AI models, and integrations, see Azure Integrations (opens in a new tab).
Run Spice.ai on Azure Kubernetes Service (opens in a new tab) when the workload benefits from Kubernetes orchestration, multi-replica scale, declarative configuration, or shared cluster tenancy. AKS pairs well with the Spice Helm chart (opens in a new tab) and the Argo CD (opens in a new tab) or Flux (opens in a new tab) GitOps workflows.
Provision an AKS cluster with workload identity (opens in a new tab) and the OIDC issuer (opens in a new tab) enabled — both are required for federated credentials to Azure services.
For burst or low-utilization workloads, attach virtual nodes (opens in a new tab) backed by Azure Container Instances. For production, prefer Bicep or Terraform for repeatable provisioning — the Azure Verified Modules (opens in a new tab) library publishes a maintained AKS module.
Most Spice connectors (ABFS, Azure SQL, Key Vault, Azure OpenAI) accept Azure credentials from the environment. Use workload identity (opens in a new tab) so pods receive scoped, federated tokens without static secrets:
Reference the identity from the Helm release so Spice pods inherit federated tokens via the DefaultAzureCredential (opens in a new tab) chain:
For declarative GitOps, swap this command for an Argo CD Application or a Flux HelmRelease pointing at the same chart. See the Argo CD (opens in a new tab) or Flux (opens in a new tab) guides for full manifests.
For stateful acceleration (DuckDB, SQLite, Cayenne):
local-storage StorageClass. Local NVMe does not survive node replacement, so pair with a refresh strategy or a re-hydration source.skuName: PremiumV2_LRS).managed-csi-premium) — use the built-in managed-csi-premium storage class only when Premium SSD v2 is unavailable in a region.azurefile-csi) — not recommended for acceleration — use only for stateless shared artefacts that need . SMB/NFS latency negates the benefit of using a local accelerator.:::tip[Spice.ai Enterprise]
For production stateful workloads, the Spice.ai Enterprise (opens in a new tab) Operator's SpicepodSet (opens in a new tab) provides per-replica StatefulSets with automatic PVC resizing, workload-identity-aware ServiceAccount annotations, and configurable update strategies. For distributed query execution across scheduler/executor tiers backed by Azure Blob Storage, see SpicepodCluster (opens in a new tab).
:::
To expose Spice externally, install the Application Gateway Ingress Controller (AGIC) (opens in a new tab) or use a Standard public Load Balancer (opens in a new tab):
For internal-only deployments, set azure-load-balancer-internal: "true" to bind to the cluster's VNet rather than a public IP.
The Spice Helm chart ships a PodMonitor resource for the Prometheus Operator (opens in a new tab). On AKS, the Azure Monitor managed service for Prometheus (opens in a new tab) and Container insights (opens in a new tab) are the common targets. Set monitoring.podMonitor.enabled: true and import the Spice Grafana dashboard (opens in a new tab) into Azure Managed Grafana (opens in a new tab).
For comprehensive guidance, refer to the Azure Kubernetes Service documentation (opens in a new tab), the AKS baseline architecture (opens in a new tab), and the Spice.ai Kubernetes Deployment Guide (opens in a new tab).
Azure Container Apps (opens in a new tab) is a serverless container platform suitable for HTTP-driven Spice.ai workloads that benefit from scale-to-zero and request-based autoscaling. Use it when a single managed container is sufficient and operating Kubernetes is not desired.
The environment is the security and networking boundary that hosts one or more container apps:
To reach Azure SQL, Storage, or Key Vault behind private endpoints, attach the environment to a VNet-injected subnet (opens in a new tab) by adding --infrastructure-subnet-resource-id and --internal-only true.
Container Apps support both system-assigned and user-assigned managed identities (opens in a new tab). A user-assigned identity is preferred so role assignments survive app recreation:
Mount Azure Files (opens in a new tab) for stateful acceleration, inject secrets from Key Vault (opens in a new tab), and configure HTTP ingress on port 8090:
To run multiple replicas with shared file-based acceleration, define an Azure Files storage mount (opens in a new tab) and reference it from the app's revision template, then point file accelerators at the mount path (for example, duckdb_file: /data/taxi_trips.db).
Spice.ai is HTTP-driven, so the default HTTP scale rule (opens in a new tab) (concurrent requests per replica) is usually sufficient. For background workloads (refresh schedules, ingestion) that should not scale to zero, set --min-replicas 1 and add a custom scale rule (opens in a new tab) backed by a CPU or queue metric:
Configure the liveness and readiness probes (opens in a new tab) to use /health and /v1/ready. Container Apps creates a new revision (opens in a new tab) on each update, supporting traffic splitting between revisions for canary upgrades:
For more details, see the Azure Container Apps documentation (opens in a new tab) and the Spice.ai Docker Deployment Guide (opens in a new tab).
Run Spice.ai as a single container without provisioning a cluster using Azure Container Instances (opens in a new tab). Suitable for development environments, scheduled jobs, and low-traffic deployments.
Refer to the Azure Container Instances documentation (opens in a new tab) for advanced networking, virtual network integration (opens in a new tab), and managed identity (opens in a new tab) configuration.
Deploy Spice.ai directly on Azure Virtual Machines (opens in a new tab) for maximum control over the environment, GPU access, or large-memory instance types.
Manual VM deployment:
spice binary directly. See the installation guide (opens in a new tab).Automated deployment with Bicep or Terraform:
For detailed guidance, refer to the Linux on Azure documentation (opens in a new tab), Bicep documentation (opens in a new tab), and Azure provider for Terraform (opens in a new tab).
Most Azure services that Spice connects to accept explicit credentials through component parameters (for example, an azure_storage_account_key on the ABFS connector (opens in a new tab)). When explicit credentials are not provided, Spice follows the standard Azure Identity DefaultAzureCredential (opens in a new tab) chain, attempting credentials in this order:
Environment variables:
AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET (service principal with secret)AZURE_CLIENT_CERTIFICATE_PATH (service principal with certificate)AZURE_USERNAME, AZURE_PASSWORD (resource owner password — not recommended)Workload Identity (AKS): federated tokens injected via AZURE_FEDERATED_TOKEN_FILE, AZURE_AUTHORITY_HOST, AZURE_CLIENT_ID, and AZURE_TENANT_ID. See Workload Identity for AKS (opens in a new tab).
Managed identity: System-assigned or user-assigned identities on Azure VMs, AKS, Container Apps, and ACI. See What are managed identities? (opens in a new tab).
Azure CLI: Cached credentials from a local az login session. Common during development.
Azure Developer CLI (azd) and : Used when the corresponding CLI is signed in.
For services with explicit parameters (Blob Storage, Azure SQL, Cosmos DB, OpenAI), prefer named credentials or managed identity over environment variables in production.
:::note[Role assignments]
Regardless of the credential source, the principal must have the appropriate Azure role assignments (for example, Storage Blob Data Reader on a storage account, or SQL DB Contributor on Azure SQL). When a Spicepod connects to multiple Azure services, the principal must have permissions across all of them.
:::
Spice.ai is not yet published to the Microsoft Azure Marketplace (opens in a new tab) (coming soon). In the meantime, deploy using the spiceai/spiceai (opens in a new tab) container image or the Spice Helm chart (opens in a new tab).
ReadWriteManystateful.enabled: true and stateful.storageClass: <chosen-class> in values.yaml.