Skip to main content

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:エージェントを設定

  1. Contrastからエージェントの設定ファイルをダウンロードします。

    1. Contrast Webインターフェイスで、新規登録を選択します。

    2. 「アプリケーション」のカードを選択します。

    3. 使用するエージェントを選択し、表示されている手順に従って、YAML設定ファイルをダウンロードします。

  2. 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. 手順1で準備したYAML設定ファイルの名前が、contrast_security.yamlであることを確認します。

  2. Terraformをこちらよりインストールします:https://www.terraform.io/downloads.html

  3. 以下のコマンドでPyYAMLをインストールします。

    pip install PyYAML
  4. Azure CLIツールをこちらよりインストールします:https://docs.microsoft.com/en-us/cli/azure/install-azure-cli

  5. az loginを使用して、Azureにログインし、認証情報がキャッシュできることを確認します。

  6. 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']))
  7. 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"
    }