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 콘솔을 통한 설정:
- AWS 콘솔에서 Lambda 함수 콘솔을 엽니다.
- Lambda 함수를 선택하고, “모니터링” 메뉴로 이동합니다.
- 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 함수의 메트릭을 수집하고, 경보를 설정하며, 로그를 기록할 수 있습니다. 이를 통해 애플리케이션을 실시간으로 관찰하고, 성능 문제를 해결할 수 있습니다.