27
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EC2起動時にユーザーデータを利用して初期設定を自動化する

Last updated at Posted at 2025-12-11

はじめに

EC2インスタンス起動時に設定できるユーザーデータを利用して、普段インスタンス起動後に実施している各種パッケージのインストールやConfigファイルの設定の自動化を試してみたいと思います。

流れ

  1. 目標
  2. 前提条件
  3. 実機設定
  4. 実機確認

目標

RHEL9.6にユーザーデータを利用して以下の初期設定を自動化していきます。

  1. AWSACLIのインストール
  2. SSMAgentのインストール
  3. CloudWatchAgentのインストール
  4. CloudWatchAgentの初期設定
    ・CloudWatchLogsにmessagesログとsecureログの転送
    ・CloudWatchメトリクスでCPUとメモリの使用率を取得

前提条件

・今回はRedHatEnterpriseLinux9.6を利用します。
・EC2にアタッチするIAMロールには「AmazonSSMManagedInstanceCore」と「CloudWatchAgentServerPolicy」を許可しています。

実機設定

「インスタンスの起動」から「高度な設定」にある「ユーザーデータ」に以下のスクリプトを記入し、インスタンスを起動します。
※今回取得するCPU使用率はインスタンス起動時にデフォルトで取得される「CPUUtilization」を利用するため、ユーザデータでの設定はしていません。

#!/bin/bash

# AWSCLIインストール
dnf install -y unzip curl
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip -o awscliv2.zip
./aws/install

#SSMAgentインストール
curl -O https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
dnf install -y amazon-ssm-agent.rpm
systemctl enable --now amazon-ssm-agent

#CloudWatchAgentインストール
curl -O https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-agent.rpm
dnf install -y amazon-cloudwatch-agent.rpm

#CloudWatchAgent設定
cat > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json << 'EOF'
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/secure",
            "log_group_name": "test-secure",
            "log_stream_name": "/var/log/secure"          },
          {
            "file_path": "/var/log/messages",
            "log_group_name": "test-messages",
            "log_stream_name": "/var/log/messages"          }
        ]
      }
    }
  },
  "metrics": {
    "metrics_collected": {
      "mem": {
        "measurement": [
          {"name": "mem_used_percent", "unit": "Percent"}
        ],
        "metrics_collection_interval": 60
      }
    }
  }
}
EOF

#CloudWatchAgent起動
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config \
  -m ec2 \
  -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \
  -s

実機確認

目標としていた4項目がそれぞれ実行されていることを確認していきます。

  1. AWSACLIのインストール
# aws --version
aws-cli/2.32.3 Python/3.13.9 Linux/5.14.0-570.41.1.el9_6.x86_64 exe/x86_64.rhel.9

2. SSMAgentのインストール

# rpm -q amazon-ssm-agent
amazon-ssm-agent-3.3.3185.0-1.x86_64

3. CloudWatchAgentのインストール

# rpm -q amazon-cloudwatch-agent
amazon-cloudwatch-agent-1.300062.0b1304-1.x86_64

4. CloudWatchAgentの初期設定
・CloudWatchLogsにmessagesログとsecureログの転送

スクリーンショット 2025-11-22 220929.png

スクリーンショット 2025-11-22 221528.png

スクリーンショット 2025-11-22 221549.png

・CloudWatchメトリクスでCPUとメモリの使用率を取得

スクリーンショット 2025-11-22 221650.png

おわりに

目標としていた4項目がちゃんと設定できていることが確認できました。
次回はスクリプトをパラメータストアに保存して、ユーザデータに値を持ってくる方法を試してみたいと思います。

27
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?