[파이썬] AWS Lambda와 CloudWatch 연동을 통한 모니터링

AWS Lambda는 서버리스 컴퓨팅 서비스로, 코드 실행에 필요한 리소스를 자동으로 관리해줍니다. 이러한 Lambda 함수를 사용하여 애플리케이션을 실행할 때, 해당 함수의 성능 및 상태를 모니터링할 필요가 있습니다.

이번 블로그에서는 Python을 사용한 AWS Lambda와 CloudWatch의 연동을 통한 모니터링에 대해 알아보겠습니다. CloudWatch는 AWS의 모니터링 및 관측 서비스로, Lambda 함수의 지표(metric)를 수집하고, 경보 알림을 설정하며, 로그를 저장할 수 있습니다.

1. Lambda와 CloudWatch 연동

AWS Lambda와 CloudWatch를 연동하기 위해서는 다음의 단계를 따라야 합니다:

1.1. Lambda 함수에 CloudWatch 클라이언트 추가

Python 코드에서 CloudWatch 클라이언트를 생성하여 사용하려면, boto3 모듈을 설치해야 합니다:

pip install boto3

boto3 라이브러리를 사용하여 Lambda 함수에서 CloudWatch 클라이언트를 생성할 수 있습니다:

import boto3

cloudwatch = boto3.client('cloudwatch')

1.2. 메트릭 생성 및 로그 작성

Lambda 함수에서 메트릭을 생성하고 로그를 작성하는 예시를 보겠습니다:

def lambda_handler(event, context):
    # 메트릭 생성
    cloudwatch.put_metric_data(
        Namespace='MyNamespace',
        MetricData=[
            {
                'MetricName': 'MyMetric',
                'Dimensions': [
                    {
                        'Name': 'MyDimension',
                        'Value': 'MyValue'
                    },
                ],
                'Value': 1,
                'Unit': 'Count'
            },
        ]
    )

    # 로그 작성
    print('Lambda function executed successfully!')

위 예시에서는 put_metric_data 메서드를 사용하여 새로운 메트릭을 생성합니다. 마찬가지로, 로그를 작성하기 위해 print() 함수를 사용할 수 있습니다.

1.3. CloudWatch 이벤트 및 경보 설정

CloudWatch 이벤트와 경보를 설정하여 Lambda 함수의 성능을 모니터링할 수 있습니다. 이벤트와 경보는 AWS 콘솔 또는 boto3 라이브러리를 사용하여 설정할 수 있습니다.

AWS 콘솔을 통한 설정:

  1. AWS 콘솔에서 Lambda 함수 콘솔을 엽니다.
  2. Lambda 함수를 선택하고, “모니터링” 메뉴로 이동합니다.
  3. CloudWatch 메트릭을 확인하고, 필요한 경우 경보 알림을 설정합니다.

boto3 라이브러리를 통한 설정:

cloudwatch.put_metric_alarm(
    AlarmName='MyLambdaAlarm',
    ComparisonOperator='GreaterThanThreshold',
    EvaluationPeriods=1,
    MetricName='MyMetric',
    Namespace='MyNamespace',
    Period=60,
    Statistic='Average',
    Threshold=10.0,
    ActionsEnabled=False,
    AlarmDescription='Lambda function alarm'
)

위 예시는 put_metric_alarm 메서드를 사용하여 경보를 설정하는 방법을 보여줍니다.

2. 사용 예시

우리가 작성한 Lambda 함수가 정상적으로 작동하는지 확인하기 위해 CloudWatch를 사용할 수 있습니다. Lambda 함수에 대한 로그와 메트릭을 모니터링하여 이상 유무를 파악할 수 있습니다.

예시로, Lambda 함수의 실행에 걸린 시간을 측정하기 위해 다음 코드를 사용할 수 있습니다:

import time

def lambda_handler(event, context):
    start_time = time.time()
  
    # Lambda 함수의 실행 시간을 확인하기 위해 2초간 지연
    time.sleep(2)
  
    end_time = time.time()
    execution_time = end_time - start_time
  
    print(f'Lambda function executed in {execution_time} seconds.')
  
    # 타임메트릭 생성
    cloudwatch.put_metric_data(
        Namespace='MyNamespace',
        MetricData=[
            {
                'MetricName': 'LambdaExecutionTime',
                'Value': execution_time,
                'Unit': 'Seconds'
            },
        ]
    )

위 예시에서는 time 모듈을 사용하여 Lambda 함수의 실행 시간을 측정합니다. 측정된 시간을 타임메트릭으로 생성하여 CloudWatch에 전송합니다.

3. 결론

AWS Lambda와 CloudWatch를 연동하여 Lambda 함수의 성능과 상태를 모니터링할 수 있습니다. CloudWatch를 사용하면 Lambda 함수의 메트릭을 수집하고, 경보를 설정하며, 로그를 기록할 수 있습니다. 이를 통해 애플리케이션을 실시간으로 관찰하고, 성능 문제를 해결할 수 있습니다.