hero_picture
Cover Image for SSMステートマネージャーを使ったCloudWatchAgentの自動アップデート

SSMステートマネージャーを使ったCloudWatchAgentの自動アップデート

こんにちは。クラウドソリューション事業部の石垣です。

先日、CloudWatch AgentのアップデートをAWS Systems ManagerのState Managerを使って自動化したので、作業フローとちょっとしたポイントを紹介します。

State Managerとは

State Managerは、Systems Managerの一機能です。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-state.html
AWS Systems Manager の一機能である State Manager は、安全でスケーラブルな設定管理サービスであり、これによってマネージドノードおよび他の AWS リソースを定義された状態に保つプロセスが自動化されます。

と書いてます。より重要なのは「保つ」というところです。

例えば「あるリソースをAという状態に保っておきたい→なんかの拍子にBという状態に変わってしまう→Aという状態を保つ機能でAという状態に戻る」というようなイメージです。

自動アップデートの設定をしてみる

それでは設定していきます。前提は、対象のインスタンスがすでにSystems Managerのマネージドインスタンスとなっていることとします。

Systems Manager > ステートマネージャーから「関連づけの作成」から設定していきます。

ドキュメントとしては、AWS-ConfigureAWSPackageを選択します。

※State Managerの内実は、定期的なRunbook(ドキュメント)の実行であることがわかります。

対象のドキュメントに必要なパラメータは今回(CloudWatchAgentのアップデートに必要なパラメータ)は以下の通りです。

  • Action
    • Install
  • InstallationType
    • Uninstall and reinstall
  • Name
    • AmazonCloudWatchAgent
  • Version
    • 空欄で問題なし(空欄の場合LatestVersionとなります)
  • Additional Arguments
    • そのままで問題なし

あとは、対象インスタンスとスケジュールを指定すればOK。

作成した関連づけの実行履歴タブから結果を確認できます。

ちょっとしたポイント

CloudWatchAgentをアップデートするとアンインストール&インストールという挙動となります。

ここで一つ気をつけないといけないのは、対象インスタンスがWindows Serverで、かつサービスのスタートアップの種類をデフォルトの「自動」から「自動(遅延開始)」に変更して運用しているようなパターンです。

※Windows Server上のCloudWatch Agentは起動に失敗するなどあってWindowsサービスのスタートアップの種類を変更して運用しているケースもあるかと思います。

その場合も、State Managerで対処します。イメージ的には以下のイメージです。

Windowsサービス用の関連づけとして、新しく関連づけを作成して、スタートアップの種類を変更するコマンドを実行する形になります。

事前に関連づけで実行するRunbookを作成しておきます。

1{
2  "schemaVersion": "2.2",
3  "description": "Change StartupType of WindowsService",
4  "parameters": {
5    "TargetService": {
6      "type": "String",
7      "description": "TargetService",
8      "default": "AmazonCloudWatchAgent"
9    },
10    "TargetType": {
11      "type": "String",
12      "description": "TargetType",
13      "default": "AutomaticDelayedStart",
14      "allowedValues": [
15        "Automatic",
16        "AutomaticDelayedStart",
17        "Disabled",
18        "InvalidValue",
19        "Manual"
20      ]
21    }
22  },
23  "mainSteps": [
24    {
25      "action": "aws:runPowerShellScript",
26      "name": "example",
27      "inputs": {
28        "runCommand": [
29          "pwsh -Command Set-Service -Name {{TargetService}} -StartupType {{TargetType}} ; if($? -eq $true) {exit 0} else {exit 1}"
30        ]
31      }
32    }
33  ]
34}

※Powershellで実行させていますが、その際にPowershell7系が必要となります。

その上で関連づけ作成時のインプットパラメータを以下とします。

  • TargetService
    • AmazonCloudWatchAgent
  • TargetType
    • AutomaticDelayedStart

後は「CloudWatch Agentのアップデート」の開始と「サービスのスタートアップの種類を自動(遅延開始)」の開始のタイミングを調整すれば、最新でスタートアップの種類が自動(遅延開始)である状態が保たれることとなります。

終わりに

今回はCloudWatch Agentの自動バージョンアップとしてStateManagerの使用法をご紹介しました。
CloudWatch Agent以外であってもいろいろ使っていけると思うので、今後も活用していきたいですね。