Aws

EC2에 접속 시 로그 DB에 저장 (SQS, DynamoDB)

wngnl05 2024. 12. 27. 14:50

2024.04.13 - [Aws] - EC2에서 SQS에 메세지 전송하는 코드

EC2 Setting

더보기

시작하기 전에 Bastion에서 계정을 하나 생성해줍니다.

passwd명령으로 계정에 비밀번호를 설정해줍니다.

sudo useradd wngnl
sudo passwd wngnl

 

Log를 저장할 login.txt를 만들어주겠습니다. <파일 이름 변경 가능>

sudo touch /var/log/login.txt
sudo chmod 777 /var/log/login.txt

 

Bastion에 접속할 때 마다 sh명령을 실행하도록 해주겠습니다. <login.sh 파일 이름은 아무 상관 없음>

login.sh에 접속하여 아래 코드를 넣어줍니다. <login.sh는 처음에 빈 파일이 맞음>

sudo vi /etc/profile.d/login.sh
aws sqs send-message --queue-url <SQS 링크> --message-body "$USER" --endpoint-url https://<앤드포인트 링크> --region ap-northeast-2
sudo chmod 777 /etc/profile.d/login.sh

 

다시 로그인 후 알맞은 USER가 입력되었는지 확인해주세요.

cat /var/log/login.txt

 

Lambda 함수를 만들어줍니다. < 권한도 추가해줍니다. >

- AmazonDynamoDBFullAccess

- AmazonSQSFullAccess

dynamo-db-function Code

더보기
import json
import boto3
from datetime import datetime
import pytz

def lambda_handler(event, context):
    
    # SQS 메시지 리스트에서 첫 번째 메시지의 본문 출력
    message_body = event['Records'][0]['body']

    # DynamoDB 연결
    dynamodb = boto3.resource('dynamodb')
    # DynamoDB 테이블 선택 (테이블 이름)
    table = dynamodb.Table('skills-table')

    # 한국 시간 가져오기 (정렬 키 값으로 사용)
    KST = pytz.timezone('Asia/Seoul')
    current_time = datetime.now(KST).isoformat()

    # DynamoDB에 데이터 삽입
    response = table.put_item(
        Item={
            'test': f"{current_time}",  # 파티션 키에 현재시간 설정
            'sort_key': "USER_NAME",  # 정렬 키 <원하는 값 사용>
            'USER': message_body # CloudWatch LogGroup Data
        }
    )
    print("Successfully inserted data into DynamoDB:", response)

    return response