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

이미지 처리 및 변환은 현대 웹 애플리케이션이나 모바일 앱에서 필수적인 기능입니다. 이러한 작업은 보통 서버 측에서 이루어지는 경우가 많은데, 이번 포스트에서는 AWS Lambda와 S3를 활용하여 간단하게 이미지 처리 및 변환을 수행하는 방법을 알아보겠습니다. 이를 통해 서버리스 아키텍처를 사용하여 더 효율적이고 유연한 이미지 관리를 할 수 있습니다.

AWS Lambda란?

AWS Lambda는 서버리스 컴퓨팅 서비스로, 코드를 실행하고 스케일링 및 관리를 자동으로 처리해줍니다. 이를 통해 서버 프로비저닝이나 인프라 관리에 대한 복잡성을 줄일 수 있습니다.

S3란?

Amazon S3(Simple Storage Service)는 스토리지 서비스로, 웹 애플리케이션 데이터를 저장하고, 보관하고, 검색할 수 있도록 해줍니다. 이미지, 동영상, 문서 등 다양한 종류의 데이터를 저장할 수 있으며, 필요에 따라 접근 권한을 설정할 수 있습니다.

이미지 처리 및 변환을 위한 AWS Lambda 함수 생성하기

먼저, AWS Management Console에 로그인하여 AWS Lambda로 이동합니다. 적절한 리전을 선택한 후, 아래의 단계에 따라 Lambda 함수를 생성합니다.

  1. Create function을 클릭하고, Author from scratch 옵션을 선택합니다.
  2. Function 이름을 입력하고, Python 런타임을 선택합니다.
  3. 필요한 경우, Execution role에서 새로운 역할을 생성하거나 기존 역할을 선택합니다. 이 역할은 Lambda 함수가 다른 AWS 서비스에 액세스할 수 있는 권한을 부여합니다.
  4. 함수 생성이 완료되면, 아래의 코드를 Lambda 함수 편집기에 작성합니다.
import boto3

s3 = boto3.client('s3')

def lambda_handler(event, context):
    # S3 버킷 이름과 처리할 이미지 파일 이름 설정
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    image_key = event['Records'][0]['s3']['object']['key']
    
    # 이미지 다운로드
    response = s3.get_object(Bucket=bucket_name, Key=image_key)
    image = response['Body'].read()
    
    # 이미지 처리 및 변환 로직
    # TODO: 원하는 이미지 처리 및 변환 작업 수행
    
    # 처리된 이미지 S3에 업로드
    new_key = 'processed_' + image_key
    s3.put_object(Body=image, Bucket=bucket_name, Key=new_key)
    
    return {
        'statusCode': 200,
        'body': 'Image processed and uploaded successfully to S3.'
    }

위에서 작성한 코드는 Lambda 함수가 S3 버킷에 업로드된 이미지를 다운로드하여 처리 후, 새로운 파일로 변환하여 다시 S3에 업로드하는 간단한 예시입니다. 여기에서는 이미지 처리 및 변환 로직을 추가해야 합니다.

Lambda 함수에 S3 트리거 추가하기

다음으로, Lambda 함수에 S3 트리거를 추가하여 해당 버킷에 새로운 이미지가 업로드될 때마다 함수가 실행되도록 설정합니다.

  1. Lambda 함수 편집기에서 Add trigger를 클릭합니다.
  2. 트리거 구성 페이지에서, Trigger configuration에서 S3를 선택합니다.
  3. S3 버킷과 이벤트 유형을 선택하고, 필요에 따라 프리픽스나 서픽스 패턴을 지정합니다.
  4. 모든 구성을 완료한 후, Add 버튼을 클릭하여 트리거를 추가합니다.

향후 해당 S3 버킷에 새로운 이미지가 업로드될 때마다 Lambda 함수가 자동으로 실행되고, 이미지 처리 및 변환 작업을 수행한 뒤 새로운 처리된 이미지를 S3에 업로드합니다.

결론

이번 포스트에서는 AWS Lambda와 S3를 활용하여 이미지 처리 및 변환 기능을 구현하는 방법을 알아보았습니다. 이를 통해 서버리스 아키텍처를 활용하여 더 효율적이고 간편한 이미지 관리를 할 수 있습니다. 더 복잡한 이미지 처리 작업을 수행하고 싶다면, 오픈소스 이미지 처리 라이브러리를 활용하거나, 다른 AWS 서비스와 연계하여 더 강력한 이미지 관리 시스템을 구축할 수도 있습니다.