Azure NAT Gateway

learn.microsoft.com
DatabricksからBlob Storageにアクセスしていて、Blob Storage側でアクセス制限が必要になったので、Azure NAT Gatewayが使えそう。公式サイトではPaaSへのアクセス制限はPrivate Linkを推奨しているけど、異なるサブスクリプション間のDataBricksからアクセスなので、NAT Gatewayが第一候補かなと考えている。

rajanieshkaushikk.com

Azure Bastion 構築

参考ドキュメント

docs.microsoft.com

構築検証

Azure Bastion作成

Bastionを接続する仮想ネットに「AzureBastionSubnet」という名前のサブネットが必要
f:id:nori-tech:20200326223055j:plain

仮想ネット

Bastion作成時に生成された仮想ネット構成は次の通り。defaultサブネットに仮想マシンを結線する。
f:id:nori-tech:20200326223217j:plain

仮想マシン

仮想マシンの作成は省略する。接続からBastionを選択して、仮想マシンにログインするユーザー名とパスワードを入力
f:id:nori-tech:20200326223418j:plain

接続結果

ブラウザからRDP接続可能できることが確認できた。
f:id:nori-tech:20200326223503j:plain

感想

  • 数分でRDP接続できる点は良い。在宅勤務が増えているのでそれなりに需要はあるかも。
  • 残念なのはBastion経由だとRDPでファイル転送ができないところ。今後の機能追加に期待したい。

log4netでApplication Insightsにログを出力する方法

はじめに

忘れないようにメモとして残しておきます。
.Net FrameworkのConsoleアプリを対象としています。

Visual StudionのNugetで必要なライブラリをインストール

log4netをインストール

www.nuget.org
f:id:nori-tech:20190714143149p:plain

Application Insightsをインストール

www.nuget.org
f:id:nori-tech:20190714142916p:plain

ローカルにApplicationInsights.configが生成されるので、InstrumentationKeyタグを追加する。
またApplicationInsights.configの完全版のため、不要なタグ(設定)は削除すること。
TelemetrySinkはログのサンプリングに関わるので、すべてのログをApplication Insightsに送信する場合は削除する。
docs.microsoft.com

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <InstrumentationKey>your instrumentkey</InstrumentationKey>
  <TelemetryInitializers>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector"/>
    <Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer"/>
    <Add Type="Microsoft.ApplicationInsights.WindowsServer.AzureWebAppRoleEnvironmentTelemetryInitializer, Microsoft.AI.WindowsServer"/>
    <Add Type="Microsoft.ApplicationInsights.WindowsServer.BuildInfoConfigComponentVersionTelemetryInitializer, Microsoft.AI.WindowsServer"/>
  </TelemetryInitializers>
  <!-- 以下省略 -->
</ApplicationInsights>

log4net用のAppenderをインストール

www.nuget.org
f:id:nori-tech:20190714143400p:plain
app.configに必要な情報が登録される。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
    <log4net>
        <root>
            <level value="ALL" />
            <appender-ref ref="aiAppender" />
        </root>
        <appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message%newline" />
            </layout>
        </appender>
    </log4net>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

コンソールアプリでログ出力

using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp14
{
    class Program
    {
        static void Main(string[] args)
        {
            log4net.Config.XmlConfigurator.Configure();
            var logger = LogManager.GetLogger(typeof(ConsoleApp14.Program));
            for (int i = 1; i <= 100; i++)
            {
                logger.Info("test:" + i);
            }
            // 最後にFlushメソッドを実行
            LogManager.Flush(5000);
            Console.ReadKey();
        }
    }
}

ログ出力結果

Application Insightsにログが出力された。
f:id:nori-tech:20190714145657p:plain

補足

log4netなので、app.configにappenderを追加すればコンソールやファイルに同じログを出力することが可能

 <log4net>
    <root>
      <level value="INFO" />
      <appender-ref ref="aiAppender" />
      <appender-ref ref="RollingLogFileAppender"/>
      <appender-ref ref="ConsoleAppender"/>
    </root>
    <appender name="aiAppender" type="Microsoft.ApplicationInsights.Log4NetAppender.ApplicationInsightsAppender, Microsoft.ApplicationInsights.Log4NetAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger] - %message%newline" />
      </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger] - %message%newline" />
      </layout>
    </appender>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value = "C:\Work\MyLog.log" />
      <appendToFile value = "true" />
      <rollingStyle value = "Size" />
      <maxSizeRollBackups value = "100" />
      <maximumFileSize value = "10MB" />
      <staticLogFileName value = "true" />
      <!-- 複数プロセスから書き込みOK -->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger] - %message%newline" />
      </layout>
    </appender>
  </log4net>

Windows Server 2019 IIS-FTP 外部IPアドレスとデータ転送ポート範囲の設定

FTP Firewall Supportを選択する。
場所はFTPサイトではなく、上位のIISを選択すること。

f:id:nori-tech:20190713180858p:plain

上段にデータ転送ポート範囲(Passive)と下段に外部に公開するIPアドレスを入力する。
f:id:nori-tech:20190713181637p:plain

インターネットに公開する場合は次のようにグローバルIPアドレスを入力すること
f:id:nori-tech:20190713181313p:plain

設定後は必ずサービスを再起動すること。再起動しないと設定が反映されないので注意。
f:id:nori-tech:20190713181547p:plain

Windows Server 2019 IIS-FTP (3) ルートディレクトの変更 ver1

ルートディレクト

ログインしたときの既定のディレクトリはインストール時に設定した物理フォルダになります。

ルートディレクトリの変更

ログインしたユーザー名と同じフォルダをルートにする。
FTP User Isolataionを選択する。

f:id:nori-tech:20190713172725p:plain

ユーザー名ディレクトリを選択
f:id:nori-tech:20190713172802p:plain

コンピュータの管理でローカルユーザーを追加
f:id:nori-tech:20190713173314p:plain

FTP Authentication Rulesを選択
f:id:nori-tech:20190713172855p:plain

ログインさせたいユーザーを追加
f:id:nori-tech:20190713172937p:plain

ルートフォルダ以下にユーザー名と同じフォルダを作成
f:id:nori-tech:20190713173033p:plain

FTPにログインすると、ログイン時のユーザーと同じフォルダが
ルートディレクトになる
f:id:nori-tech:20190713173147p:plain
f:id:nori-tech:20190713173420p:plain

Windows Server 2019 IIS-FTP (2) FTP設定編

FTPサイト追加

siteを右クリックして追加します。

f:id:nori-tech:20190713170327p:plain

ルートフォルダを設定する。

f:id:nori-tech:20190713170445p:plain

SSLの設定をする。今回は設定なし。

f:id:nori-tech:20190713170508p:plain

ログインユーザーを追加して完了。

f:id:nori-tech:20190713170635p:plain

FTPに接続できることを確認しました。

f:id:nori-tech:20190713170743p:plain

f:id:nori-tech:20190713170803p:plain