IAM -> 역할 -> 인스턴스 역할 이름 -> 권한 -> 권한 정책에서
권한 추가 -> CloudWatchFullAccessV2 정책 추가

추가된 모습
+재배포 시에도 동일한 설정이 되도록 테라폼 스크립트에도 정책 설정
# EC2 역할 생성
resource "aws_iam_role" "ec2_role_1" {
name = "${var.prefix}-ec2-role-1"
# 이 역할에 대한 신뢰 정책 설정. EC2 서비스가 이 역할을 가정할 수 있도록 설정
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Action": "sts:AssumeRole",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Effect": "Allow"
}
]
}
EOF
}
# EC2 역할에 AmazonS3FullAccess 정책을 부착
resource "aws_iam_role_policy_attachment" "s3_full_access" {
role = aws_iam_role.ec2_role_1.name
policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}
# EC2 역할에 AmazonEC2RoleforSSM 정책을 부착
resource "aws_iam_role_policy_attachment" "ec2_ssm" {
role = aws_iam_role.ec2_role_1.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM"
}
위의 main.tf 코드 아래에
# EC2 역할에 CloudWatchFullAccessV2 정책을 부착
resource "aws_iam_role_policy_attachment" "cloud_watch_full_access_v2" {
role = aws_iam_role.ec2_role_1.name
policy_arn = "arn:aws:iam::aws:policy/CloudWatchFullAccessV2"
}
이 코드를 추가하기
zero_downtime_deploy.py 무중단 배포 스트립트에서
도커 컨테이너를 실행하는 함수 부분에 아래의 코드 추가
--log-driver=awslogs --log-opt awslogs-region=ap-northeast-2 --log-opt awslogs-group=app-1 --log-opt awslogs-stream=app-1-stream-1
--log-driver=awslogs : CloudWatch를 로그 드라이버로 지정해 로그 자동 전송 활성화--log-opt awslogs-region=ap-northeast-2 : 로그 저장 위치인 서울 리전 선택--log-opt awslogs-group=app-1 : 로 로그 분류 및 저장할 로그 그룹 app-1 지정. 만약 지정된 로그 그룹 이름(app-1)이 이미 존재하지 않는 경우, 새로 생성--log-opt awslogs-stream=app-1-stream-1 : 세분화된 로그 시퀀스 관리를 위한 로그 스트림 app-1-stream-1 설정. (개별 컨테이너나 애플리케이션 인스턴스별로 로그를 구분하는 데 사용)
추가 된 코드 모습
def _run_container(self, name: str, port: int) -> None:
os.system(
f"docker run --name={name} --log-driver=awslogs --log-opt awslogs-region=ap-northeast-2 --log-opt awslogs-group=app-1 --log-opt awslogs-stream=app-1-stream-1 -p {port}:8080 -v /docker_projects/goohaeyou/volumes/gen:/gen --restart unless-stopped -e TZ=Asia/Seoul --pull always -d ghcr.io/techit7-11/goohaeyou")
aws -> CloudWatch -> 로그 -> 라이브 테일에 들어간 후
배포 사이트에 들어가서 페이지를 실행 시켜보면 아래와 같은 로그 목록을 볼 수 있다.

중요한 로그 위주로 간단히 보고 싶으면 필터 패턴을 추가해서 보면 되는데,

이와 같은 필터를 적용시킬 수 있다.

필터 패턴으로 ERROR 를 적용시켜보면

위의 사진과 같이 ERROR 로그에 대해서만 깔끔하게 볼 수 있다.
추가로 돋보기 버튼을 누르면 해당 로그의 상세를 볼 수 있다.
