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 함수가 실행될 때 모니터링 데이터를 수집하고, 경보 발생 시 알림을 받을 수 있게 됩니다. ```