Install .NET agents with Azure Resource Manager
This topic describes the most popular methods for instrumenting .NET Framework and .NET Core applications through automation with Azure Resource Manager (ARM) templates and Azure.
You can only configure site extensions either directly through the Azure Portal with an ARM policy or through Azure’s REST API. All methods described in this topic use one of these methods. Only REST API and Azure ARM policies allow for automated deployments.
Before you begin
Verify that Contrast supports your preferred OS and runtime stack for the .NET Framework and .NET Core agents
Ensure you have login access to Contrast.
Only configure a Contrast site extension with backend HTTP services and not WebJobs or UI app services.
The methods in this topic do not work if you are deploying an App service using Docker.
Step 1: Download an agent configuration file
Download a configuration file from Contrast.
In the Contrast web interface, select Add New.
Select the Application card.
Follow the displayed instructions to get the required values and download a YAML configuration file.
To automate your ARM templates more fully, get your Contrast API credentials, either from the
contrast_security.yml
file that you downloaded or from the Contrast web interface (user menu > Organization Settings > Agent). These credentials are:Configuration setting
Contrast label
CONTRAST__API__API_KEY
API Key
CONTRAST__API__URL
Contrast Agent URL
CONTRAST__API__USER_NAME
Contrast Agent Username
CONTRAST__API__SERVICE_KEY
Agent Service Key
Step 2: Edit the ARM template
Add the highlighted Contrast configuration values to the ARM template, as shown in the following examples.
.NET Core-specific configuration and .NET Framework-specific configuration provide additional configuration details.
.NET Core
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "sites_name": { "defaultValue": "APP_NAME", "type": "String" } }, "variables": { }, "resources": [ { "type": "Microsoft.Web/sites", "apiVersion": "2018-11-01", "name": "[parameters('sites_name')]", "location": "East US", "kind": "app", "properties": { "siteConfig": { "appSettings": [ { "name": "CONTRAST__API__API_KEY", "value": "<CONTRAST__API__API_KEY>", "slotSetting": false }, { "name": "CONTRAST__API__SERVICE_KEY", "value": "<CONTRAST__API__SERVICE_KEY>", "slotSetting": false }, { "name": "CONTRAST__API__URL", "value": "<CONTRAST__API__URL>", "slotSetting": false }, { "name": "CONTRAST__API__USER_NAME", "value": "<CONTRAST__API__USER_NAME>", "slotSetting": false }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1", "slotSetting": false }, { "name": "CORECLR_PROFILER", "value": "{8B2CE134-0948-48CA-A4B2-80DDAD9F5791}", "slotSetting": false }, { "name": "CORECLR_PROFILER_PATH_32", "value": D:\\home\\SiteExtensions\\Contrast.NetCore.Azure.SiteExtension\\ContrastNetCoreAppService\\contrast\\runtimes\\win-x86\\native\\ContrastProfiler.dll", "slotSetting": false }, { "name": "CORECLR_PROFILER_PATH_64", "value": D:\\home\\SiteExtensions\\Contrast.NetCore.Azure.SiteExtension\\ContrastNetCoreAppService\\\contrast\\runtimes\\win-x64\\native\\ContrastProfiler.dll", "slotSetting": false } ] } }, "resources": [ { "name": "Contrast.NetCore.Azure.SiteExtension", "type": "siteextensions", "apiVersion": "2018-02-01", "dependsOn": [ "[resourceId('Microsoft.Web/Sites', parameters('sites_name'))]" ] } ] } ] }
.NET Framework
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "sites_name": { "defaultValue": "APP_NAME", "type": "String" } }, "variables": { }, "resources": [ { "type": "Microsoft.Web/sites", "apiVersion": "2018-11-01", "name": "[parameters('sites_name')]", "location": "East US", "kind": "app", "properties": { "siteConfig": { "appSettings": [ { "name": "CONTRAST__API__API_KEY", "value": "<CONTRAST__API__API_KEY>", "slotSetting": false }, { "name": "CONTRAST__API__SERVICE_KEY", "value": "<CONTRAST__API__SERVICE_KEY>", "slotSetting": false }, { "name": "CONTRAST__API__URL", "value": "<CONTRAST__API__URL>", "slotSetting": false }, { "name": "CONTRAST__API__USER_NAME", "value": "<CONTRAST__API__USER_NAME>", "slotSetting": false }, { "name": "COR_ENABLE_PROFILING", "value": "1", "slotSetting": false }, { "name": "COR_PROFILER", "value": "{EFEB8EE0-6D39-4347-A5FE-4D0C88BC5BC1}", "slotSetting": false }, { "name": "COR_PROFILER_PATH_32", "value": "D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\ContrastProfiler-32.dll", "slotSetting": false }, { "name": "COR_PROFILER_PATH_64", "value": "D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\ContrastProfiler-64.dll", "slotSetting": false } ] } }, "resources": [ { "name": "Contrast.NET.Azure.SiteExtension", "type": "siteextensions", "apiVersion": "2018-02-01", "dependsOn": [ "[resourceId('Microsoft.Web/Sites', parameters('sites_name'))]" ] } ] } ] }
Step 3: Deploy the application from the ARM template
Use one of these methods in the Azure documentation:
Command line or CLI: Use ARM deployment templates with Azure CLI.
Azure Portal: Edit and deploy ARM templates.