[파이썬] AWS Lambda와 CloudWatch 로깅 설정

AWS Lambda는 서버리스 컴퓨팅 서비스로, 사용자가 코드를 실행할 수 있는 컴퓨팅 자원을 프로비저닝하거나 관리할 필요 없이 함수를 실행할 수 있도록 도와줍니다. 이러한 Lambda 함수를 로깅하기 위해 AWS CloudWatch 서비스를 사용할 수 있습니다.

CloudWatch는 AWS의 모니터링 및 관측 서비스로, AWS 리소스 및 응용 프로그램을 모니터링하고 로그, 지표, 이벤트 등을 수집할 수 있습니다. AWS Lambda 함수의 로그를 CloudWatch 서비스에 전송하여 효과적으로 모니터링하고 디버깅할 수 있습니다.

이 포스트에서는 AWS Lambda 함수에서 CloudWatch에 로그를 전송하는 방법에 대해 알아보겠습니다. 이를 위해 Python을 사용합니다.

전제 조건

본 포스트에서는 다음의 전제 조건이 필요합니다:

설정 단계

1. AWS CLI 구성

AWS Lambda 함수 및 CloudWatch에 로그를 전송하기 위해 AWS CLI를 사용할 것입니다. 먼저, AWS CLI를 구성해야 합니다. 다음의 명령을 사용하여 AWS CLI를 구성할 수 있습니다:

$ aws configure

명령을 실행하면 AWS 액세스 키와 비밀 액세스 키를 입력하라는 메시지가 표시됩니다. 해당 정보를 입력하고, 지역설정 및 출력 형식에 대한 기본값을 설정할 수 있습니다.

2. 필요한 모듈 설치

AWS Lambda 함수를 작성하기 전에 몇 가지 기본 모듈을 설치해야 합니다. 다음의 명령을 실행하여 필요한 모듈을 설치하세요:

$ pip install boto3

3. Lambda 함수 작성

이제 CloudWatch에 로그를 전송할 AWS Lambda 함수를 작성해보겠습니다. 다음의 예시 코드를 사용하여 Lambda 함수를 작성하세요:

import boto3
import json

def lambda_handler(event, context):
    # CloudWatch Logs client 생성
    cloudwatch = boto3.client('logs')
    
    # 로그 그룹 이름과 Lambda 함수 이름 설정
    log_group_name = 'my_lambda_logs'
    log_stream_name = context.function_name
    
    # 로그 이벤트 데이터 생성
    log_event_data = {
        'message': 'Hello, AWS Lambda!',
        'function_name': log_stream_name
    }
    
    # 로그 이벤트 전송
    response = cloudwatch.put_log_events(
        logGroupName=log_group_name,
        logStreamName=log_stream_name,
        logEvents=[
            {
                'timestamp': int(round(time.time() * 1000)),
                'message': json.dumps(log_event_data)
            }
        ]
    )
    
    return {
        'statusCode': 200,
        'body': json.dumps('Log sent to CloudWatch successfully.')
    }

위의 코드는 간단한 AWS Lambda 함수를 작성하는 예시입니다. lambda_handler 함수 내에서 CloudWatch Logs 클라이언트를 생성하고, 로그 그룹 및 스트림 이름을 설정한 다음, 로그 이벤트 데이터를 생성하여 CloudWatch에 전송합니다.

4. Lambda 함수 배포

위에서 작성한 AWS Lambda 함수를 배포하기 위해 다음의 명령을 실행하세요:

$ aws lambda create-function --function-name MyLambdaFunction \
--runtime python3.8 --role <iam-role-arn> --handler lambda_handler \
--zip-file fileb://./lambda_function.zip

위 명령에서 <iam-role-arn>은 AWS Lambda 함수에 할당할 IAM 역할의 ARN(Amazon Resource Name)을 의미합니다. --zip-file 옵션은 AWS Lambda 함수를 포함하는 ZIP 파일의 경로를 지정합니다.

5. Lambda 함수에 CloudWatch 트리거 추가

로깅 설정을 위해 Lambda 함수가 실행될 때 CloudWatch 트리거가 활성화되도록 설정해야 합니다. 다음의 명령을 사용하여 CloudWatch 트리거를 추가하세요:

$ aws events put-targets --rule <cloudwatch-rule-name> --targets <target-id>

위 명령에서 <cloudwatch-rule-name>은 CloudWatch 규칙의 이름을 의미하고, <target-id>는 Lambda 함수를 가리키는 값입니다.

6. 테스트

이제 Lambda 함수가 작동하는지 테스트해볼 차례입니다. 다음의 명령을 실행하여 Lambda 함수를 호출하세요:

$ aws lambda invoke --function-name MyLambdaFunction output.txt

output.txt라는 파일에 Lambda 함수의 응답이 저장됩니다.

결론

이렇게 AWS Lambda 함수에서 CloudWatch에 로그를 전송하는 방법을 알아보았습니다. CloudWatch를 사용하면 Lambda 함수의 로그를 중앙 집중식으로 저장하고 모니터링할 수 있어, 로깅 및 디버깅을 용이하게 할 수 있습니다.