Terraformで.NETエージェントをインストール
本手順では、Terraformを使用してAzureにデプロイする際に、Contrastの.NET Frameworkエージェントおよび.NET Coreエージェントをインストールする方法について説明します。この手順は、ご利用の環境に合わせてカスタマイズする必要がある場合があります。
ContrastエージェントをAzure App Serviceにデプロイするのに最適な方法は、サイト拡張です。これは、Azure Portal、ARMポリシー、またはAzure APIを使用する必要があります。本手順で説明するTerraformでのインストール方法は、後者の2つの方法を直接または間接的に使用します。
開始する前に
Azure App Serviceで実行する.NET Frameworkや.NET Coreエージェントに対して、利用するOSやランタイムスタックが Contrastでサポートされていることを確認してください。
以下の要件を満たしていることを確認してください。
Contrastへのログインアクセスがあること
TerraformとAzure CLIがインストールされているシステムへのコンソールアクセスがあること
Azure CLIの
az login
も含む、Azure Portalへのログインアクセスがあること本手順のコマンドを実行するシステムにPythonがインストールされていること
Azure App Serviceの一部としてContrastエージェントが含まれていること
手順 1:エージェントを設定
Contrastからエージェントの設定ファイルをダウンロードします。
Contrast Webインターフェイスで、新規登録を選択します。
「アプリケーション」のカードを選択します。
使用するエージェントを選択し、表示されている手順に従って、YAML設定ファイルをダウンロードします。
YAML設定ファイルに、以下の値を設定します。
.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.dllCORECLR_PROFILER_PATH_64: D:\\home\\SiteExtensions\\Contrast.NetCore.Azure.SiteExtension\\ContrastNetCoreAppService\\\contrast\\runtimes\\win-x64\\native\\ContrastProfiler.dll
.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.dllCOR_PROFILER_PATH_64: D:\\home\\SiteExtensions\\Contrast.NET.Azure.SiteExtension\\ContrastAppService\\ContrastProfiler-64.dll
手順 2:Terraformでサイト拡張を設定
サイト拡張のデプロイは、Azure Portalか、ARMポリシー、またはAzure APIを使用してのみ標準にサポートされているため、Terraformはサイト拡張を追加や削除するための便利なコマンドラインメソッドです。以下の例に示すように、ARMポリシーを使用して拡張機能を設定します。
以下の手順で、アプリケーションにContrastエージェントを組み込みます。
手順1で準備したYAML設定ファイルの名前が、
contrast_security.yaml
であることを確認します。Terraformをこちらよりインストールします:https://www.terraform.io/downloads.html
以下のコマンドでPyYAMLをインストールします。
pip install PyYAML
Azure CLIツールをこちらよりインストールします:https://docs.microsoft.com/en-us/cli/azure/install-azure-cli
az login
を使用して、Azureにログインし、認証情報がキャッシュできることを確認します。YAMLをパースする以下のスクリプト
parseyaml.py
を使用して、ContrastのYAMLファイルから値を抜き出し、プロビジョニングされたAzure App Serviceにそれらの値を追加します。import yaml, jsonwith 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" }