doc/user/content/self-managed-deployments/deployment-guidelines/azure-deployment-guidelines.md
As a general guideline, we recommend:
When operating on Azure in production, we recommend Epdsv6 sizes Azure VM Types with Local NVMe Disk:
| VM Size | vCPUs | Memory | Ephemeral Disk | Disk-to-RAM Ratio |
|---|---|---|---|---|
| Standard_E2pds_v6 | 2 | 16 GiB | 75 GiB | ~4.7:1 |
| Standard_E4pds_v6 | 4 | 32 GiB | 150 GiB | ~4.7:1 |
| Standard_E8pds_v6 | 8 | 64 GiB | 300 GiB | ~4.7:1 |
| Standard_E16pds_v6 | 16 | 128 GiB | 600 GiB | ~4.7:1 |
| Standard_E32pds_v6 | 32 | 256 GiB | 1,200 GiB | ~4.7:1 |
{{< warning >}}
These VM types provide <red>ephemeral</red> local NVMe SSD disks. Data is <red>lost</red> when the VM is stopped or deleted.
{{</ warning >}}
Configuring swap on nodes to use locally-attached NVMe storage allows Materialize to spill to disk when operating on datasets larger than main memory. This setup can provide significant cost savings and provides a more graceful degradation rather than OOMing. Network-attached storage (like EBS volumes) can significantly degrade performance and is not supported.
{{< tabs >}} {{< tab "New Terraform" >}}
The new Materialize Terraform module supports configuring swap out of the box.
{{< /tab >}} {{< tab "Legacy Terraform" >}}
The Legacy Terraform provider, adds preliminary swap support in v0.6.1, via the swap_enabled variable.
With this change, the Terraform:
See Upgrade Notes.
{{< note >}}
If deploying v25.2, Materialize clusters will not automatically use swap unless they are configured with a memory_request less than their memory_limit. In v26, this will be handled automatically.
{{< /note >}}
{{< /tab >}} {{< /tabs >}}
Materialize writes block blobs on Azure. As a general guideline, we recommend Premium block blob storage accounts.
When running with TLS in production, run with certificates from an official Certificate Authority (CA) rather than self-signed certificates.
{{< include-md file="shared-content/self-managed/general-rules-for-upgrades.md"
}}