こんにちは。クラウドソリューション事業部の石垣です。
先日、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.htmlAWS 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以外であってもいろいろ使っていけると思うので、今後も活用していきたいですね。