.NETエージェントとTerraform

  • 更新

エージェントインストールガイド

概要

ここでは、Terraformを使用してAzureにデプロイする際に、Contrastの.NET Frameworkエージェントおよび.NET Coreエージェントを使用する方法について紹介します。本項を参考にご利用の環境に合わせた方法で、アプリケーションにContrastエージェントをインストールし、必要に応じてチーム内で共有してください。

 

主な手順

  1. Contrastエージェントの設定を指定
  2. 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ポリシーを使用して拡張機能を設定します。

  • 手順1で準備した、YAML設定ファイルを使用します。ファイル名が、contrast_security.yamlであることを確認してください。
  • Terraformをこちらよりインストールします: https://www.terraform.io/downloads.html
  • PyYAMLをインストールします(pip install pyyamlを使用)。
  • Azure CLIツールをインストールします:https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli
  • az loginを使用してAzureにログインし、認証情報がキャッシュできることを確認します。
  • YAMLをパースする以下のスクリプトparseyaml.pyを使用して、ContrastのYAMLファイルから値を抜き出し、プロビジョニングされたAzure App Serviceにそれらの値を追加します。
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"
}

この記事は役に立ちましたか?

0人中0人がこの記事が役に立ったと言っています

他にご質問がございましたら、リクエストを送信してください