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

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

이 자습서에서는 Lambda 함수를 생성하고 Amazon Simple Storage Service(Amazon S3)에 대한 트리거를 구성합니다. Amazon S3는 S3 버킷에 업로드된 각 이미지 파일에 대해 CreateThumbnail 함수를 호출합니다. 이 함수는 소스 S3 버킷에서 이미지 객체를 읽고 대상 S3 버킷에 저장할 썸네일 이미지를 생성합니다.

참고

이 자습서를 진행하려면 중급 수준의 AWS 및 Lambda 도메인 지식, Docker 작업 및 AWS SAM 관련 지식이 필요합니다. 자습서: Amazon S3 트리거를 사용하여 Lambda 함수 호출 자습서를 먼저 진행하는 것이 좋습니다.

이 자습서에서는 AWS Command Line Interface(AWS CLI)를 사용하여 다음 AWS 리소스를 생성합니다.

Lambda 리소스

  • Lambda 함수 함수 코드는 Node.js, Python 또는 Java를 선택할 수 있습니다.

  • 함수에 대한 .zip 파일 아카이브 배포 패키지입니다.

  • 함수를 호출할 Amazon S3 권한을 부여하는 액세스 정책입니다.

AWS Identity and Access Management(IAM) 리소스

  • 함수에 필요한 권한을 부여하는 관련 권한 정책이 있는 실행 역할입니다.

Amazon S3 리소스

  • 함수를 호출하는 알림 구성을 포함하는 소스 S3 버킷입니다.

  • 함수가 크기 변경된 이미지를 저장하는 대상 S3 버킷입니다.

사전 조건

  • AWS 계정

    Lambda 및 기타 AWS 서비스를 사용하려면 AWS 계정이 필요합니다. 계정이 없는 경우 aws.amazon.com을 방문하여 AWS 계정 생성을 선택합니다. 지침은 새 AWS 계정을 생성 및 활성화하려면 어떻게 해야 합니까? 섹션을 참조하세요.

  • 명령줄

    다음 단계를 완료하려면 명령을 실행할 명령줄 터미널 또는 셸이 필요합니다. 명령과 예상 결과는 별도의 블록에 나열됩니다.

    aws --version

    다음 결과가 표시됩니다.

    aws-cli/2.0.57 Python/3.7.4 Darwin/19.6.0 exe/x86_64

    긴 명령의 경우 이스케이프 문자(\)를 사용하여 명령을 여러 행으로 분할합니다.

    Linux 및 macOS는 선호 셸과 패키지 관리자를 사용합니다. Windows 10에서 Linux용 Windows Subsystem을 설치하여 Ubuntu와 Bash의 Windows 통합 버전을 가져옵니다.

  • AWS CLI

    이 자습서에서는 AWS CLI 명령을 사용하여 Lambda 함수를 생성하고 호출합니다. AWS CLI를 설치하고 AWS 자격 증명을 사용하여 구성합니다.

  • 언어 도구

    언어 지원 도구 및 사용하려는 언어(Node.js, Python 또는 Java)의 패키지 관리자를 설치합니다. 제안된 도구에 대한 자세한 내용은 코드 작성 도구 섹션을 참조하세요.

단계 1. S3 버킷 생성 및 샘플 객체 업로드

다음 단계에 따라 S3 버킷을 생성하고 객체를 업로드합니다.

  1. Amazon S3 콘솔을 엽니다.

  2. 2개의 S3 버킷을 생성합니다. 대상 버킷의 이름을 source-resized로 지정해야 합니다. 여기서 source는 소스 버킷의 이름입니다. 예를 들어 소스 버킷은 mybucket이고 대상 버킷은 mybucket-resized입니다.

  3. 소스 버킷에서 .jpg 객체(예: HappyFace.jpg)를 업로드합니다.

    Lambda 함수를 테스트하기 전에 이 샘플 객체를 생성해야 합니다. Lambda invoke 명령을 사용하여 함수를 수동으로 테스트할 때, 소스 버킷 이름과 새로 생성된 객체로서 HappyFace.jpg를 지정하는 함수에 샘플 이벤트 데이터를 전달합니다.

단계 2. IAM 정책 생성

