背景

EC2でWindwosを実装しています。

性能情報を取得したいのですが、デフォルトだとCPUの情報ぐらいしか使用できないです。

メモリの使用率はひと手間かけないといけないのです。

やったこと

以下のページを参考にしました。

Windows Server 2022 で メモリ使用率を CloudWatch メトリクスに出してみる。 - サーバーワークスエンジニアブログ

この記事を読めばわかるのですが、自分の記録です。

作業の流れは以下です。

  1. IAM RoleにCloudWatchAgentServerポリシーをアタッチ
  2. CloudWatch AgentをWindowsにインストール
  3. CloudWatch Agentの設定ファイルを作成
  4. CloudWatch Agentを起動

困るのは、最初の作業であるポリシーのアタッチです。terraformの書き方に悩みました。

以下でポリシーをロールにアタッチします。AmazonSSMManagedInstanceCoreCloudWatchAgentServerPolicyをアタッチしてます。(AmazonSSMManagedInstanceCoreは不要かも)

resource "aws_iam_role" "ec2_role" {
  name = "${var.name_prefix}-ec2-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17",
    Statement = [
      {
        Effect = "Allow",
        Principal = {
          Service = "ec2.amazonaws.com"
        },
        Action = "sts:AssumeRole"
      }
    ]
  })
}

resource "aws_iam_role_policy_attachment" "ssm_policy_attachment" {
  role       = aws_iam_role.ec2_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

resource "aws_iam_role_policy_attachment" "cloudwatch_agent_policy_attachment" {
  role       = aws_iam_role.ec2_role.name
  policy_arn = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
}

resource "aws_iam_instance_profile" "ec2_instance_profile" {
  name = "${var.name_prefix}-ec2-instance-profile"
  role = aws_iam_role.ec2_role.name
}

上のロールをEC2のiam_instance_profileに割り当てます。

resource "aws_instance" "windows" {
  iam_instance_profile = aws_iam_instance_profile.ec2_instance_profile.name

}

見え方

CloudWatchからMetricsを選択。その後にCWAgentをクリック。

こんな感じのグラフが表示されます。