Aws
EC2에 접속 시 로그 DB에 저장 (CloudWatch, DynamoDB)
wngnl05
2024. 12. 27. 14:50
2024.04.21 - [Aws] - EC2 접속 시 CloudWatch LogGroup에 USER 로그 작성하기
Lambda함수를 3개 만들어줍니다.
1. cloudwatch-function < Trigger - CloudWatch LogGorup >
2. dynamo-db-function
cloudwatch-function Code
더보기
import base64
import json
import zlib
import boto3
def lambda_handler(event, context):
# CloudWatch Logs 이벤트 데이터 추출
event_data = event['awslogs']['data']
# base64 디코딩 및 압축 해제
decoded_data = base64.b64decode(event_data)
decompressed_data = zlib.decompress(decoded_data, 16 + zlib.MAX_WBITS)
# JSON 파싱
log_data = json.loads(decompressed_data)
lambda_client = boto3.client('lambda')
# 로그 이벤트 메시지 출력
log_events = log_data['logEvents']
for log_event in log_events:
print(log_event['message'])
# 람다 함수 호출
response = lambda_client.invoke(
FunctionName='dynamo-db-function', # 호출할 람다 함수 이름
InvocationType='Event', # 비동기 호출
Payload=json.dumps(log_event['message']) # 전달할 데이터
)
# 처리 결과 반환
return {
'statusCode': 200,
'body': json.dumps('Log data processed successfully!')
}
dynamo-db-function Code
더보기
import json
import boto3
from datetime import datetime
def lambda_handler(event, context):
# DynamoDB 연결
dynamodb = boto3.resource('dynamodb')
# DynamoDB 테이블 선택 (테이블 이름)
table = dynamodb.Table('<DynamoDB 테이블 이름>')
# 현재 시간 가져오기 (정렬 키 값으로 사용)
current_time = datetime.now().isoformat()
# DynamoDB에 데이터 삽입
response = table.put_item(
Item={
'test': f"{current_time}", # 파티션 키에 현재시간 설정
'sort_key': "USER_NAME", # 정렬 키 <원하는 값 사용>
'USER': event # CloudWatch LogGroup Data
}
)
print("Successfully inserted data into DynamoDB:", response)
return response