ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

手作業をやめる:CloudWatch Agent の導入を Systems Manager で IaC 化

この記事を共有する

目次

はじめに

こんにちは!パーソル&サーバーワークスの野間です。

EC2 インスタンスの作成は IaC 化しているものの、
ミドルウェアやエージェントのセットアップは手作業になっているケースはないでしょうか。

今回は、CloudWatch Agent のインストールから設定までを、
AWS Systems Manager(以下、Systems Manager)を使ってコードとして管理する方法をご紹介します。

実装する構成について

今回は以下のような構成を実装していきます。

  1. EC2 インスタンスに CloudWatch Agent をインストールする
  2. CloudWatch Agent でメモリ使用率とディスク使用率を取得する設定を有効化する

実装は Systems Manager ステートマネージャー(State Manager)の関連付け機能を利用していきます。
また、EC2 インスタンスには以下の IAM ポリシーを事前に付与しています。

  • AmazonSSMManagedInstanceCore
    • Systems Manager 経由での操作を行うために必要な権限です。
  • CloudWatchAgentServerPolicy
    • CloudWatch Agent が CloudWatch にメトリクスやログを送信するために必要な権限です。 ※ IAM ロールは EC2 作成時、もしくは作成後に関連付けることができます。(参考:インスタンスへの IAM ロールのアタッチsystems-manager-cwagent-01.png

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 インスタンスにログインして確認コマンドを実行したところ、パッケージがインストールできていることが確認できました。 systems-manager-cwagent-02.png

CloudWatch Agent の詳細設定

現在の状態では、CloudWatch Agent のパッケージを
インストールしただけで、Agent の機能はまだ有効になっていません。
systems-manager-cwagent-03.png

次に、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 を確認すると
関連付けのステータスが「成功」になっていました。
systems-manager-cwagent-04.png

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

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

まとめ

今回は、SSM Association を利用して
CloudWatch Agent のインストールから設定、有効化までを IaC 化してみました。

今回は 1 台の EC2 インスタンスを対象にしましたが、ターゲットを変更することで複数台に同じ設定を適用することも可能です。

また、パッケージの更新や設定変更もコードとして管理できるため、
手動運用による設定漏れや差分を防ぐことができる点も大きなメリットだと感じました。

今後、Systems Manager ステートマネージャーの導入を検討されている方の参考になれば幸いです!

この記事は私が書きました

野間 太一

記事一覧

猫とCloudFormationが好きです。

野間 太一

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。