[파이썬] AWS Lambda와 S3를 활용한 이미지 처리 및 변환

AWS Lambda는 서버리스 컴퓨팅 서비스로, 코드를 실행하기 위한 서버를 관리하지 않고도 원하는 작업을 수행할 수 있습니다. S3는 Amazon에서 제공하는 강력한 스토리지 서비스로, 파일을 저장하고 관리할 수 있습니다. 이 두 가지 서비스를 함께 사용하여 이미지 처리 및 변환 작업을 수행하는 방법을 알아보겠습니다.

1. AWS Lambda 함수 생성하기

처음으로, AWS Lambda에서 사용할 함수를 생성해야 합니다. 다음은 Python을 사용하여 함수를 생성하는 예제입니다.

import boto3

def lambda_handler(event, context):
    # S3 객체 생성
    s3 = boto3.client('s3')
    
    # S3 버킷에서 이미지 파일 다운로드
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    object_key = event['Records'][0]['s3']['object']['key']
    s3.download_file(bucket_name, object_key, '/tmp/image.jpg')
    
    # 이미지 처리 및 변환 작업
    # TODO: 이미지 처리 및 변환 코드 작성
    
    # 처리된 이미지를 S3에 업로드
    s3.upload_file('/tmp/processed_image.jpg', bucket_name, 'processed_image.jpg')

위의 예제 코드에서는 lambda_handler 함수가 AWS Lambda의 이벤트를 처리합니다. S3에서 이미지 파일을 다운로드한 후, 이미지 처리 및 변환 작업을 수행하고 처리된 이미지를 다시 S3에 업로드합니다. s3.download_files3.upload_file 함수를 사용하여 S3에 파일을 다운로드 및 업로드할 수 있습니다.

2. S3 이벤트 트리거 설정하기

이제 Lambda 함수가 S3에 저장된 이미지 파일을 자동으로 처리하게 하기 위해, S3 이벤트 트리거를 설정해야 합니다. 다음은 이벤트 트리거를 설정하는 방법입니다.

  1. AWS Management Console에 로그인하고, S3 콘솔로 이동합니다.
  2. 이미지 파일을 저장하고 있는 S3 버킷을 선택합니다.
  3. “속성” 탭으로 이동한 후, “이벤트” 섹션에서 “이벤트 추가” 버튼을 클릭합니다.
  4. 이벤트 구성을 설정합니다. 이벤트 트리거로 “PUT” 또는 “POST” 이벤트를 선택하고, 해당 이벤트에 대한 로그 및 Lambda 함수를 설정합니다.
  5. 변경 사항을 저장하고 S3 버킷에 이미지 파일을 업로드하면, Lambda 함수가 자동으로 실행되어 이미지 처리 및 변환 작업을 수행합니다.

3. 이미지 처리 및 변환 코드 작성하기

Lambda 함수에서 호출되는 lambda_handler 함수 내에서, 원하는 이미지 처리 및 변환 작업을 수행할 수 있습니다. 예를 들어, 이미지를 크기 조정하거나 필터를 적용하는 등 다양한 작업을 수행할 수 있습니다.

다음은 Python의 PIL (Python Imaging Library)을 사용하여 이미지 크기를 조정하는 예제 코드입니다.

from PIL import Image

def resize_image(image_path, output_path, size):
    img = Image.open(image_path)
    img.thumbnail(size)
    img.save(output_path)

이 예제에서는 resize_image 함수를 사용하여 이미지 파일을 읽고, 지정한 크기로 줄이고, 새로운 파일로 저장합니다.

4. Lambda 함수 배포 및 테스트하기

Lambda 함수를 배포하여 실제 이미지 처리 및 변환 작업을 수행해 볼 수 있습니다. 다음은 배포 및 테스트하는 방법입니다.

  1. AWS Management Console에 로그인하고, Lambda 콘솔로 이동합니다.
  2. “함수 생성” 버튼을 클릭하여 새로운 함수를 생성합니다.
  3. 함수 설정을 구성합니다. 함수 이름, 런타임 (Python 3.x), 역할, 타임아웃 등을 설정합니다.
  4. 코드 편집기에서 앞서 작성한 lambda_handler 함수를 붙여넣고, 필요한 패키지를 추가합니다.
  5. 변경 사항을 저장하고, 테스트 이벤트를 생성하여 Lambda 함수를 실행해 볼 수 있습니다.

Lambda 함수가 이미지 처리 및 변환 작업을 수행하고, 처리된 이미지를 S3에 업로드하는지 확인하세요.

이제 AWS Lambda와 S3를 활용하여 신속하고 효율적으로 이미지 처리 및 변환 작업을 수행할 수 있습니다. 이를 통해 서버 관리 및 인프라 구성에 대한 부담을 줄이고, 더욱 빠르고 확장 가능한 애플리케이션을 개발할 수 있습니다.