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

AWS Lambda와 Amazon S3는 인기 있는 AWS 서비스입니다. 이들을 함께 사용하면 이미지 파일을 업로드하고 가공하는 강력한 기능을 제공할 수 있습니다. 이번 블로그 게시물에서는 AWS Lambda와 S3를 활용하여 이미지를 처리하고 가공하는 방법에 대해 알아보겠습니다. Python을 사용하여 예제 코드를 작성할 것입니다.

1. AWS Lambda 함수 설정하기

AWS Lambda에서 이미지를 처리하기 위해 먼저 Lambda 함수를 설정해야 합니다. AWS 콘솔에 로그인하여 Lambda 서비스를 엽니다.

  1. Create function(함수 생성) 버튼을 클릭합니다.
  2. Author from scratch(시작부터 시작) 옵션을 선택합니다.
  3. Function name(함수 이름)에 적절한 이름을 입력합니다.
  4. Runtime(런타임)으로 Python 3.x를 선택합니다.
  5. Permission(권한) 섹션에서 Choose or create an execution role(실행 역할 선택 또는 생성)을 클릭합니다.
  6. Use an existing role(기존 역할 사용)을 선택하고, 기존에 사용 중인 역할을 선택합니다.
  7. Function code(함수 코드) 섹션에서 아래 예제 코드처럼 Lambda 함수 코드를 작성합니다.
import json
import boto3

def lambda_handler(event, context):
    # S3에서 이미지를 다운로드하는 코드를 작성합니다.
    
    # 이미지를 가공하는 코드를 작성합니다.
    
    # 가공된 이미지를 S3에 업로드하는 코드를 작성합니다.
    
    return {
        'statusCode': 200,
        'body': json.dumps('Image processing successful!')
    }
  1. 위 코드는 Lambda 함수의 기본 구조를 제공합니다. 이미지를 다운로드하고 가공하는 코드를 작성해야 합니다.
  2. 필요한 경우 AWS SDK를 사용하여 S3 버킷과 이미지를 다운로드하고 업로드하는 기능을 추가할 수 있습니다.

2. S3 버킷 설정하기

이미지 파일을 업로드하고 다운로드하기 위해 S3 버킷을 설정해야 합니다. AWS 콘솔에서 S3 서비스를 엽니다.

  1. Create bucket(버킷 생성) 버튼을 클릭합니다.
  2. Bucket name(버킷 이름)을 입력합니다. 유니크한 이름을 지정해야 합니다.
  3. 기타 설정 옵션을 선택하고 적절히 구성합니다.

3. Lambda와 S3 연결하기

Lambda 함수에서 S3 버킷과 상호작용하기 위해 연결을 설정해야 합니다. Lambda 함수 설정 창으로 돌아가서 다음 단계를 따릅니다.

  1. Designer(디자이너) 섹션에서 Lambda 함수 실행에 대한 트리거를 추가할 수 있습니다. “S3”를 선택하고, 연결할 S3 버킷을 선택합니다.
  2. Function code(함수 코드) 섹션에서 이미지를 다운로드하고 가공하는 코드를 작성합니다. 여기서는 Python Imaging Library (PIL)을 사용하여 이미지를 조작하는 예제 코드를 작성해보겠습니다.
import json
import boto3
from PIL import Image

def lambda_handler(event, context):
    s3 = boto3.resource('s3')
    
    # S3에서 이미지를 다운로드합니다.
    bucket_name = 'your-bucket-name'
    image_key = event['Records'][0]['s3']['object']['key']
    image_object = s3.Object(bucket_name, image_key)
    image = Image.open(image_object.get()['Body'])
    
    # 이미지를 가공합니다.
    new_image = image.resize((800, 600))
    
    # 가공된 이미지를 S3에 업로드합니다.
    new_image_key = 'processed/' + image_key
    s3.Bucket(bucket_name).put_object(Key=new_image_key, Body=new_image)
    
    return {
        'statusCode': 200,
        'body': json.dumps('Image processing successful!')
    }
  1. 위 코드는 S3에서 이미지를 다운로드하고, 크기를 조절하여 가공된 이미지를 S3에 업로드하는 예제를 보여줍니다. 필요에 따라 필터링, 텍스트 추가, 회전 등의 추가적인 이미지 가공 작업을 수행할 수 있습니다.

4. 테스트하기

Lambda 함수와 S3 설정이 완료되었습니다. 이제 이미지를 업로드하여 Lambda 함수가 이미지를 처리하고 S3에 가공된 이미지를 업로드하는지 확인해 보겠습니다.

  1. AWS Lambda 콘솔에서 Test(테스트) 버튼을 클릭합니다.
  2. Event template(이벤트 템플릿) 드롭다운 목록에서 “S3 Put”을 선택합니다.
  3. 이벤트에 대한 상세정보를 입력합니다. S3 버킷 이름과 이미지 키를 지정해야 합니다.
  4. Create 버튼을 클릭하여 테스트 이벤트를 생성합니다.
  5. Test(테스트) 버튼을 클릭합니다.

Lambda 함수와 S3 연결이 정상적으로 작동한다면, 원본 이미지를 다운로드하고 가공한 이미지를 S3에 업로드하게 될 것입니다.

AWS Lambda와 S3를 사용하여 이미지 처리와 가공을 수행하는 것은 매우 강력한 기능입니다. 이러한 기능을 사용하면 이미지 리사이즈, 필터링, 텍스트 추가 등 다양한 이미지 작업을 자동화할 수 있습니다. 이를 통해 이미지 처리 작업의 효율성과 편의성을 크게 향상시킬 수 있습니다.