[파이썬] 파이썬 애플리케이션의 AWS Lambda 모니터링 및 경고 설정

AWS Lambda는 서버리스 아키텍처를 구현하기 위해 많은 개발자들에게 인기가 있는 서비스입니다. 그럼에도 불구하고, 애플리케이션의 안정성과 장애 대응을 위해서는 Lambda 함수의 모니터링과 경고 설정이 매우 중요합니다.

이 블로그 포스트에서는 파이썬 언어로 작성된 AWS Lambda 애플리케이션의 모니터링과 경고 설정에 대해 알아보겠습니다. 이를 위해 AWS의 두 가지 서비스인 Amazon CloudWatch와 Amazon SNS를 사용할 것입니다.

1. CloudWatch 로그 그룹 생성

AWS Lambda 함수로 생성되는 로그를 모니터링하기 위해 CloudWatch 로그 그룹을 먼저 생성해야 합니다.

import boto3

def create_cloudwatch_log_group(log_group_name):
    client = boto3.client('logs')
    response = client.create_log_group(logGroupName=log_group_name)
    return response
    
# 로그 그룹 생성 예시
response = create_cloudwatch_log_group('/aws/lambda/my-lambda-function')
print(response)

위의 예제 코드에서는 boto3 라이브러리를 사용하여 create_log_group 함수를 호출하여 로그 그룹을 생성하고, 생성된 응답을 반환합니다.

2. CloudWatch 경보 생성

이제 CloudWatch 경보를 생성하여 Lambda 함수의 지표를 모니터링하고 경고를 받을 수 있게 설정해야 합니다.

import boto3

def create_cloudwatch_alarm(alarm_name, metric_name, threshold):
    client = boto3.client('cloudwatch')
    response = client.put_metric_alarm(
        AlarmName=alarm_name,
        ComparisonOperator='GreaterThanOrEqualToThreshold',
        EvaluationPeriods=1,
        MetricName=metric_name,
        Namespace='AWS/Lambda',
        Period=60,
        Statistic='SampleCount',
        Threshold=threshold,
        ActionsEnabled=True,
        AlarmDescription='Alarm when Lambda function errors occur',
        AlarmActions=[sns_topic_arn],
        Dimensions=[
            {
                'Name': 'FunctionName',
                'Value': 'my-lambda-function'
            },
        ],
        Unit='Count'
    )
    return response

# 경보 생성 예시
response = create_cloudwatch_alarm('my-lambda-function-errors', 'Errors', 1)
print(response)

위의 예제 코드에서는 put_metric_alarm 함수를 사용하여 경보를 생성하고, 경보의 이름, 비교 연산자, metric 이름, 경계값 등의 설정을 지정합니다. 또한, 경보가 활성화 되도록 ActionsEnabled를 True로 설정하고, 경보가 발생했을 때 SNS 주제를 통해 알림을 수신할 수 있도록 AlarmActions를 설정합니다.

3. SNS 주제 생성

CloudWatch 경보에서 알림을 수신하기 위해 SNS 주제를 생성해야 합니다.

import boto3

def create_sns_topic(topic_name):
    client = boto3.client('sns')
    response = client.create_topic(Name=topic_name)
    return response

# SNS 주제 생성 예시
response = create_sns_topic('Lambda-Alerts')
print(response)

위의 예제 코드에서는 create_topic 함수를 호출하여 SNS 주제를 생성하고, 생성된 응답을 반환합니다.

4. Lambda 함수에 알림 추가

마지막으로, Lambda 함수에 알림을 추가하여 CloudWatch 경보 발생 시 알림을 받을 수 있도록 설정합니다.

import boto3

def add_notification_to_lambda_function(function_name, sns_topic_arn):
    client = boto3.client('lambda')
    response = client.add_permission(
        FunctionName=function_name,
        StatementId='sns-publish',
        Action='lambda:InvokeFunction',
        Principal='sns.amazonaws.com',
        SourceArn=sns_topic_arn
    )
    return response

# Lambda 함수에 알림 추가 예시
response = add_notification_to_lambda_function('my-lambda-function', sns_topic_arn)
print(response)

위의 예제 코드에서는 add_permission 함수를 호출하여 Lambda 함수에 알림을 추가하고, 추가된 응답을 반환합니다.

이제 AWS Lambda 함수의 모니터링 설정과 알림 설정이 완료되었습니다. CloudWatch 로그 그룹, CloudWatch 경보, SNS 주제 및 Lambda 함수에 알림이 추가되었으므로, Lambda 함수가 실행될 때 모니터링 데이터를 수집하고, 경보 발생 시 알림을 받을 수 있게 됩니다. ```