Skip to main content

Installation

Requirements​

  • Terraform >= 1.3.0
  • Azure Provider (azurerm) >= 4.31.0
  • Azure subscription with appropriate permissions
  • Log Analytics Workspace for Container App Environment

Deploy one Cluster Manager per Azure Virtual Network (VNet) - not per subscription and not per resource group. The Cluster Manager is a network-reachability boundary: every application container that reports traces to it must be able to reach it over the network, and that reachability is scoped by the VNet, not by subscription or resource group.

note

By default, each Container App Environment gets its own Cluster Manager. Sharing a single Cluster Manager across multiple Container App Environments in the same VNet is an opt-in optimization - it requires VNet Integration - and is not the default behavior.

Installation​

To deploy Upwind components on Azure Container Apps the recommended approach is to utilize the Terraform module that we maintain. The module deploys the Upwind Cluster Manager with the tracer embedded, along with supporting infrastructure.

  1. Log in to the Upwind Management Console .
  2. Select the + (plus) symbol at the top of the screen and select Connect Azure Container App.
  3. Enter the subscription ID where your Container Apps are deployed.
  4. Under Sensor credentials, click Generate to create a new client ID and client secret. Provide a name and click Generate. If you already have Sensor credentials, you may skip this step and select existing credentials from the list.
provider "azurerm" {
features {}
subscription_id = "{SUBSCRIPTION_ID}"
}

module "upwind_integration_azure_container_app" {
source = "https://get.upwind.io/terraform/modules/azure-onboarding/azure-container-app-latest.tar.gz"

resource_group_name = "{RESOURCE_GROUP_NAME}"
container_app_environment_name = "{CONTAINER_APP_ENVIRONMENT_NAME}"

upwind_client_id = "{UPWIND_CLIENT_ID}"
upwind_client_secret = "{UPWIND_CLIENT_SECRET}"
}

Installation with VNet Integration (Optional)​

To optionally deploy the cluster manager into an existing VNet, add the infrastructure_subnet_id parameter with your subnet ID. The subnet must have a minimum /23 CIDR range and be delegated to Microsoft.App/environments.

For App Service workloads to send traces to the cluster manager, you may also need:

  • internal_load_balancer_enabled - Removes the public endpoint so the cluster manager is only accessible within the VNet
  • create_private_dns_zone - Creates a private DNS zone linked to the VNet so App Services can resolve the cluster manager's internal hostname
note

Container App Environment VNet integration must be configured at creation time. An existing environment cannot be moved into a VNet.

What Gets Deployed​

The module creates the following resources:

  1. Resource Group (optional): Container for all Upwind resources
  2. Key Vault: Stores Upwind credentials securely
  3. Container App Environment: Managed environment with a dedicated workload profile (D4)
  4. Cluster Manager Container App:
    • Runs the Upwind cluster agent with the tracer embedded
    • Configured with 4 CPU and 8GB memory
    • Exposes an HTTP2 ingress endpoint for receiving traces from application containers
    • Auto-scales between 1-3 replicas based on demand

The cluster manager is deployed with the Upwind tracer embedded in the container, allowing it to trace its own operations while also serving as the collection endpoint for traces from your application containers.

note

The resource group is only an organizational container for these resources - it has no bearing on which Cluster Manager a workload should report to. That scope is determined by the VNet, as described above.

Configuration​

Input Variables​

NameDescriptionTypeDefaultRequired
resource_group_nameThe name of the resource groupstringn/a✅
container_app_environment_nameName of an existing Container App Environment to deploy intostringn/a✅
upwind_client_idUpwind Client IDstringn/a✅
upwind_client_secretUpwind Client Secretstringn/a✅
nameThe name of the application. Used as a prefix for resource namesstring"upwind-cluster-manager"❌
locationThe Azure location where resources will be created. If not provided, derived from the Container App Environmentstringnull❌
createDetermines whether resources will be createdbooltrue❌
tagsA map of tags to add to all resourcesmap(string){}❌
create_resource_groupWhether to create a resource group for the applicationboolfalse❌
resource_group_idThe ID of an existing resource group, if create_resource_group is falsestringnull❌
current_identity_object_idThe object ID of the current identity executing terraform, used for Key Vault access policiesstringnull❌
create_secretWhether to create a secret for Upwind credentials. If false, key_vault_id must be providedbooltrue❌
key_vault_idThe ID of an existing Key Vault to use for storing secretsstringnull❌
upwind_auth_endpointAuthentication endpoint for Upwind platformstring"https://oauth.upwind.io/oauth/token"❌
upwind_api_hostAPI host for Upwind platformstring"https://agent.upwind.io"❌
registry_urlDocker registry URL for Upwind imagesstring"registry.upwind.io"❌
registry_usernameUsername for the Docker registry. If not provided, credentials are obtained automaticallystringnull❌
registry_passwordPassword for the Docker registry. If not provided, credentials are obtained automaticallystringnull❌
container_app_portThe port that the container application listens onnumber8082❌
create_cluster_managerWhether to create the Upwind Cluster Managerbooltrue❌
image_cluster_managerCluster manager image configurationobject({ registry = string, repository = string, tag = string })See module defaults❌
cluster_manager_extra_envAdditional environment variables for cluster managermap(string){}❌
cluster_manager_external_ingressWhether to enable external ingress for the cluster managerboolfalse❌
infrastructure_subnet_idSubnet ID for VNet integration. Subnet must have /23 CIDR and be delegated to Microsoft.App/environmentsstringnull❌
internal_load_balancer_enabledEnable internal load balancer (no public endpoint). Requires infrastructure_subnet_idboolfalse❌
create_private_dns_zoneCreate private DNS zone for App Service connectivity. Requires infrastructure_subnet_idboolfalse❌
log_analytics_workspace_idLog Analytics workspace ID for monitoringstringnull❌
enable_diagnostic_settingsEnable diagnostic settingsbooltrue❌
create_acr_cacheCreate an Azure Container Registry with pull-through cache for ECR public imagesbooltrue❌
acr_nameName for the Azure Container Registry. Must be globally unique, 5-50 characters, alphanumeric onlystringnull❌
acr_idThe ID of an existing Azure Container Registry to use. Set create_acr_cache = false when using thisstringnull❌
existing_acr_login_serverThe login server URL of an existing ACR. Required when acr_id is providedstringnull❌
existing_acr_pull_identity_idThe ID of an existing managed identity with AcrPull role. Required when acr_id is providedstringnull❌

Outputs​

NameDescription
cluster_manager_fqdnThe FQDN of the cluster manager container app
cluster_manager_urlThe full URL of the cluster manager
key_vault_idThe ID of the Key Vault used for secrets