【小ネタ】SystemsManagerでWindowsServerにMackerelAgentを導入する

こんばんわ、さっぽろのよしえです。
以前にAmazonLinux1へMackerelAgentを導入するためにAnsible Playbookを書きました。

MackerelAgentをAnsibleでインストールする

今回はWindowsServer2016,2019に対して、Runcommandを使用したMackerelAgentのインストールを纏めました。

対象環境

  • Windows_Server-2019-Japanese-Full-Base-2019.03.13 (ami-0d99c7fbb7d6a260c)
  • Windows_Server-2016-Japanese-Full-Base-2019.03.13 (ami-03afe691dccf5db38)

作業概要

今回はParameterStoreとRunCommandを使用してインストールします。

具体的には以下の対応を実施するのみです。

  • ParameterStoreにAPIキーを配置
  • RunCommandを実行する際にAPIキーを取得してインストール作業を実施

事前準備

ParameterStoreへMackerelのAPIキーを入れます。

% aws ssm get-parameter --name MACKEREL_APIKEY
{
    "Parameter": {
        "Version": 2,
        "LastModifiedDate": 1554200835.132,
        "Name": "MACKEREL_APIKEY",
        "Value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "Type": "String",
        "ARN": "arn:aws:ssm:ap-northeast-1:xxxxxxxxxxxx:parameter/MACKEREL_APIKEY"
    }
}

Mackerel-Agentインストール

RunCommandにて以下のPowershellスクリプトを実行します。

使用ドキュメント:AWS-RunPowerShellScript

 mkdir 'C:\Temp'

 $msiSource = 'https://mackerel.io/file/agent/msi/mackerel-agent-latest.msi'
 $msiOutPath = 'C:\Temp\mackerel-agent.msi'
 Invoke-WebRequest -Uri $msiSource -OutFile $msiOutPath

 $params = @{
     FilePath     = 'msiexec.exe';
     ArgumentList = @('/i', $msiOutPath, '/passive', '/le', 'C:\Temp\mackerel-agent-install.log', 'APIKEY="{{ssm:MACKEREL_APIKEY}}"');
     Wait         = $true;
     PassThru     = $true;
 }
 $proc = Start-Process @params
 switch ($proc.ExitCode) {
     0 {
         break
     }
     3010 {
         break
     }
     1602 {
         Write-Warning "Installation canceled."
         break
     }    
     Default {
         Write-Error ("Failed to install.(Exit code={0})" -f $_)
         break
     }
 }

主なagentインストール部分はArgumentList行に記載がある点となります。
paramsで指定された結果によって、メッセージが変わるので注意頂ければと思います。

今後の課題

また、今回の課題としてはmackerel-agent.confの扱いを考えていきたいと思いました。
本記事で紹介した内容では素のmackerel-agentを導入している状態なので、実際のユーザーとしてはログ監視やプラグインを入れたり、なんならDisplayNameでホスト種別を整理したいなどの要望があると思います。

S3にmackerel-agent.confを配置してuserdataで取得することも出来そうですが、他に何か良さそうな方法があればTwitterで教えて頂けますと幸いです。

最後に

Powershellで試行錯誤をしている最中にとてもこの分野に明るい方にご協力頂いてからすんなり終わってしまいました。

Agentインストールのような作業を1台ずつのような作業はストレスに繋がって、製品全体にネガティブな印象を与えてしまうのでなる早で排除せねばと思ってました。
準備は程々にして、なるべくは製品の良いところを見てもらえるように努めていきたいと思います。

最後に参考資料として教えて頂いたスライドを書かせてもらいます。