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

The integration is designed to be run once per Azure subscription and the Upwind platform uses the subscription as a way to group together Azure Container App resources.

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.

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