エージェントインストールガイド
概要
ここでは、Terraformを使用してAzureにデプロイする際に、Contrastの.NET Frameworkエージェントおよび.NET Coreエージェントを使用する方法について紹介します。本項を参考にご利用の環境に合わせた方法で、アプリケーションにContrastエージェントをインストールし、必要に応じてチーム内で共有してください。
主な手順
- Contrastエージェントの設定を指定
- Terraformでサイト拡張を設定しアプリケーションにContrastエージェントを組み込む
サポート対象のテクノロジ
作業を開始する前に、Azure App Serviceで実行する.NET Frameworkや.NET Coreエージェントに対して、利用するOSやランタイムスタックがContrastでサポートされていることを確認してください:
.NET Frameworkエージェントのサポート対象テクノロジ
.NET Coreエージェントのサポート対象テクノロジ
本項は以下を前提としております:
- Contrastへのログインアクセスがあること
- TerraformとAzure CLIがインストールされているシステムへのコンソールアクセスがあること
- Azure CLIからのaz loginも含め、Azure Portalへのログインアクセスがあること
- これらのコマンドが実行されるシステムにPythonがインストールされていること
- これまでContrastエージェントがAzure App Serviceの一部であったこと。詳細については、関連記事を参照してください:.NETエージェントとAzure App Service
既知の問題
ContrastエージェントをAzure App Serviceにデプロイする方法はサイト拡張が最適ですが、これは、Azure Portal、ARMポリシー、またはAzure APIからのみしか設定できません。本項で説明するTerraformでの方法は、後者の2つの方法を直接または間接的に使用します。
ARMポリシーとテンプレートの使用については、こちらの関連記事をご覧ください:.NETエージェントとAzure ARM
手順
まず、アプリケーションでContrastエージェントの設定を指定します。
1. Contrastエージェントの設定
Contrastからエージェントの設定ファイルをダウンロードする必要があります。まず、Contrast UIで「エージェントの追加」を選択して、表示される手順に従って値を取得し、YAML設定ファイルをダウンロードします。
エージェントの設定には、最低限以下の値を設定することをお勧めします。使用している.NETエージェントの設定ファイルに、以下のキーと値をペアにして追加します(キーと値は正確にコピーしてください)。
.NET Frameworkエージェントの場合:
COR_ENABLE_PROFILING: 1 COR_PROFILER: {EFEB8EE0-6D39-4347-A5FE-4D0C88BC5BC1} COR_PROFILER_PATH_32: D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\ContrastProfiler-32.dll COR_PROFILER_PATH_64: D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\ContrastProfiler-64.dll
|
.NET Coreエージェントの場合:
CORECLR_ENABLE_PROFILING: 1 CORECLR_PROFILER: {8B2CE134-0948-48CA-A4B2-80DDAD9F5791} CORECLR_PROFILER_PATH_32: D:\\home\\SiteExtensions\\Contrast.NetCore.Azure.SiteExtension\\ContrastNetCoreAppService\\contrast\\runtimes\\win-x86\\native\\ContrastProfiler.dll CORECLR_PROFILER_PATH_64: D:\\home\\SiteExtensions\\Contrast.NetCore.Azure.SiteExtension\\ContrastNetCoreAppService\\\contrast\\runtimes\\win-x64\\native\\ContrastProfiler.dll
|
2. Terraformでサイト拡張を設定
サイト拡張のデプロイは、Azure PortalかAzure ARMポリシー、またはAzure APIでのみ標準でサポートされるため、Terraformはサイト拡張を追加や削除するための便利なコマンドラインメソッドです。以下の例に示すように、ARMポリシーを使用して拡張機能を設定します。
import yaml, json with open('./contrast_security.yaml') as f: config = yaml.load(f) print(json.dumps(config['api']))
|
- main.tfというTerraformのドキュメントを以下のように修正します。
provider "azurerm" { features {} } # Create a resource group resource "azurerm_resource_group" "personal" { name = <name> location = <location> } # Create an app service plan resource "azurerm_app_service_plan" "app_service-plan" { name = <name> resource_group_name = azurerm_resource_group.personal.name location = <location> } # Create an app service resource "azurerm_app_service" "app_service" { name = <name> location = <location> resource_group_name = azurerm_resource_group.personal.name app_service_plan_id =azurerm_app_service_plan.app_service-plan.id site_config { dotnet_framework_version = "v4.0" default_documents = ["Default.aspx"] } # CONTRAST .NET FRAMEWORK AGENT SETUP # Contrast env vars will be passed to the app service here. app_settings = { "COR_ENABLE_PROFILING" = "1" "COR_PROFILER" = "{EFEB8EE0-6D39-4347-A5FE-4D0C88BC5BC1}" "COR_PROFILER_PATH_32" = "D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\ContrastProfiler-32.dll" "COR_PROFILER_PATH_64" = "D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\ContrastProfiler-64.dll" "CONTRAST_INSTALL_DIRECTORY" = "D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\" "CONTRAST__API__URL" = data.external.yaml.result.url "CONTRAST__API__USER_NAME" = data.external.yaml.result.user_name "CONTRAST__API__SERVICE_KEY" = data.external.yaml.result.service_key "CONTRAST__API__API_KEY" = data.external.yaml.result.api_key # USE THESE SETTING FOR .NET CORE AGENT #”CORECLR_ENABLE_PROFILING” = 1 #”CORECLR_PROFILER” = {8B2CE134-0948-48CA-A4B2-80DDAD9F5791} #”CORECLR_PROFILER_PATH_32” = D:\\home\\SiteExtensions\\Contrast.NetCore.Azure.SiteExtension\\ContrastNetCoreAppService\\contrast\\runtimes\\win-x86\\native\\ContrastProfiler.dll #”CORECLR_PROFILER_PATH_64” = D:\\home\\SiteExtensions\\Contrast.NetCore.Azure.SiteExtension\\ContrastNetCoreAppService\\\contrast\\runtimes\\win-x64\\native\\ContrastProfiler.dll } } #Extract the connection from the normal yaml file to pass to the app container data "external" "yaml" { program = [var.python_binary, "${path.module}/parseyaml.py"] } # Deploy the extension template resource "azurerm_template_deployment" "extension" { name = <name> resource_group_name = <resource_group_name> template_body = <<BODY { "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "siteName": { "type": "string", "metadata": { "description": "The Azure App Service Name" } }, "extensionName": { "type": "string", "metadata": { "description": "The Site Extension Name." } } }, "resources": [ { "type": "Microsoft.Web/sites/siteextensions", "name": "[concat(parameters('siteName'), '/', parameters('extensionName'))]", "apiVersion": "2019-08-01", "location": "[resourceGroup().location]" } ] } BODY parameters = { "siteName" = azurerm_app_service.<app_service>.name #.NET Framework "extensionName" = "Contrast.NET.Azure.SiteExtension" #.NET Core # "extensionName" = "Contrast.NetCore.Azure.SiteExtension" } deployment_mode = "Incremental" }
|