はじめに
EC2インスタンス起動時に設定できるユーザーデータを利用して、普段インスタンス起動後に実施している各種パッケージのインストールやConfigファイルの設定の自動化を試してみたいと思います。
流れ
- 目標
- 前提条件
- 実機設定
- 実機確認
目標
RHEL9.6にユーザーデータを利用して以下の初期設定を自動化していきます。
- AWSACLIのインストール
- SSMAgentのインストール
- CloudWatchAgentのインストール
- 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項目がそれぞれ実行されていることを確認していきます。
- 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ログの転送
・CloudWatchメトリクスでCPUとメモリの使用率を取得
おわりに
目標としていた4項目がちゃんと設定できていることが確認できました。
次回はスクリプトをパラメータストアに保存して、ユーザデータに値を持ってくる方法を試してみたいと思います。



