인터넷 액세스 권한이 없는 Auto Scaling 그룹에서 EC2 인스턴스를 구성하여 CloudWatch로 지표와 로그를 전송하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2020년 11월 9일
인터넷 액세스 권한이 없는 Amazon EC2 Auto Scaling 그룹에서 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 구성하여 Amazon CloudWatch로 로그와 지표를 전송하려면 어떻게 해야 합니까?
해결 방법
- Amazon EC2 인스턴스에 CloudWatch 에이전트 설치 이 인스턴스는 인터넷에 연결되어 있어야 합니다. 또는 CloudWatch 에이전트를 사용하여 이미 로그와 지표를 CloudWatch로 푸시하고 있는 Amazon EC2 인스턴스를 선택할 수 있습니다.
- CloudWatch 에이전트가 Amazon EC2 인스턴스의 지표 및 로그를 푸시하고 있는지 확인합니다.
- Auto Scaling 그룹에 대한시작 템플릿을 생성합니다. 인스턴스가 지표 및 로그를 CloudWatch로 푸시하도록 하려면 시작 템플릿에 올바른 AWS Identity and Access Management(IAM) 역할을 제공합니다. 고급 설정에서 다음과 유사한 스크립트를 사용하여 사용자 데이터를 정의합니다. 이 스크립트의 사용자 지정 버전을 사용하여 1단계의 JSON 구성을 기반으로 CloudWatch 에이전트를 설치 및 구성합니다.
참고: 이 예제 사용자 데이터 스크립트는 Amazon EC2 Linux 인스턴스에 CloudWatch 에이전트를 설치합니다. 스크립트는 메모리와 디스크 사용률을 모니터링하도록 에이전트를 구성한 다음 에이전트를 시작합니다. Auto Scaling 그룹의 특정 리전에 대한 다운로드 링크를 사용해야 합니다.
#!/bin/bash
cd /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
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 엔드포인트 생성 시 고려 사항"을 참조하세요.
인터페이스 VPC 엔드포인트 생성 시 고려 사항
- Auto Scaling 그룹의 AWS 리전에 해당하는 엔드포인트를 사용해야 합니다. 예를 들어 Auto Scaling 그룹이 런던 리전에 있는 경우 지표의 엔드포인트는 monitoring.eu-west-2.amazonaws.com입니다. 이 시나리오에서 로그의 엔드포인트는 logs.eu-west-2.amazonaws.com입니다.
- [프라이빗 DNS 이름 활성화(Enable Private DNS name)] 옵션을 활성화했는지 확인합니다. 이 옵션은 VPC에 대해 [DNS 호스트 이름 활성화(Enable DNS hostnames)] 및 [DNS 지원 활성화(Enable DNS Support)] 속성이 [true]로 설정된 경우에만 활성화할 수 있습니다. 이 옵션을 비활성화하면 VPC 인터페이스 엔드포인트가 서비스 엔드포인트에 매핑되지 않습니다. 따라서 인스턴스가 퍼블릭 서비스 엔드포인트에 도달할 수 없습니다. 이 옵션을 활성화하면 서비스 엔드포인트가 VPC 인터페이스 엔드포인트로 매핑되고 서비스 엔드포인트와의 통신이 프라이빗으로 이루어집니다. 기본적으로 CloudWatch 에이전트는 이 엔드포인트에 연결됩니다. 필요한 경우 에이전트 구성 파일에서 endpoint_override 파라미터를 사용하여 기본 엔드포인트를 재정의할 수 있습니다.
- 보안 그룹 규칙이 엔드포인트 네트워크 인터페이스와 서비스와 통신하는 VPC의 리소스 간의 통신을 허용하는지 확인합니다. 로그 및 지표를 푸시하기 위한 API 호출은 HTTPS 기반 GET/POST 요청입니다. 엔드포인트 네트워크 인터페이스 보안 그룹에는 원본 IP의 HTTPS 프로토콜에 대한 인바운드 규칙이 필요합니다. 소스 IP 주소는 지표 및 로그 또는 VPC CIDR을 푸시하는 EC2 인스턴스의 IP 주소입니다.
- 인스턴스가 Auto Scaling 그룹의 일부인 경우 에이전트 구성 파일에서 차원 중 하나를 Auto Scaling 그룹 이름으로 지정합니다. Auto Scaling 그룹의 이름을 찾기 위해 에이전트는 Amazon EC2 엔드포인트에서 인스턴스와 연결된 태그를 가져옵니다. Amazon EC2 서비스에 대한 VPC 인터페이스 엔드포인트를 추가해야 합니다. 에이전트는 Amazon EC2 인스턴스의 metadata에서 ImageId, InstanceId 및 InstanceType 값을 가져옵니다. </ul