インターネットアクセスのない Amazon EC2 Amazon EC2 Auto Scaling グループに Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを配置しています。この Amazon EC2 インスタンスから Amazon CloudWatch にログとメトリクスを送信したいです。
解決策
EC2 Auto Scaling グループで EC2 インスタンスを設定し、CloudWatch にメトリクスとログを送信するには、次の手順を実行します
CloudWatch エージェントをインストールする
インターネット接続できるインスタンスに CloudWatch エージェントをインストールします。または、CloudWatch エージェントを使用して CloudWatch に既にログとメトリクスを送信している既存のインスタンスを使用します。
注: Auto Scaling グループ名を CloudWatch エージェント設定のディメンションとして含めます。エージェントは、インスタンスタグやその他のメタデータ (ImageId、InstanceId、InstanceType など) からこの名前を取得します。
次に、CloudWatch エージェントがメトリクスとログを CloudWatch に正常に送信していることを確認します。
EC2 Auto Scaling グループ用の起動テンプレートを作成する
EC2 Auto Scaling グループ用の起動テンプレートを作成する
[詳細情報] を選択します。次に、[IAM インスタンスプロファイル] と [ユーザーデータ] を選択します。[ユーザーデータ] には、設定した JSON に応じて、CloudWatch エージェントをインストール、構成するスクリプトを入力します。[IAM インスタンスプロファイル] には、EC2 インスタンスがメトリクスとログを CloudWatch に送信できるようにする AWS Identity and Access Management (IAM) ロールを選択します。これらの詳細設定に関する詳細については、「詳細設定」を参照してください。
インスタンス上のユーザーデータスクリプトの例:
#!/bin/bashcd /tmp
wget https://s3.REGION.amazonaws.com/amazoncloudwatch-agent-REGION/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
rpm -U ./amazon-cloudwatch-agent.rpm
cat << EOF > /opt/aws/amazon-cloudwatch-agent/bin/config.json
{
"agent": {
"metrics_collection_interval": 60
},
"metrics": {
"append_dimensions": {
"InstanceId": "\${aws:InstanceId}"
},
"metrics_collected": {
"disk": {
"measurement": [
"disk_used_percent"
],
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
]
}
}
}
}
EOF
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
注: REGION は、実際の AWS リージョンに置き換えます。config.json ファイル内の特殊文字をエスケープするには、バックスラッシュ (\) を使用します。このスクリプトは、CloudWatch エージェントがメモリとディスクの使用状況を監視するように設定し、エージェントを起動します。使用する EC2 Auto Scaling グループのリージョン用のダウンロードリンクを使用していることを確認してください。
メトリクスとログ用の VPC エンドポイントを作成する
プライベートサブネットをホストする VPC に、CloudWatch メトリクスおよび Amazon CloudWatch Logs 用のインターフェイス仮想プライベートクラウド (VPC) エンドポイントを作成します。次に、エンドポイントポリシーをカスタムポリシーで更新し、必要な CloudWatch アクションを許可します。サービスエンドポイントの詳細については、「Amazon CloudWatch エンドポイントとクォータ」を参照してください。
注: EC2 Auto Scaling グループのリージョンに対応するエンドポイントを使用していることを確認してください。たとえば、EC2 Auto Scaling グループが eu-west-2 リージョンにある場合は、メトリクスには monitoring.eu-west-2.amazonaws.com を使用し、ログには logs.eu-west-2.amazonaws.com を使用します。
CloudWatch VPC エンドポイントポリシーの例:
{ "Statement": [
{
"Sid": "PutOnly",
"Principal": "*",
"Action": [
"cloudwatch:PutMetricData"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
CloudWatch Logs VPC エンドポイントポリシーの例:
{ "Statement": [
{
"Sid": "PutOnly",
"Principal": "*",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
次に、プライベートサブネットをホストする VPC に Amazon Simple Storage Service (Amazon S3) 用の VPC ゲートウェイエンドポイントを作成します。このエンドポイントにより、プライベートサブネット内のインスタンスは CloudWatch エージェントパッケージをダウンロードできるようになります。
EC2 Auto Scaling グループを作成する
作成した起動テンプレートのプライベートサブネットが有効である EC2 Auto Scaling グループを作成します。