min8282

[AWS] Amazon S3 트리거를 사용하여 썸네일 이미지 생성 본문

Security/Cloud

[AWS] Amazon S3 트리거를 사용하여 썸네일 이미지 생성

min8282 2025. 3. 6. 15:57

https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/with-s3-tutorial.html

 

자습서: Amazon S3 트리거를 사용하여 썸네일 이미지 생성 - AWS Lambda

Amazon S3 버킷 이름은 전역적으로 고유하지만 리소스 기반 정책을 사용할 때는 버킷이 반드시 계정에 속하도록 지정하는 것이 가장 좋습니다. 버킷을 삭제하면 다른 AWS 계정가 동일한 Amazon 리소

docs.aws.amazon.com

이 글에서는 Amazon S3 버킷에 업로드된 이미지를 자동으로 리사이징 하여 다른 S3 버킷에 저장하는 과정을 다룹니다. Amazon 공식 자습서를 참고하여 Amazon S3 트리거를 사용해 자동으로 썸네일 이미지를 생성하는 Lambda 함수를 만들어 보았습니다.

실습 목표

  • Amazon S3에 이미지 파일이 업로드되면 자동으로 Lambda 함수를 실행하도록 트리거를 설정합니다.
  • Lambda 함수는 이미지를 리사이징한 후, 썸네일을 다른 S3 버킷에 저장합니다.
  • AWS Management Console을 사용하여 실습을 진행합니다.

1. S3 버킷 생성

Amazon S3>범용 버킷>버킷 만들기

Source 버킷: msjwabucket (원본 이미지가 업로드될 버킷)

Destination 버킷: msjwabucket-resized (리사이징된 이미지가 저장될 버킷)


2. Lambda 실행 권한 정책 생성

Lambda 함수를 생성하는 첫 번째 단계는 권한 정책의 생성입니다. Lambda 함수가 S3 버킷과 CloudWatch 로그에 접근할 수 있도록 IAM 정책을 생성합니다. 이 자습서에서 정책을 통해 Amazon S3 버킷에 대한 읽기 및 쓰기 권한을 Lambda에 부여하고 Amazon CloudWatch Logs에 쓸 수 있습니다.

IAM>정책>정책 생성

다음 JSON 정책을 입력하고

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:CreateLogGroup",
                "logs:CreateLogStream"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::*/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::*/*"
        }
    ]
}

 

 

정책 이름은 자습서와 비슷한 이름으로 LambdaS3Policy01로 이름 설정합니다.

현재 생성 중인 정책의 정의된 권한을 한 번 확인해 주고 정책을 생성합니다.


3. 실행 역할(Role) 생성

다음은 역할을 생성하겠습니다. 실행 역할은 AWS 서비스 및 리소스에 액세스할 수 있는 권한을 Lambda 함수에 부여하는 IAM 역할입니다. 함수에 Amazon S3 버킷에 대한 읽기 및 쓰기 액세스 권한을 부여하려면 이전 단계에서 생성한 권한 정책을 연결합니다.

IAM>역할>역할 생성

신뢰할 수 있는 엔터티 유형: AWS 서비스 선택

사용 사례: Lambda 선택

권한 정책: 앞서 만든 LambdaS3Policy01 선택

역할 이름: LambdaS3Role로 지정 후 역할 생성


4. Lambda 함수 생성

AWS CLI 또는 Lambda 콘솔을 사용하여 Lambda 함수를 생성할 수 있습니다. 선택한 언어의 지침에 따라 함수를 생성합니다. 저는 이미 만들어 둔 lambda_function.zip을 사용하겠습니다. 해당 파일의 코드 관련 내용은 AWS 공식 자습서 링크에서 확인할 수 있습니다.

Lambda>함수>함수 생성

함수 이름: CreateThumbnail

런타임: Python 3.9

기본 실행 역할: 기존 역할 사용 선택 후 LambdaS3Role 선택

생성 후 코드 소스에서 lambda_function.zip 파일을 업로드하고 저장합니다.

lambda_function.zip 파일 업로드 후 저장


5. Lambda 트리거 추가

CreateThumbnail 함수에서 트리거 추가 클릭

트리거 구성: S3 선택

버킷: msjwabucket

이벤트 유형: 모든 객체 생성 이벤트

재귀 호출 부분에 주의 사항을 확인 후 추가 버튼 클릭

S3 트리거 추가 완료


6. Amazon S3 트리거를 사용하여 함수 테스트

 Lambda 함수가 정상적으로 잘 작동하는지 이미지 파일을 올려서 확인해 봅니다.

Source 버킷(msjwabucket)에 테스트 이미지를 업로드합니다.

msjwabucket에 noh.png 파일이 업로드 확인

Lambda 함수가 실행되면서 Destination 버킷(msjwabucket-resized)에 썸네일 이미지가 자동으로 생성됩니다.

생성된 리사이징 이미지를 확인하면 성공적으로 작동하는 것을 확인할 수 있습니다. (341.4KB -> 103.2KB)


7. 정리 및 삭제

실습이 마무리 됐으므로 생성한 리소스를 삭제합니다.

CreateThumbnail Lambda 함수 삭제

msjwabucket-resized 버킷 삭제 (내부 객체 먼저 삭제 필요)

msjwabucket 버킷 삭제

 

 Lambda를 사용하여 Amazon S3 버킷에 추가된 객체에 대한 파일 처리 작업을 수행하는 방법을 실습했습니다. 서버를 따로 생성하지 않고도 이벤트 기반으로 이미지를 처리할 수 있는 점이 매우 유용했습니다.