- 公開日
- 最終更新日
手作業をやめる:CloudWatch Agent の導入を Systems Manager で IaC 化
この記事を共有する
目次
はじめに
こんにちは!パーソル&サーバーワークスの野間です。
EC2 インスタンスの作成は IaC 化しているものの、
ミドルウェアやエージェントのセットアップは手作業になっているケースはないでしょうか。
今回は、CloudWatch Agent のインストールから設定までを、
AWS Systems Manager(以下、Systems Manager)を使ってコードとして管理する方法をご紹介します。
実装する構成について
今回は以下のような構成を実装していきます。
- EC2 インスタンスに CloudWatch Agent をインストールする
- CloudWatch Agent でメモリ使用率とディスク使用率を取得する設定を有効化する
実装は Systems Manager ステートマネージャー(State Manager)の関連付け機能を利用していきます。
また、EC2 インスタンスには以下の IAM ポリシーを事前に付与しています。
- AmazonSSMManagedInstanceCore
- Systems Manager 経由での操作を行うために必要な権限です。
- CloudWatchAgentServerPolicy
- CloudWatch Agent が CloudWatch にメトリクスやログを送信するために必要な権限です。
※ IAM ロールは EC2 作成時、もしくは作成後に関連付けることができます。(参考:インスタンスへの IAM ロールのアタッチ)

- CloudWatch Agent が CloudWatch にメトリクスやログを送信するために必要な権限です。
※ IAM ロールは EC2 作成時、もしくは作成後に関連付けることができます。(参考:インスタンスへの IAM ロールのアタッチ)
CloudWatch Agent のインストール
まずは CloudWatch Agent のインストール部分を実装します。
以下の CloudFormation テンプレートファイルを作成しました。
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
AssociationName:
Type: String
AssociationName2:
Type: String
InstanceId:
Type: String
Resources:
InstallCWAgent:
Type: AWS::SSM::Association
Properties:
AssociationName: !Ref AssociationName
Name: AWS-ConfigureAWSPackage
Targets:
- Values:
- !Ref InstanceId
Key: InstanceIds
Parameters:
action:
- Install
name:
- AmazonCloudWatchAgent
version:
- latest
このテンプレートファイルを利用して CloudFormation スタックをデプロイします。
EC2 インスタンスにログインして確認コマンドを実行したところ、パッケージがインストールできていることが確認できました。

CloudWatch Agent の詳細設定
現在の状態では、CloudWatch Agent のパッケージを
インストールしただけで、Agent の機能はまだ有効になっていません。

次に、CloudWatch Agent でメモリ使用率とディスク使用率を取得するための設定ファイルを作成します。
CWAgentConfigParameter:
Type: AWS::SSM::Parameter
Properties:
Name: AmazonCloudWatch-Config
Type: String
Value: |
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected": {
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"/"
]
}
}
}
}
ConfigureCWAgent:
Type: AWS::SSM::Association
Properties:
AssociationName: !Ref AssociationName2
Name: AmazonCloudWatch-ManageAgent
Targets:
- Key: InstanceIds
Values:
- !Ref InstanceId
Parameters:
action:
- configure
mode:
- ec2
optionalConfigurationSource:
- ssm
optionalConfigurationLocation:
- !Ref CWAgentConfigParameter
optionalRestart:
- "yes"
metrics_collection_interval はメトリクスを取得する間隔(秒)を表しています。
また、runasuser には CloudWatch Agent を実行するユーザーを指定しています。
CloudFormation でデプロイ後、Systems Manager を確認すると
関連付けのステータスが「成功」になっていました。

EC2 インスタンス上でも、CloudWatch Agent のサービス状態が
active (running) になっていることを確認できました。

CloudWatch コンソールでメトリクスを確認し、
メモリ使用率やディスク使用率のデータが表示されていれば成功です。

まとめ
今回は、SSM Association を利用して
CloudWatch Agent のインストールから設定、有効化までを IaC 化してみました。
今回は 1 台の EC2 インスタンスを対象にしましたが、ターゲットを変更することで複数台に同じ設定を適用することも可能です。
また、パッケージの更新や設定変更もコードとして管理できるため、
手動運用による設定漏れや差分を防ぐことができる点も大きなメリットだと感じました。
今後、Systems Manager ステートマネージャーの導入を検討されている方の参考になれば幸いです!
この記事は私が書きました
野間 太一
記事一覧猫とCloudFormationが好きです。