Azure 上にメールサーバーを立てるのは非サポートという事実

Azure VM で SMTP サーバーを立ててはいけないのに、意外に知らない人が多いらしい。
公式ブログでも非サポートと書いてあるので、詳細はそちら参照。

https://blogs.technet.microsoft.com/jpaztech/2016/06/09/smtp-on-azurevm/

巷では、Postfix とかで無理やりメールサーバー立てたという記事も見かけますが、NG なのでおとなしく SendGrid とかを使いましょう。

Microsoft 製品の調査用ログ収集ツール SDP (MSDT)

今更ですが、思いのほか知られていないようなので、MS のサポートでも使ってるログ収集ツールを紹介してみようと思います。

ネタ元はこちら。
https://blogs.technet.microsoft.com/yongrhee/2014/02/01/tool-mpsreport-replacement-msdt/

概要

そもそも SDP (MSDT とも呼びます) が何かという話ですが、タイトルの通り Microsoft 製品の調査にあたって必要なログを収集してくれるツールです。製品ごとにパッケージが用意されていて、その製品に関連するログを一括収集してくれるので、ユーザーさんなり現場の担当者にあれこれ指示を出してログをとってもらうのが面倒な時に便利です。どのパッケージも、イベントログとシステム構成情報 (msinfo32)、パッチの適用情報などが共通で含まれていて、あとは Hyper-V であれば仮想マシンの構成ファイルとか、ネットワークが絡むものなら Firewall の設定ファイルとかが入ってきます。

※ あくまでもログ収集ツールであって、解析まではやってくれないので、自分でログを見ましょう。

使い方

  1. 以下の URL にアクセスして、Microsoft アカウントでログインします。
    https://home.diagnostics.support.microsoft.com/SelfHelp
  2. 診断パッケージが多数出てくるので、収集したいログを検索して選択します (Hyper-V とか、Azure とか)
    この際、[詳細の表示] から収集される情報の一覧も確認できます。
    MSDT1
  3. ツールをダウンロードして、あとは対象の端末で実行すれば、数分でログをかき集めてくれます。集める情報量にもよりますが、数分かかるので気長に待ちましょう。
    MSDT2MSDT4MSDT2
  4. ログ収集が終わると収集した情報の一覧が表示されるので、ローカル保存して、あとはログと睨めっこしつつ頑張りましょう。
    MSDT7 MSDT5MSDT6

Azure PowerShell で多数のリソースを並列作成する

US の Azure Support Team のブログから便利な TIPS を抜粋。

想定されるシナリオ

例えば、NIC や Public IP を大量に作成する際、1 個ずつ同期的に作成すると、時間がかかります。
(例えば、1 つの作成に 30 秒かかる場合、単純計算で 30 個作るには 15 分かかります)

これを非同期で一括作成すれば、何個作ろうが 1 個作成するのと大差ない時間で完了します。

VPN Gateway とか、Application Gateway のように 1 個当たり数十分かかるようなリソースを作成する際には非常に使えそうですね。

具体的な方法

以下に ARM で Public IP を指定した個数作成するスクリプトがあります。

TechNet Gallery Code Sample

※ 文字コードのせいか、文字化けしますが、12 行目の末尾を (“System.Diagnostics”) にすればエラーなく使えます。

ただ、長くて何をやっているかが一目では分かりにくいので、最小限にすると以下のような感じになります。
ポイントは 11 行目で並列実行する処理を $sb (ScriptBlock?) として定義している所と、14 行目の [PowerShell]::Create() あたりですかね。

# 変数定義
[int]$count = "<作成数>"
[string]$namePrefix = "<リソース名の接頭辞>"
[string]$rgName = "<リソース グループ名>"
[string]$location = "<リージョン名>"

# ジョブの作成と開始を $count 回ループ実行
for($i=1;$i -le $count;$i++){
 $sb = {
 Param($namePrefix,$i,$rgName,$location)
 $dontcare = New-AzureRmPublicIpAddress -Name "$($namePrefix)$($i)" -ResourceGroupName $rgName -Location $location -AllocationMethod Dynamic
 }

New-Variable -Name "create$($namePrefix)$($i)" -Value ([PowerShell]::Create())
 (Get-Variable -Name "create$($namePrefix)$($i)" -ValueOnly).AddScript($sb).AddArgument($namePrefix).AddArgument($i).AddArgument($rgName).AddArgument($location)
 New-Variable -Name "jobCreate$($namePrefix)$($i)" -Value ((Get-Variable -Name "create$($namePrefix)$($i)" -ValueOnly).BeginInvoke())
}

で、元のスクリプトでは、処理にかかった時間を測るためにストップウォッチで時間を測っていたり、ジョブが完了したかをひたすらループでチェックしているので長くなってます。使いこなせると便利なので、必要になったときは積極的にサンプルをパクって使いましょう。

ネタ元

 

nmcap でネットワーク トレースを結合する

Netmon / netsh でキャプチャしたトレース (パケット) をパフォーマンス ログの relog のように結合できないかと思って調べたら、ちょうどいい方法が見つかったのでメモ。

namcap /InputCapture Trace1.cap Trace2.cap Trace3.cap /capture /file Trace.cap:500M

cap に限らず etl 形式のもマージできそうな感じでした。 これで大量にファイルを開かないで解析できますね。

ただ、最大 500 MB までしかダメなようだったので、今回は ICMP だけでフィルターして一件落着。

namcap /InputCapture Trace1.cap Trace2.cap Trace3.cap /capture "ICMP" /file Trace.cap:500M

Interact x Cloud Samurai 2016 Summer に登壇させていただきました。

先日、Interact x Cloud Samurai 2016 Summer というイベントで小一時間お話させていただいたので、スライドをこっそり公開しておきます。

例のごとく、所属する組織・団体・中の人としての見解ではありませんのであしからず。

Azure Automation に AzureRM.Network モジュールがない件

タイトルの通り、Azure Automation には ARM の Network モジュールがありません。(なんてこった…

ポータルのバグかと思いつつ調べてみると、以下で Joe Levy (中の人っぽい) がモジュールの追加予定はないとコメントしています。

https://azure.microsoft.com/en-us/blog/announcing-azure-resource-manager-support-azure-automation-runbooks/#comment-2529861263

Right now there is no timeline on when additional modules / new versions of modules will be shipped out of box in the Automation service. If you have additional requirements besides what we currentl ship globally, these modules / module versions will have to be imported as user modules. Please note the new guidance is that if the latest version of any Azure/AzureRM module is imported as a user module to an automation account, the latest versions of ALL Azure/AzureRM modules (not just the ones that ship out of the box in Azure Automation) should be imported to the automation account, to avoid any version mismatch issues that could occur now or in the future if Azure Automation later ships any additional (or newer version) Azure/AzureRM modules as global modules. Instructions for importing the Azure/AzureRM modules as user modules can be found here: http://blog.coretech.dk/jgs/az…

というわけで、自前でモジュールをインポートして使うほかなさそうなので、ざっくりとまとめておきます。

 

Portal でギャラリーから追加する方法

Azure PowerShell の [資産] – [モジュール] で、[ギャラリーを参照] から、必要なモジュールを追加します。

AutomationModule

 

この際、依存関係のあるモジュールがないと、インポート前にエラーが表示されるので、先にそちらをインポートしましょう。

ImportModuleError

 

モジュールをインポートすると、アクティビティの抽出処理で数分かかります。
(インポートしたモジュールに含まれるコマンドレットの一覧を抽出している感じでしょうか)

ImportModule

 

すべてのモジュールが “利用可能” になるまで気長に待ちましょう。

ModuleList

 

以上。