[파이썬] AWS Lambda와 S3를 활용한 파일 처리 및 관리

AWS Lambda와 S3는 클라우드 기반의 서비스로, 이들을 조합하여 파일을 처리하고 관리할 수 있습니다. 이를 통해 효율적이고 확장 가능한 파일 관리 솔루션을 구축할 수 있습니다. 이번 글에서는 AWS Lambda와 S3를 활용한 파일 처리 및 관리를 위한 방법을 알아보겠습니다.

1. AWS Lambda란?

AWS Lambda는 서버리스 컴퓨팅 서비스로, 코드를 실행하기 위해 서버를 프로비저닝하거나 관리할 필요 없이 필요한 시점에 코드를 실행할 수 있습니다. 간편한 배포와 자동 스케일링으로 트래픽에 유연하게 대응할 수 있으며, 비용 효율적인 서비스로 주목받고 있습니다.

2. S3란?

S3는 AWS의 객체 스토리지 서비스로, 여러 용도의 데이터를 저장하고 액세스할 수 있는 안전하고 확장 가능한 스토리지 제공합니다. 파일 및 동영상 업로드, 정적 웹 사이트 호스팅, 데이터 백업 등 다양한 용도로 활용할 수 있습니다.

3. 파일 처리 및 관리 방법

3.1. 이벤트-기반 파일 처리

AWS Lambda를 사용하면 S3 버킷에 새로운 파일이 업로드되었을 때 이를 감지하고 자동으로 처리할 수 있습니다. 이를 이용해 파일 변환이나 분석, 압축 등 다양한 작업을 자동화할 수 있습니다.

import boto3

def process_file(event, context):
    s3_client = boto3.client('s3')
    for record in event['Records']:
        bucket_name = record['s3']['bucket']['name']
        object_key = record['s3']['object']['key']
        
        # 파일 처리 로직 구현
        # ...

위의 예제에서 process_file 함수는 S3 버킷에 새로운 파일 업로드 이벤트가 발생하면 호출되는 함수입니다. boto3 라이브러리를 사용하여 S3 클라이언트를 생성하고, 이벤트 정보를 통해 업로드된 파일의 버킷 이름과 오브젝트 키를 얻어올 수 있습니다.

3.2. 파일 다운로드 및 업로드

AWS Lambda를 사용하여 파일을 다운로드하고 업로드할 수 있습니다. 예를 들어, 특정 조건에 따라 S3 버킷에 존재하는 파일을 다운로드하여 수정 후 다시 해당 버킷에 업로드하는 등의 작업을 수행할 수 있습니다.

import boto3

def process_file(event, context):
    s3_client = boto3.client('s3')
    
    # 파일 다운로드
    s3_client.download_file('my-bucket', 'path/to/file.txt', '/tmp/local_file.txt')
    
    # 파일 수정
    with open('/tmp/local_file.txt', 'a') as file:
        file.write('Hello, Lambda and S3!')
    
    # 수정된 파일 업로드
    s3_client.upload_file('/tmp/local_file.txt', 'my-bucket', 'path/to/file.txt')

위의 예제에서 download_file 메서드를 사용하여 S3 버킷에서 파일을 다운로드하고, upload_file 메서드를 사용하여 수정된 파일을 다시 해당 버킷에 업로드합니다.

3.3. 파일 삭제

특정 이벤트에 대응하여 S3 버킷에서 파일을 삭제할 수 있습니다. 예를 들어, 파일 정보를 DB에 저장하거나 로그 데이터를 기반으로 파일을 삭제할 때 AWS Lambda를 사용할 수 있습니다.

import boto3

def process_file(event, context):
    s3_client = boto3.client('s3')
    
    for record in event['Records']:
        bucket_name = record['s3']['bucket']['name']
        object_key = record['s3']['object']['key']
        
        # 파일 삭제
        s3_client.delete_object(Bucket=bucket_name, Key=object_key)

위의 예제에서 delete_object 메서드를 사용하여 S3 버킷에서 파일을 삭제합니다. bucket_nameobject_key를 통해 삭제할 파일의 위치를 지정할 수 있습니다.

4. 결론

AWS Lambda와 S3를 조합하여 파일 처리 및 관리를 할 수 있다는 것을 알아보았습니다. 이를 통해 자동화된 파일 처리 작업을 구현하고, 비용을 절감하며, 확장 가능한 파일 관리 솔루션을 구축할 수 있습니다.

AWS Lambda와 S3의 다양한 기능을 활용하여 파일 처리와 관리를 좀 더 효율적으로 수행할 수 있으니, 필요한 경우 참고하여 적용해 보시기 바랍니다.