Azure locations configuration

Learn how to configure load generators on your private Azure portal.

Instance specifications

We recommend that you use for your own load generator instances with at least 4 cores.

As a result, we recommend using Standard_A4_v2 instances or larger.

You might want to tune the Xmx JVM options to half of the physical memory. See jvm-options configuration below. If you don’t, the JVM will use a max heap size of 1/4th of the physical memory.


Azure private locations require the control plane to have credentials configured in order to instantiate virtual machines and associated resources.

Those can be set through environment variables in your control plane or via Azure RBAC. Select the most appropriated method depending on your infrastructure, or check our installation guide for deployment with Azure Container Apps.

Environment variables

name value
AZURE_CLIENT_SECRET Client secret key

Check Azure documentation pages to find these values:

System requirements

Azure private locations rely on some dependencies.

So when using a custom image, make sure following are available:

Control plane configuration file

control-plane {
  # Control plane token
  token = "cpt_example_c7oze5djp3u14a5xqjanh..."
  # Control plane token with an environment variable
  # Control plane description (optional)
  description = "my control plane description"
  # Locations configurations
  locations = [
      # Private location ID, must be prefixed by prl_, only consist of numbers 0-9, 
      # lowercase letters a-z, and underscores, with a max length of 30 characters
      id = "prl_private_location_example"
      # Private location description (optional)
      description = "Private Location on Azure"
      # Private location type
      type = "azure"
      # Azure location name, as listed by Azure CLI:
      # az account list-locations -o table
      region = "westeurope"
      # Virtual machine size, as listed by Azure CLI:
      # az vm list-sizes --location "westeurope"
      size = "Standard_A4_v2"
      # Certified AMI configuration
      image {
        type = "certified"
        java = "latest" # Possible values : 11, 17, 21 or latest
      # Azure subscription id as returned by Azure CLI:
      # az account show
      subscription = "<MySubscription UUID>"
      # Full identifier of Azure Virtual Network to use for your load generators
      # Use "id" field as returned by Azure CLI:
      # az network vnet list
      network-id = "/subscriptions/<MySubscription UUID>/resourceGroups/<MyResourceGroup>/providers/Microsoft.Network/virtualNetworks/<MyVNet>"
      # Subnet belonging to previously defined virtual network
      # Use "" as returned by Azure CLI:
      # az network vnet subnet list --resource-group MyResourceGroup --vnet-name MyVNet
      subnet-name = "default"
      # Associate a public IP to network interface (optional)
      associate-public-ip = true
      # Java configuration (following configuration properties are optional)
      # System properties (optional)
      system-properties {
        # ExampleKey = ExampleValue
      # Overwrite JAVA_HOME definition (optional)
      # java-home = "/usr/lib/jvm/zulu"
      # JVM Options (optional)
      # Default ones, that can be overridden with precedence:
      # [
      #   "-XX:MaxInlineLevel=20", 
      #   "-XX:MaxTrivialSize=12", 
      #   "-XX:+IgnoreUnrecognizedVMOptions", 
      #   "--add-opens=java.base/java.nio=ALL-UNNAMED", 
      #   "--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED"
      # ]
      #  Based on your instance configuration, you may want to update Xmx and Xms values.
      # jvm-options = ["-Xmx4G", "-Xms512M"]

Edit this page on GitHub