ㅏㅏㄹ
PUT 이벤트 발생 시
이벤트에서 버킷 이름과 객체 키를 가져와 *원하는 파일을 가져오는 코드 작성
(아래 코드의 경우 현재에서 1시간 이전의 날짜로된 파일을 찾아오는 코드)
import json
import boto3
from datetime import datetime, timedelta
import pytz
def handler(event, context):
# S3 클라이언트 생성
s3 = boto3.client('s3')
# 이벤트에서 버킷 이름과 객체 키 가져오기
bucket_name = event['Records'][0]['s3']['bucket']['name']
object_key = event['Records'][0]['s3']['object']['key']
print(f"Bucket: {bucket_name}, Object Key: {object_key}")
# 현재 서울 시간 가져오기
seoul_tz = pytz.timezone('Asia/Seoul')
now = datetime.now(seoul_tz)
# 1시간 전 시간 계산
one_hour_ago = now - timedelta(hours=1)
# 언더플로우 처리: 0시에서 1시간 전은 전날 23시로 설정
if one_hour_ago.hour == 23 and now.hour == 0:
target_date = (now - timedelta(days=1)).strftime('%Y-%m-%d')
else:
target_date = one_hour_ago.strftime('%Y-%m-%d')
target_hour = one_hour_ago.strftime('%H')
# 예상되는 파일 이름 생성 (예: "dc crawling_data_YYYY-MM-DD_HH.json")
expected_file_key = f'dc/{target_date}_{target_hour}.json'
# expected_file_key = "hello"
try:
# 예상된 파일 읽기
file_obj = s3.get_object(Bucket=bucket_name, Key=expected_file_key)
file_content = file_obj['Body'].read().decode('utf-8')
json_data = json.loads(file_content)
send_llm(json_data)
return {
'statusCode': 200,
'body': json.dumps(f"Processed file: {expected_file_key}")
}
except s3.exceptions.NoSuchKey:
# 파일이 존재하지 않을 때의 처리
return {
'statusCode': 404,
'body': json.dumps(f"No file found for {expected_file_key}")
}
if __name__ == '__main__':
handler()
람다에서 테스트 항목에서 s3-put을 선택해서
기본 테스트 코드에서 버킷명을 추가한다.
{
"Records": [
{
"eventVersion": "2.0",
"eventSource": "aws:s3",
"awsRegion": "us-east-1",
"eventTime": "1970-01-01T00:00:00.000Z",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"requestParameters": {
"sourceIPAddress": "127.0.0.1"
},
"responseElements": {
"x-amz-request-id": "EXAMPLE123456789",
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
},
"s3": {
"s3SchemaVersion": "1.0",
"configurationId": "testConfigRule",
"bucket": {
"name": "[버킷명]",
"ownerIdentity": {
"principalId": "EXAMPLE"
},
"arn": "arn:aws:s3:::[버킷명]"
},
"object": {
"key": "test%2Fkey",
"size": 1024,
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901"
}
}
}
]
}