이번 포스팅에서는 AWS Cloud Watch
로 Amazon SQS
에서 발생한 이벤트를 로그로 확인해보는 시간을 가지도록 하겠습니다.
우선 Amazon SQS
와 AWS Cloud Watch
를 연동해줘야 합니다. 연동해주기 위해 사용할 것은 바로 AWS Lambda
함수입니다.
AWS Lambda
함수는 기본적으로 생성되면 자동으로 AWS CloudWatch Logs
와 연동이 됩니다. AWS Lambda
함수의 실행 로그가 자동으로 AWS CloudWatch Logs
에 기록되기 때문에 AWS Lambda
함수 코드 내에서 logging
모듈을 사용하여 로그를 생성하면 해당 로그를 AWS CloudWatch Logs
에서 모니터링 할 수 있습니다.
AWs Lambda
함수를 생성해보도록 하겠습니다. 먼저 AWS 공식 사이트에 로그인 하신 후 검색에 Lambda
를 입력하시면 다음과 같은 화면이 보이실 겁니다.
함수 생성을 클릭하시고 함수 이름과 사용하실 언어를 선택하시고 생성해주시면 됩니다. 저는 파이썬으로 선택하여 진행해보도록 하겠습니다.
이렇게 생성을 완료하시면 아래와 같이 함수가 생성된 것을 확인하실 수 있습니다.
함수를 클릭하시고 내부로 들어가면 함수의 코드를 입력할 수 있는 공간이 보이실 겁니다.
해당 코드 블럭에 실행시키고 싶은(로깅하고 싶은) 코드를 작성하시면 됩니다. 저는 간단하게 메시지 ID와 메시지 본문에 대한 내용을 로깅해보겠습니다.
import json
import logging
# CloudWatch Logs 설정
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info("Received event: %s", json.dumps(event))
for record in event['Records']:
message_body = record['body']
message_id = record['messageId']
# 메시지 수신 로그
logger.info("Received message with ID: %s", message_id)
logger.info("Message Body: %s", message_body)
try:
# 메시지 처리 성공 로그
logger.info("Successfully processed message with ID: %s", message_id)
except Exception as e:
# 메시지 처리 실패 로그
logger.error("Failed to process message with ID: %s. Error: %s", message_id, str(e))
raise e # 예외를 다시 발생시켜 Lambda가 실패를 감지하도록 함
작성한 AWS Lambda
함수는 SQS 대기열
에 메시지가 도착할 때 자동으로 실행되며 해당 함수가 대기열에서 메시지를 가져와서 처리하게 됩니다.
AWS Lambda
함수에서 메시지 처리가 완료되면 SQS 대기열
에서 해당 메시지가 자동으로 삭제됩니다.
AWS Lambda
함수의 코드를 업데이트한 후 "Deploy" 버튼을 눌러 변경 사항을 적용하셔야 합니다!!
위에서 작성한 AWS Lambda
함수가 AWS SQS
메시지를 읽고 AWS CloudWatch Logs
에 기록할 수 있도록 필요한 권한을 설정해줘야 합니다.
먼저 AWS Management Console
에서 IAM
메뉴에 들어갑니다.
이후 해당 화면에서 역할을 눌러 들어가줍니다.
다음과 같은 역할들이 있는데 그 중에서 위에서 생성해준 Lambda
함수를 클릭해줍니다.
해당 화면에서 권한 추가를 클릭 하시고 정책 연결에 들어가셔서 AmazonSQSFullAccess
와 CloudWatchLogsFullAccess
정책을 추가해줍니다.
각각의 정책은 Lambda
함수가 SQS
대기열과 CloudWatchLogs
에 접근하기 위한 권한을 부여하는 정책입니다.
Lambda
함수 생성 및 권한 설정이 완료되었다면 이제 SQS
의 설정에서 Lambda
트리거 설정을 할 차례입니다.
SQS
대기열에 들어가보시면 하단에 Lambda 트리거
구성할 수 있는 공간이 보이실 겁니다. Lambda 함수 트리거 구성
을 클릭합시다.
함수 선택 창에서 아까 생성해준 Lambda
함수를 클릭해주시고 저장을 눌러 트리거 구성을 완료합니다.
이제 CloudWatchLogs
에서 해당 함수에 대한 로그 그룹이 있는지 확인해봅시다. 먼저 AWS Management Console
에서 CloudWatch
메뉴에 들어가줍니다.
좌측 메뉴바에서 로그 그룹을 클릭하시면 생성해준 Lambda
함수 관련 로그 그룹이 생성된 것을 확인하실 수 있습니다. 해당 로그 그룹을 클릭하시면 화면 하단의 로그 스트림
에서 출력된 로그들을 확인하실 수 있습니다.
이제 SQS
에 메시지를 전송하여 Lambda
함수의 로그가 제대로 출력되는지 테스트해보도록 하겠습니다.
SQS 대기열
에 들어가서 다음과 같이 메시지를 전송하겠습니다.
SQS 대기열
에 메시지가 0개로 확인되네요. Lambda
함수가 제대로 메시지를 가져갔을 거라 예상이 됩니다.
이제 CloudWatch
로 가서 로그를 확인해봅시다. 로그 그룹에서 Lambda
함수 관련 로그 그룹을 클릭하시고 화면 하단에 로그 스트림을 확인해봅니다. 새로 생성된 로그 스트림이 보이는데 클릭해서 들어가줍니다.
정상적으로 로그가 출력되는 것을 확인하실 수 있습니다. SQS 대기열
에서 받은 메시지 내용도 한번 확인해보겠습니다.
메시지 바디에 추가해줬던 메시지 형태 그대로 수신받은 것을 확인하실 수 있습니다.
이렇게 해서 Amazon Lambda
함수를 생성하고 SQS
트리거 설정을 통해 AWS CloudWatchLogs
에서 SQS
메시지 수신, 삭제 시 로그 출력을 확인해볼 수 있었습니다.