Lambda 함수에 대한 권한을 정의하는 IAM 정책을 생성합니다. 이 함수에는 다음을 수행할 권한이 있어야 합니다.

  • 소스 S3 버킷에서 객체 가져오기.

  • 크기가 조정된 객체를 대상 S3 버킷 저장.

  • Amazon CloudWatch Logs에 로그 작성

IAM 정책을 만들려면

  1. IAM 콘솔에서 정책 페이지를 엽니다.

  2. 정책 생성(Create policy)을 선택합니다.

  3. JSON 탭을 선택한 후 다음 정책을 붙여 넣습니다. mybucket을 앞서 생성한 소스 버킷의 이름으로 바꿔야 합니다.

    { "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:::mybucket/*" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::mybucket-resized/*" } ] }
  4. 다음: 태그를 선택합니다.

  5. 다음: 검토(Next: Review)를 선택합니다.

  6. [정책 검토(Review policy)]의 [이름(Name)]에 AWSLambdaS3Policy를 입력합니다.

  7. 정책 생성(Create policy)을 선택합니다.

단계 3. 실행 역할 생성

Lambda 함수에 AWS 리소스에 액세스할 수 있는 권한을 제공하는 실행 역할을 만듭니다.

실행 역할을 만들려면

  1. IAM 콘솔에서 역할(Roles) 페이지를 엽니다.

  2. 역할 생성(Create role)을 선택합니다.

  3. 다음 속성을 사용하여 역할을 만듭니다.

    • 신뢰할 수 있는 엔터티Lambda

    • 권한 정책AWSLambdaS3Policy

    • 역할 이름lambda-s3-role

단계 4. 함수 코드 생성

다음 코드 예제에서 Amazon S3 이벤트에는 소스 S3 버킷 이름과 객체 키 이름이 포함됩니다. 객체가 .jpg 또는 .png 이미지 파일인 경우 소스 버킷에서 이미지를 읽고 썸네일 이미지를 생성한 다음 대상 S3 버킷에 썸네일을 저장합니다.

다음을 참조하세요.

  • 이 코드는 대상 버킷이 존재하고 해당 이름이 소스 버킷 이름과 -resized가 이어진 형식이라고 가정합니다.

  • 생성된 각 썸네일 파일에 대해 Lambda 함수 코드는 객체 키 이름을 resized-와 소스 객체 키 이름이 연결된 형식으로 파생합니다. 예를 들어 소스 객체 키 이름이 sample.jpg인 경우 코드는 키가 resized-sample.jpg인 썸네일 객체를 생성합니다.

Node.js

다음 코드 예제를 index.js라는 파일에 복사합니다.

예 index.js

// dependencies const AWS = require('aws-sdk'); const util = require('util'); const sharp = require('sharp'); // get reference to S3 client const s3 = new AWS.S3(); exports.handler = async (event, context, callback) => { // Read options from the event parameter. console.log("Reading options from event:\n", util.inspect(event, {depth: 5})); const srcBucket = event.Records[0].s3.bucket.name; // Object key may have spaces or unicode non-ASCII characters. const srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " ")); const dstBucket = srcBucket + "-resized"; const dstKey = "resized-" + srcKey; // Infer the image type from the file suffix. const typeMatch = srcKey.match(/\.([^.]*)$/); if (!typeMatch) { console.log("Could not determine the image type."); return; } // Check that the image type is supported const imageType = typeMatch[1].toLowerCase(); if (imageType != "jpg" && imageType != "png") { console.log(`Unsupported image type: ${imageType}`); return; } // Download the image from the S3 source bucket. try { const params = { Bucket: srcBucket, Key: srcKey }; var origimage = await s3.getObject(params).promise(); } catch (error) { console.log(error); return; } // set thumbnail width. Resize will set the height automatically to maintain aspect ratio. const width = 200; // Use the sharp module to resize the image and save in a buffer. try { var buffer = await sharp(origimage.Body).resize(width).toBuffer(); } catch (error) { console.log(error); return; } // Upload the thumbnail image to the destination bucket try { const destparams = { Bucket: dstBucket, Key: dstKey, Body: buffer, ContentType: "image" }; const putResult = await s3.putObject(destparams).promise(); } catch (error) { console.log(error); return; } console.log('Successfully resized ' + srcBucket + '/' + srcKey + ' and uploaded to ' + dstBucket + '/' + dstKey); };
Python

다음 코드 예제를 lambda_function.py라는 파일에 복사합니다.

예 lambda_function.py

import boto3 import os import sys import uuid from urllib.parse import unquote_plus from PIL import Image import PIL.Image s3_client = boto3.client('s3') def resize_image(image_path, resized_path): with Image.open(image_path) as image: image.thumbnail(tuple(x / 2 for x in image.size)) image.save(resized_path) def lambda_handler(event, context): for record in event['Records']: bucket = record['s3']['bucket']['name'] key = unquote_plus(record['s3']['object']['key']) tmpkey = key.replace('/', '') download_path = '/tmp/{}{}'.format(uuid.uuid4(), tmpkey) upload_path = '/tmp/resized-{}'.format(tmpkey) s3_client.download_file(bucket, key, download_path) resize_image(download_path, upload_path) s3_client.upload_file(upload_path, '{}-resized'.format(bucket), key)
Java

이 Java 코드는 RequestHandler 라이브러리에 제공된 aws-lambda-java-core 인터페이스를 구현합니다. Lambda 함수를 생성할 때 클래스를 핸들러로 지정합니다(이 코드 예제에서 example.handler). 인터페이스를 사용하여 핸들러를 제공하는 방법에 대한 자세한 내용은 핸들러 인터페이스 섹션을 참조하세요.

핸들러는 S3Event를 입력 유형으로 사용합니다. 이 입력 유형은 들어오는 Amazon S3 이벤트에서 함수 코드가 정보를 편리하게 읽을 수 있는 방법을 제공합니다. Amazon S3는 Lambda 함수를 비동기식으로 호출합니다. 반환 유형을 지정해야 하는 인터페이스를 구현하고 있으므로, 핸들러는 String을 반환 유형으로 사용합니다.

다음 코드 예제를 Handler.java라는 파일에 복사합니다.

예 Handler.java

package example; import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.imageio.ImageIO; import com.amazonaws.AmazonServiceException; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.S3Event; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.event.S3EventNotification.S3EventNotificationRecord; import com.amazonaws.services.s3.model.GetObjectRequest; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.S3Object; import com.amazonaws.services.s3.AmazonS3ClientBuilder; public class Handler implements RequestHandler<S3Event, String> { private static final float MAX_WIDTH = 100; private static final float MAX_HEIGHT = 100; private final String JPG_TYPE = (String) "jpg"; private final String JPG_MIME = (String) "image/jpeg"; private final String PNG_TYPE = (String) "png"; private final String PNG_MIME = (String) "image/png"; public String handleRequest(S3Event s3event, Context context) { try { S3EventNotificationRecord record = s3event.getRecords().get(0); String srcBucket = record.getS3().getBucket().getName(); // Object key may have spaces or unicode non-ASCII characters. String srcKey = record.getS3().getObject().getUrlDecodedKey(); String dstBucket = srcBucket + "-resized"; String dstKey = "resized-" + srcKey; // Sanity check: validate that source and destination are different // buckets. if (srcBucket.equals(dstBucket)) { System.out .println("Destination bucket must not match source bucket."); return ""; } // Infer the image type. Matcher matcher = Pattern.compile(".*\\.([^\\.]*)").matcher(srcKey); if (!matcher.matches()) { System.out.println("Unable to infer image type for key " + srcKey); return ""; } String imageType = matcher.group(1); if (!(JPG_TYPE.equals(imageType)) && !(PNG_TYPE.equals(imageType))) { System.out.println("Skipping non-image " + srcKey); return ""; } // Download the image from S3 into a stream AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient(); S3Object s3Object = s3Client.getObject(new GetObjectRequest( srcBucket, srcKey)); InputStream objectData = s3Object.getObjectContent(); // Read the source image BufferedImage srcImage = ImageIO.read(objectData); int srcHeight = srcImage.getHeight(); int srcWidth = srcImage.getWidth(); // Infer the scaling factor to avoid stretching the image // unnaturally float scalingFactor = Math.min(MAX_WIDTH / srcWidth, MAX_HEIGHT / srcHeight); int width = (int) (scalingFactor * srcWidth); int height = (int) (scalingFactor * srcHeight); BufferedImage resizedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = resizedImage.createGraphics(); // Fill with white before applying semi-transparent (alpha) images g.setPaint(Color.white); g.fillRect(0, 0, width, height); // Simple bilinear resize g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage(srcImage, 0, 0, width, height, null); g.dispose(); // Re-encode image to target format ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(resizedImage, imageType, os); InputStream is = new ByteArrayInputStream(os.toByteArray()); // Set Content-Length and Content-Type ObjectMetadata meta = new ObjectMetadata(); meta.setContentLength(os.size()); if (JPG_TYPE.equals(imageType)) { meta.setContentType(JPG_MIME); } if (PNG_TYPE.equals(imageType)) { meta.setContentType(PNG_MIME); } // Uploading to S3 destination bucket System.out.println("Writing to: " + dstBucket + "/" + dstKey); try { s3Client.putObject(dstBucket, dstKey, is, meta); } catch(AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } System.out.println("Successfully resized " + srcBucket + "/" + srcKey + " and uploaded to " + dstBucket + "/" + dstKey); return "Ok"; } catch (IOException e) { throw new RuntimeException(e); } } }

단계 5. 배포 패키지 생성

배포 패키지는 Lambda 함수 코드와 해당 종속 항목이 포함되어 있는 .zip 파일 아카이브입니다.

Node.js

이 샘플 함수는 배포 패키지에 샤프 모듈을 포함해야 합니다.

배포 패키지를 만들려면

  1. Linux 환경에서 명령줄 터미널 또는 셸을 엽니다. 로컬 환경의 Node.js 버전이 함수의 Node.js 버전과 일치하는지 확인합니다.

  2. 함수 코드를 index.js 디렉터리에 lambda-s3로 저장합니다.

  3. npm을 사용하여 샤프 라이브러리를 설치합니다. Linux의 경우 다음 명령을 사용합니다.

    npm install sharp

    이 단계를 마치면 다음과 같은 디렉터리 구조가 만들어집니다.

    lambda-s3 |- index.js |- /node_modules/sharp └ /node_modules/...
  4. 함수 코드와 해당 종속 항목을 포함하는 배포 패키지를 생성합니다. 하위 폴더를 압축하려면 zip 명령에 -r(재귀) 옵션을 설정하세요.

    zip -r function.zip .
Python

종속성

배포 패키지를 만들려면

  • AWS SAM CLI sam build 명령과 --use-container 옵션을 사용해, Pillow(PIL) 라이브러리 같이 C 또는 C++로 작성된 라이브러리를 포함한 배포 패키지를 만드는 것이 좋습니다.

Java

종속성

  • aws-lambda-java-core

  • aws-lambda-java-events

  • aws-java-sdk

배포 패키지를 만들려면

단계 6. Lambda 함수 생성

함수를 만들려면

  • create-function 명령을 사용해 Lambda 함수를 만듭니다.

    Node.js
    aws lambda create-function --function-name CreateThumbnail \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs12.x \ --timeout 10 --memory-size 1024 \ --role arn:aws:iam::123456789012:role/lambda-s3-role

    cli-binary-format 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. AWS CLI 구성 파일에서 이 옵션을 구성할 수도 있습니다.

    create-function 명령은 함수 핸들러를 index.handler로 지정합니다. 이 핸들러 이름은 함수 이름(handler)과 핸들러 코드가 저장되는 파일의 이름(index.js)을 나타냅니다. 자세한 내용은 AWS Lambda 함수 핸들러(Node.js) 섹션을 참조하세요. 이 명령은 nodejs12.x의 런타임을 지정합니다. 자세한 내용은 Lambda 런타임 섹션을 참조하세요.

    Python
    aws lambda create-function --function-name CreateThumbnail \ --zip-file fileb://function.zip --handler lambda_function.lambda_handler --runtime python3.8 \ --timeout 10 --memory-size 1024 \ --role arn:aws:iam::123456789012:role/lambda-s3-role

    cli-binary-format 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. AWS CLI 구성 파일에서 이 옵션을 구성할 수도 있습니다.

    create-function 명령은 함수 핸들러를 lambda_function.lambda_handler로 지정합니다. 이 핸들러 이름은 함수 이름(lambda_handler)과 핸들러 코드가 저장되는 파일의 이름(lambda_function.py)을 나타냅니다. 자세한 내용은 Python으로 작성한 Lambda 함수 핸들러 섹션을 참조하세요. 이 명령은 python3.8의 런타임을 지정합니다. 자세한 내용은 Lambda 런타임 섹션을 참조하세요.

    Java
    aws lambda create-function --function-name CreateThumbnail \ --zip-file fileb://function.zip --handler example.handler --runtime java11 \ --timeout 10 --memory-size 1024 \ --role arn:aws:iam::123456789012:role/lambda-s3-role

    cli-binary-format 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. AWS CLI 구성 파일에서 이 옵션을 구성할 수도 있습니다.

    create-function 명령은 함수 핸들러를 example.handler로 지정합니다. 이 함수는 핸들러 인터페이스를 구현하므로 package.Class라는 약식 핸들러 형식을 사용할 수 있습니다. 자세한 내용은 AWS Lambda 함수 핸들러(Java) 섹션을 참조하세요. 이 명령은 java11의 런타임을 지정합니다. 자세한 내용은 Lambda 런타임 섹션을 참조하세요.

역할 파라미터에서 123456789012AWS 계정 ID로 바꿉니다. 위의 예제 명령은 함수 구성으로 10초의 제한 시간 값을 지정합니다. 업로드하는 객체의 크기에 따라 다음 AWS CLI 명령을 사용하여 제한 시간 값을 늘려야 할 수도 있습니다.

aws lambda update-function-configuration --function-name CreateThumbnail --timeout 30

단계 7. Lambda 함수 테스트

샘플 Amazon S3 이벤트 데이터를 사용하여 Lambda 함수를 수동으로 호출합니다.

Lambda 함수를 테스트하려면

  1. 다음 Amazon S3 샘플 이벤트 데이터를 inputFile.txt라는 파일에 저장합니다. sourcebucketHappyFace.jpg를 각각 소스 S3 버킷 이름과 .jpg 객체 키로 바꿔야 합니다.

    { "Records":[ { "eventVersion":"2.0", "eventSource":"aws:s3", "awsRegion":"us-west-2", "eventTime":"1970-01-01T00:00:00.000Z", "eventName":"ObjectCreated:Put", "userIdentity":{ "principalId":"AIDAJDPLRKLG7UEXAMPLE" }, "requestParameters":{ "sourceIPAddress":"127.0.0.1" }, "responseElements":{ "x-amz-request-id":"C3D13FE58DE4C810", "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"testConfigRule", "bucket":{ "name":"sourcebucket", "ownerIdentity":{ "principalId":"A3NL1KOZZKExample" }, "arn":"arn:aws:s3:::sourcebucket" }, "object":{ "key":"HappyFace.jpg", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko" } } } ] }
  2. 다음 invoke 명령을 사용하여 함수를 호출합니다. 이 명령은 비동기 실행(--invocation-type Event)을 요청합니다. 원하는 경우, RequestResponseinvocation-type 파라미터 값으로 지정하여 동기식으로 함수를 호출할 수 있습니다.

    aws lambda invoke --function-name CreateThumbnail \ --invocation-type Event \ --payload file://inputFile.txt outputfile.txt

    cli-binary-format 옵션은 AWS CLI 버전 2를 사용할 때 필요합니다. AWS CLI 구성 파일에서 이 옵션을 구성할 수도 있습니다.

  3. 대상 S3 버킷에 썸네일이 생성되었는지 확인합니다.

8단계. 이벤트를 게시하도록 Amazon S3 구성

Amazon S3가 객체 생성 이벤트를 Lambda에 게시하고 Lambda 함수를 호출할 수 있도록 구성을 완료합니다. 이 단계에서는 다음 작업을 수행합니다.

  • 함수 액세스 정책에 권한을 추가하여 Amazon S3가 함수를 호출하도록 허용합니다.

  • 소스 S3 버킷에 알림 구성을 추가합니다. 알림 구성에서 다음을 제공합니다.

    • Amazon S3가 게시하게 하려는 이벤트 유형입니다. 이 자습서에서는 객체가 생성될 때 Amazon S3가 이벤트를 게시할 수 있도록 s3:ObjectCreated:* 이벤트 유형을 지정합니다.

    • 호출할 함수입니다.

함수 정책에 권한을 추가하려면

  1. 다음 add-permission 명령을 사용하여 Amazon S3 서비스 보안 주체(s3.amazonaws.com)에 lambda:InvokeFunction 작업을 수행할 수 있는 권한을 부여합니다. 다음 조건이 충족되는 경우에만 함수를 호출할 수 있는 권한이 Amazon S3에 부여됩니다.

    • 객체 생성 이벤트가 특정 S3 버킷에서 감지됩니다.

    • AWS 계정이 S3 버킷을 소유합니다. 버킷을 삭제할 경우, 다른 AWS 계정에서 동일한 Amazon 리소스 이름(ARN) 내에 버킷을 생성할 수 있습니다.

    aws lambda add-permission --function-name CreateThumbnail --principal s3.amazonaws.com \ --statement-id s3invoke --action "lambda:InvokeFunction" \ --source-arn arn:aws:s3:::sourcebucket \ --source-account account-id
  2. get-policy 명령을 실행하여 함수의 액세스 정책을 확인합니다.

    aws lambda get-policy --function-name CreateThumbnail

Amazon S3가 객체 생성 이벤트를 Lambda에 게시하도록 하려면 소스 S3 버킷에 알림 구성을 추가합니다.

중요

이 절차는 버킷에 객체가 생성될 때마다 함수를 호출하도록 S3 버킷을 구성합니다. 소스 버킷에 대해서만 이 옵션을 구성해야 합니다. 함수가 소스 버킷에 객체를 생성하도록 해서는 안 됩니다. 그럴 경우 함수가 루프에서 계속 호출될 수 있습니다.

알림을 구성하려면

  1. Amazon S3 콘솔을 엽니다.

  2. 소스 S3 버킷의 이름을 선택합니다.

  3. [Properties] 탭을 선택합니다.

  4. [이벤트 알림(Event notifications)]에서 [이벤트 알림 생성(Create event notification)]을 선택하여 다음 설정으로 알림을 구성합니다.

    • 이벤트 이름lambda-trigger

    • 이벤트 유형All object create events

    • 대상 주소Lambda function

    • Lambda 함수CreateThumbnail

이벤트 구성에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 Amazon S3 콘솔을 사용하여 이벤트 알림 활성화 및 구성을 참조하세요.

9단계. S3 트리거를 사용하여 테스트

다음과 같이 구성을 시험합니다.

  1. Amazon S3 콘솔을 사용하여 .jpg 또는 .png 객체를 소스 S3 버킷에 업로드합니다.

  2. CreateThumbnail Lambda 함수를 사용하여 대상 S3 버킷에 각 이미지 객체의 썸네일이 생성되었는지 확인합니다.

  3. 로그는 CloudWatch 콘솔에서 확인합니다.

10단계. 리소스 정리

이 자습서 용도로 생성한 리소스를 보관하고 싶지 않다면 지금 삭제할 수 있습니다. 더 이상 사용하지 않는 AWS 리소스를 삭제하면 AWS 계정에 불필요한 요금이 발생하는 것을 방지할 수 있습니다.

Lambda 함수를 삭제하려면

  1. Lambda 콘솔의 함수 페이지를 엽니다.

  2. 생성한 함수를 선택합니다.

  3. [작업]을 선택하고 [삭제]를 선택합니다.

  4. 삭제를 선택합니다.

생성한 정책을 삭제하려면

  1. IAM 콘솔에서 정책 페이지를 엽니다.

  2. 생성한 정책(AWSLambdaS3Policy)을 선택합니다.

  3. [정책 작업(Policy actions)], [삭제(Delete)]를 선택합니다.

  4. 삭제를 선택합니다.

실행 역할을 삭제하려면

  1. IAM 콘솔에서 역할 페이지를 엽니다.

  2. 생성한 실행 역할을 선택합니다.

  3. 역할 삭제를 선택합니다.

  4. 예, 삭제를 선택합니다.

S3 버킷을 삭제하려면

  1. Amazon S3 콘솔을 엽니다.

  2. 생성한 버킷을 선택합니다.

  3. 삭제를 선택합니다.

  4. 텍스트 상자에 버킷 이름을 입력합니다.

  5. [Confirm]을 선택합니다.