자습서: S3 Object Lambda로 애플리케이션용 데이터 변환
자습서: S3 Object Lambda로 애플리케이션용 데이터 변환 (Tutorial: Transforming data for your application with S3 Object Lambda)
Amazon S3에 데이터를 저장하면 여러 애플리케이션이 사용하도록 쉽게 공유할 수 있어요. 하지만 각 애플리케이션은 고유한 데이터 형식 요구 사항이 있을 수 있고, 특정 사용 사례를 위해 여러분의 데이터를 수정하거나 처리해야 할 수도 있어요. 예를 들어 전자상거래 애플리케이션이 만든 데이터셋에는 개인 식별 정보(PII)가 포함될 수 있어요. 같은 데이터를 분석용으로 처리할 때는 이 PII가 필요 없으므로 편집해야 해요. 그러나 같은 데이터셋을 마케팅 캠페인에 사용한다면 고객 충성도 데이터베이스의 정보 같은 추가 세부 정보로 데이터를 보강해야 할 수도 있어요.
참고 2025년 11월 7일부터 S3 Object Lambda는 현재 이 서비스를 사용 중인 기존 고객과 일부 AWS 파트너 네트워크(APN) 파트너만 이용할 수 있어요. S3 Object Lambda와 비슷한 기능이 필요하다면 Amazon S3 Object Lambda 가용성 변경 문서를 확인해 주세요.
출처: 문서
본문
S3 Object Lambda를 사용하면 애플리케이션에 반환하기 전에 S3에서 검색한 데이터를 처리하는 여러분만의 코드를 추가할 수 있어요. 구체적으로 AWS Lambda 함수를 구성해 S3 Object Lambda 접근 지점에 연결할 수 있어요. 애플리케이션이 S3 Object Lambda 접근 지점을 통해 표준 S3 GET 요청을 보내면, 지정된 Lambda 함수가 호출되어 지원 S3 접근 지점을 통해 기본 데이터 소스에서 검색한 모든 데이터를 처리해요. 그런 다음 S3 Object Lambda 접근 지점이 변환된 결과를 애플리케이션에 다시 반환해요. 애플리케이션을 전혀 변경할 필요 없이 여러분만의 사용자 지정 Lambda 함수를 작성·실행해 S3 Object Lambda 데이터 변환을 특정 사용 사례에 맞출 수 있어요.
목표
이 자습서에서는 표준 S3 GET 요청에 사용자 지정 코드를 추가해 S3에서 검색한 요청 객체를 요청하는 클라이언트나 애플리케이션의 요구에 맞게 수정하는 방법을 배워요. 구체적으로 S3 Object Lambda를 통해 S3 버킷에 저장된 원본 객체의 모든 텍스트를 대문자로 변환하는 방법을 배워요.
참고 이 자습서는 데이터를 변환하기 위해 Python 코드를 사용해요. 다른 AWS SDK를 사용한 예제는 AWS SDK 코드 예제 라이브러리의 S3 Object Lambda로 애플리케이션용 데이터 변환을 참고하세요.
항목
- 전제 조건
- 1단계: S3 버킷 만들기
- 2단계: S3 버킷에 파일 업로드
- 3단계: S3 접근 지점 만들기
- 4단계: Lambda 함수 만들기
- 5단계: Lambda 함수 실행 역할용 IAM 정책 구성
- 6단계: S3 Object Lambda 접근 지점 만들기
- 7단계: 변환된 데이터 보기
- 8단계: 정리
- 다음 단계
전제 조건
이 자습서를 시작하기 전에 올바른 권한을 가진 AWS Identity and Access Management(IAM) 사용자로 로그인할 수 있는 AWS 계정이 있어야 해요. 또한 Python 3.8 이상을 설치해야 해요.
하위 단계
- AWS 계정에 권한이 있는 IAM 사용자 만들기(콘솔)
- 로컬 컴퓨터에 Python 3.8 이상 설치
AWS 계정에 권한이 있는 IAM 사용자 만들기(콘솔)
자습서용 IAM 사용자를 만들 수 있어요. 이 자습서를 완료하려면 여러분의 IAM 사용자가 관련 AWS 리소스에 접근하고 특정 작업을 수행하기 위해 다음 IAM 정책을 연결해야 해요. IAM 사용자를 만드는 방법에 대한 자세한 내용은 IAM 사용자 안내서의 IAM 사용자 만들기(콘솔)를 참고하세요.
여러분의 IAM 사용자는 다음 정책이 필요해요.
- AmazonS3FullAccess — Object Lambda 접근 지점을 만들고 사용할 권한을 포함한 모든 Amazon S3 작업에 대한 권한을 부여해요.
- AWSLambda_FullAccess — 모든 Lambda 작업에 대한 권한을 부여해요.
- IAMFullAccess — 모든 IAM 작업에 대한 권한을 부여해요.
- IAMAccessAnalyzerReadOnlyAccess — IAM Access Analyzer가 제공하는 모든 접근 정보를 읽을 수 있는 권한을 부여해요.
- CloudWatchLogsFullAccess — CloudWatch Logs에 대한 전체 접근 권한을 부여해요.
참고 간단하게 하기 위해 이 자습서는 IAM 사용자를 만들고 사용해요. 자습서를 완료한 뒤에는 IAM 사용자 삭제를 꼭 기억하세요. 프로덕션용으로는 IAM 사용자 안내서의 IAM 보안 모범 사례를 따르는 것이 좋아요. 모범 사례 중 하나는 사람이 사용하는 사용자들이 자격 증명 공급자와의 연합을 사용해 임시 자격 증명으로 AWS에 접근하도록 하는 거예요. 또 다른 모범 사례는 워크로드가 IAM 역할과 함께 임시 자격 증명을 사용해 AWS에 접근하도록 하는 거예요. AWS IAM Identity Center로 임시 자격 증명을 가진 사용자를 만드는 방법은 AWS IAM Identity Center 사용자 안내서의 시작하기를 참고하세요.
이 자습서는 또한 전체 접근 AWS 관리형 정책을 사용해요. 프로덕션용으로는 보안 모범 사례에 따라 사용 사례에 필요한 최소 권한만 부여할 것을 권장해요.
로컬 컴퓨터에 Python 3.8 이상 설치
다음 절차를 사용해 로컬 컴퓨터에 Python 3.8 이상을 설치해요. 더 많은 설치 지침은 Python 초보자 안내서의 Python 다운로드 페이지를 참고하세요.
-
로컬 터미널이나 셸을 열고 다음 명령을 실행해 Python이 이미 설치되어 있는지, 설치되어 있다면 어떤 버전인지 확인해요.
python --version -
Python 3.8 이상이 없다면 로컬 컴퓨터에 적합한 Python 3.8 이상의 공식 설치 프로그램을 다운로드해요.
-
다운로드한 파일을 더블클릭해 설치 프로그램을 실행하고 단계에 따라 설치를 완료해요.
-
Windows 사용자는 설치 마법사에서 Install Now를 선택하기 전에 Add Python 3.X to PATH를 선택해요.
-
터미널을 닫았다 다시 열어 다시 시작해요.
-
다음 명령을 실행해 Python 3.8 이상이 올바르게 설치되었는지 확인해요.
- macOS 사용자는 이 명령을 실행해요:
python3 --version - Windows 사용자는 이 명령을 실행해요:
python --version
- macOS 사용자는 이 명령을 실행해요:
-
다음 명령을 실행해 pip3 패키지 관리자가 설치되어 있는지 확인해요. 명령 응답에서 pip 버전 번호와 python 3.8 이상이 보이면 pip3 패키지 관리자가 성공적으로 설치된 거예요.
pip --version
1단계: S3 버킷 만들기
변환하려는 원본 데이터를 저장할 버킷을 만들어요.
참고 접근 지점은 Amazon FSx for OpenZFS 볼륨 같은 다른 데이터 소스에도 연결될 수 있지만, 이 자습서에서는 S3 버킷에 연결된 지원 접근 지점을 사용해요.
버킷을 만들려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택해요.
- **버킷 만들기(Create bucket)**를 선택해요. 버킷 만들기(Create bucket) 페이지가 열려요.
- **버킷 이름(Bucket name)**에 버킷 이름(예:
tutorial-bucket)을 입력해요. Amazon S3의 버킷 명명에 대한 자세한 내용은 범용 버킷 명명 규칙을 참고하세요. - **리전(Region)**에서 버킷을 두려는 AWS 리전을 선택해요. 버킷 리전에 대한 자세한 내용은 범용 버킷 개요를 참고하세요.
- **이 버킷의 퍼블릭 액세스 차단 설정(Block Public Access settings for this bucket)**에서 기본 설정을 유지해요(모든 퍼블릭 액세스 차단이 활성화됨). 사용 사례를 위해 하나 이상을 꺼야 하는 경우가 아니면 모든 퍼블릭 액세스 차단 설정을 활성화 상태로 유지할 것을 권장해요. 퍼블릭 액세스 차단에 대한 자세한 내용은 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단을 참고하세요.
- 나머지 설정은 기본값을 유지해요.
- (선택 사항) 특정 사용 사례에 맞게 추가 버킷 설정을 구성하려면 범용 버킷 만들기를 참고하세요.
- **버킷 만들기(Create bucket)**를 선택해요.
2단계: S3 버킷에 파일 업로드
텍스트 파일을 S3 버킷에 업로드해요. 이 텍스트 파일은 이 자습서의 뒷부분에서 대문자로 변환할 원본 데이터를 담고 있어요.
예를 들어 다음 텍스트가 포함된 tutorial.txt 파일을 업로드할 수 있어요.
Amazon S3 Object Lambda Tutorial:
You can add your own code to process data retrieved from S3 before
returning it to an application.
버킷에 파일을 업로드하려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택해요.
- 버킷(Buckets) 목록에서 1단계에서 만든 버킷 이름(예:
tutorial-bucket)을 선택해 파일을 업로드해요. - 버킷의 객체(Objects) 탭에서 **업로드(Upload)**를 선택해요.
- 업로드(Upload) 페이지의 파일 및 폴더(Files and folders) 아래에서 **파일 추가(Add files)**를 선택해요.
- 업로드할 파일을 선택한 다음 **열기(Open)**를 선택해요. 예를 들어 앞에서 언급한
tutorial.txt파일 예제를 업로드할 수 있어요. - **업로드(Upload)**를 선택해요.
3단계: S3 접근 지점 만들기
S3 Object Lambda 접근 지점을 사용해 원본 데이터에 접근하고 변환하려면 S3 접근 지점을 만들고 1단계에서 만든 S3 버킷과 연결해야 해요. 접근 지점은 변환하려는 객체와 같은 AWS 리전에 있어야 해요.
이 자습서의 뒷부분에서는 이 접근 지점을 Object Lambda 접근 지점의 지원 접근 지점으로 사용할 거예요.
접근 지점을 만들려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 **접근 지점(Access Points)**을 선택해요.
- 접근 지점(Access Points) 페이지에서 **접근 지점 만들기(Create access point)**를 선택해요.
- 접근 지점 이름(Access point name) 필드에 접근 지점의 이름(예:
tutorial-access-point)을 입력해요. 접근 지점 명명에 대한 자세한 내용은 접근 지점 명명 규칙을 참고하세요. - 데이터 소스(Data source) 필드에 1단계에서 만든 버킷 이름(예:
tutorial-bucket)을 입력해요. S3가 이 버킷에 접근 지점을 연결해요. - (선택 사항) **S3 찾아보기(Browse S3)**를 선택해 계정의 버킷을 탐색하고 검색할 수 있어요. S3 찾아보기를 선택하면 원하는 버킷을 선택한 다음 **경로 선택(Choose path)**을 선택해 데이터 소스(Data source) 필드에 해당 버킷 이름을 채울 수 있어요.
- **네트워크 출처(Network origin)**에서 **인터넷(Internet)**을 선택해요. 접근 지점의 네트워크 출처에 대한 자세한 내용은 가상 사설 클라우드로 제한된 접근 지점 만들기를 참고하세요.
- 기본적으로 접근 지점에 대한 모든 퍼블릭 액세스 차단 설정이 켜져 있어요. **모든 퍼블릭 액세스 차단(Block all public access)**을 활성화 상태로 유지할 것을 권장해요. 자세한 내용은 범용 버킷용 접근 지점의 퍼블릭 액세스 관리를 참고하세요.
- 다른 모든 접근 지점 설정은 기본값을 유지해요.
- (선택 사항) 접근 지점 설정을 사용 사례에 맞게 수정할 수 있어요. 이 자습서에서는 기본 설정을 유지할 것을 권장해요.
- (선택 사항) 접근 지점에 대한 접근을 관리해야 한다면 접근 지점 정책을 지정할 수 있어요. 자세한 내용은 접근 지점 정책 예제를 참고하세요.
- **접근 지점 만들기(Create access point)**를 선택해요.
4단계: Lambda 함수 만들기
원본 데이터를 변환하려면 S3 Object Lambda 접근 지점과 함께 사용할 Lambda 함수를 만들어요.
하위 단계
- Lambda 함수 코드를 작성하고 가상 환경으로 배포 패키지 만들기
- 실행 역할로 Lambda 함수 만들기(콘솔)
- .zip 파일 아카이브로 Lambda 함수 코드를 배포하고 Lambda 함수 구성(콘솔)
Lambda 함수 코드를 작성하고 가상 환경으로 배포 패키지 만들기
-
로컬 컴퓨터에서 이 자습서의 뒷부분에서 사용할 가상 환경용으로
object-lambda라는 폴더를 만들어요. -
object-lambda폴더에 원본 객체의 모든 텍스트를 대문자로 바꾸는 Lambda 함수가 있는 파일을 만들어요. 예를 들어 Python으로 작성된 다음 함수를 사용할 수 있어요. 이 함수를transform.py라는 파일로 저장해요.import boto3 import requests from botocore.config import Config # This function capitalizes all text in the original object def lambda_handler(event, context): object_context = event["getObjectContext"] # Get the presigned URL to fetch the requested original object # from S3 s3_url = object_context["inputS3Url"] # Extract the route and request token from the input context request_route = object_context["outputRoute"] request_token = object_context["outputToken"] # Get the original S3 object using the presigned URL response = requests.get(s3_url) original_object = response.content.decode("utf-8") # Transform all text in the original object to uppercase # You can replace it with your custom code based on your use case transformed_object = original_object.upper() # Write object back to S3 Object Lambda s3 = boto3.client('s3', config=Config(signature_version='s3v4')) # The WriteGetObjectResponse API sends the transformed data # back to S3 Object Lambda and then to the user s3.write_get_object_response( Body=transformed_object, RequestRoute=request_route, RequestToken=request_token) # Exit the Lambda function: return the status code return { 'status_code': 200}참고 위 예제 Lambda 함수는 요청된 객체 전체를 메모리에 로드한 다음 변환해 클라이언트에 반환해요. 또는 객체를 S3에서 스트리밍해 전체를 메모리에 로드하지 않을 수도 있어요. 이 접근 방식은 큰 객체를 다룰 때 유용할 수 있어요. Object Lambda 접근 지점으로 응답을 스트리밍하는 방법에 대한 자세한 내용은 Lambda에서 GetObject 요청 작업의 스트리밍 예제를 참고하세요.
S3 Object Lambda 접근 지점과 함께 사용할 Lambda 함수를 작성할 때 함수는 S3 Object Lambda가 Lambda 함수에 제공하는 입력 이벤트 컨텍스트를 기반으로 해요. 이벤트 컨텍스트는 S3 Object Lambda에서 Lambda로 전달되는 이벤트에서 이루어지고 있는 요청에 대한 정보를 제공해요. 이벤트 컨텍스트에는 Lambda 함수를 만드는 데 사용하는 파라미터가 포함돼 있어요.
위 Lambda 함수를 만드는 데 사용된 필드는 다음과 같아요.
getObjectContext— Amazon S3 및 S3 Object Lambda에 대한 연결의 입력 및 출력 세부 정보를 뜻해요. 다음 필드가 있어요.inputS3Url— Lambda 함수가 지원 접근 지점에서 원본 객체를 다운로드하는 데 사용할 수 있는 사전 서명 URL이에요. 사전 서명 URL을 사용하면 Lambda 함수는 원본 객체를 검색하기 위해 Amazon S3 읽기 권한이 필요 없고, 각 호출에서 처리되는 객체에만 접근할 수 있어요.outputRoute— Lambda 함수가 변환된 객체를 다시 보내기 위해WriteGetObjectResponse를 호출할 때 S3 Object Lambda URL에 추가되는 라우팅 토큰이에요.outputToken— 변환된 객체를 다시 보낼 때 S3 Object Lambda가WriteGetObjectResponse호출을 원래 호출자와 매칭하는 데 사용하는 토큰이에요.
이벤트 컨텍스트의 모든 필드에 대한 자세한 내용은 이벤트 컨텍스트 형식 및 사용법과 S3 Object Lambda 접근 지점용 Lambda 함수 작성을 참고하세요.
-
로컬 터미널에서 다음 명령을 입력해
virtualenv패키지를 설치해요.python -m pip install virtualenv -
로컬 터미널에서 앞에서 만든
object-lambda폴더를 연 다음, 다음 명령을 입력해venv라는 가상 환경을 만들고 초기화해요.python -m virtualenv venv -
가상 환경을 활성화하려면 다음 명령을 입력해 환경의 폴더에 있는
activate파일을 실행해요.- macOS 사용자는 이 명령을 실행해요:
source venv/bin/activate - Windows 사용자는 이 명령을 실행해요:
.\venv\Scripts\activate
이제 명령 프롬프트가
(venv)로 바뀌며 가상 환경이 활성화되었음을 보여줘요. - macOS 사용자는 이 명령을 실행해요:
-
필요한 라이브러리를 설치하려면
venv가상 환경에서 다음 명령을 한 줄씩 실행해요. 이 명령들은 여러분의lambda_handlerLambda 함수의 종속성 업데이트 버전을 설치해요. 이러한 종속성은 AWS SDK for Python(Boto3)과 requests 모듈이에요.pip3 install boto3 pip3 install requests -
가상 환경을 비활성화하려면 다음 명령을 실행해요.
deactivate -
설치된 라이브러리를
.zip파일인lambda.zip으로 묶은 배포 패키지를object-lambda디렉터리 루트에 만들려면 로컬 터미널에서 다음 명령을 한 줄씩 실행해요.팁 다음 명령은 여러분의 특정 환경에서 작동하도록 조정해야 할 수 있어요. 예를 들어 라이브러리가
site-packages또는dist-packages에 나타날 수 있고, 첫 번째 폴더가lib또는lib64일 수 있어요. 또한python폴더가 다른 Python 버전으로 이름이 지어졌을 수 있어요. 특정 패키지를 찾으려면pip show명령을 사용해요.-
macOS 사용자는 다음 명령을 실행해요.
cd venv/lib/python3.8/site-packages zip -r ../../../../lambda.zip . -
Windows 사용자는 다음 명령을 실행해요.
cd .\venv\Lib\site-packages\ powershell Compress-Archive * ../../../lambda.zip
마지막 명령은 배포 패키지를
object-lambda디렉터리의 루트에 저장해요. -
-
함수 코드 파일
transform.py를 배포 패키지의 루트에 추가해요.-
macOS 사용자는 다음 명령을 실행해요.
cd ../../../../ zip -g lambda.zip transform.py -
Windows 사용자는 다음 명령을 실행해요.
cd ..\..\..\ powershell Compress-Archive -update transform.py lambda.zip
이 단계를 완료한 뒤 다음 디렉터리 구조가 있어야 해요.
lambda.zip$ │ transform.py │ __pycache__ | boto3/ │ certifi/ │ pip/ │ requests/ ... -
실행 역할로 Lambda 함수 만들기(콘솔)
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/lambda/ 에서 AWS Lambda 콘솔을 열어요.
- 왼쪽 탐색 창에서 **함수(Functions)**를 선택해요.
- **함수 만들기(Create function)**를 선택해요.
- **처음부터 작성(Author from scratch)**을 선택해요.
- 기본 정보(Basic information) 아래에서 다음을 수행해요.
- **함수 이름(Function name)**에
tutorial-object-lambda-function을 입력해요. - **런타임(Runtime)**에서 Python 3.8 또는 이후 버전을 선택해요.
- **함수 이름(Function name)**에
- 기본 실행 역할 변경(Change default execution role) 섹션을 펼쳐요. 실행 역할(Execution role) 아래에서 **기본 Lambda 권한이 있는 새 역할 만들기(Create a new role with basic Lambda permissions)**를 선택해요. 이 자습서의 뒷부분인 5단계에서
AmazonS3ObjectLambdaExecutionRolePolicy를 이 Lambda 함수의 실행 역할에 연결해요. - 나머지 설정은 기본값을 유지해요.
- **함수 만들기(Create function)**를 선택해요.
.zip 파일 아카이브로 Lambda 함수 코드를 배포하고 Lambda 함수 구성(콘솔)
-
https://console.aws.amazon.com/lambda/ 의 AWS Lambda 콘솔에서 왼쪽 탐색 창의 **함수(Functions)**를 선택해요.
-
앞에서 만든 Lambda 함수(예:
tutorial-object-lambda-function)를 선택해요. -
Lambda 함수의 세부 정보 페이지에서 코드(Code) 탭을 선택해요. 코드 소스(Code Source) 섹션에서 **업로드(Upload from)**를 선택한 다음 **.zip 파일(.zip file)**을 선택해요.
-
**업로드(Upload)**를 선택해 로컬
.zip파일을 선택해요. -
앞에서 만든
lambda.zip파일을 선택한 다음 **열기(Open)**를 선택해요. -
**저장(Save)**을 선택해요.
-
런타임 설정(Runtime settings) 섹션에서 **편집(Edit)**을 선택해요.
-
런타임 설정 편집(Edit runtime settings) 페이지에서 **런타임(Runtime)**이 Python 3.8 또는 이후 버전으로 설정되어 있는지 확인해요.
-
Lambda 런타임이 Lambda 함수 코드에서 호출할 핸들러 메서드를 알려면 **핸들러(Handler)**에
transform.lambda_handler를 입력해요. Python에서 함수를 구성할 때 핸들러 설정의 값은 점으로 구분된 파일 이름과 핸들러 모듈 이름이에요. 예를 들어transform.lambda_handler는transform.py파일에 정의된lambda_handler메서드를 호출해요. -
**저장(Save)**을 선택해요.
-
(선택 사항) Lambda 함수의 세부 정보 페이지에서 구성(Configuration) 탭을 선택해요. 왼쪽 탐색 창에서 **일반 구성(General configuration)**을 선택한 다음 **편집(Edit)**을 선택해요. 제한 시간(Timeout) 필드에
1분0초를 입력해요. 나머지 설정은 기본값을 유지하고 **저장(Save)**을 선택해요.**제한 시간(Timeout)**은 Lambda가 호출에 대해 함수를 중지하기 전에 실행할 수 있는 시간이에요. 기본값은 3초에요. S3 Object Lambda가 사용하는 Lambda 함수의 최대 지속 시간은 60초예요. 요금은 구성된 메모리 양과 코드가 실행되는 시간에 따라 달라져요.
5단계: Lambda 함수 실행 역할용 IAM 정책 구성
Lambda 함수가 GetObject 호출자에게 사용자 지정 데이터와 응답 헤더를 제공할 수 있게 하려면 Lambda 함수의 실행 역할에 WriteGetObjectResponse API를 호출할 IAM 권한이 있어야 해요.
Lambda 함수 역할에 IAM 정책을 연결하려면
- https://console.aws.amazon.com/lambda/ 의 AWS Lambda 콘솔에서 왼쪽 탐색 창의 **함수(Functions)**를 선택해요.
- 4단계에서 만든 함수(예:
tutorial-object-lambda-function)를 선택해요. - Lambda 함수의 세부 정보 페이지에서 구성(Configuration) 탭을 선택한 다음 왼쪽 탐색 창에서 **권한(Permissions)**을 선택해요.
- 실행 역할(Execution role) 아래에서 **역할 이름(Role name)**의 링크를 선택해요. IAM 콘솔이 열려요.
- Lambda 함수 실행 역할에 대한 IAM 콘솔의 요약(Summary) 페이지에서 권한(Permissions) 탭을 선택해요. 그런 다음 권한 추가(Add Permissions) 메뉴에서 **정책 연결(Attach policies)**을 선택해요.
- 권한 연결(Attach Permissions) 페이지의 검색 상자에
AmazonS3ObjectLambdaExecutionRolePolicy를 입력해 정책 목록을 필터링해요.AmazonS3ObjectLambdaExecutionRolePolicy정책 이름 옆의 확인란을 선택해요. - **정책 연결(Attach policies)**을 선택해요.
6단계: S3 Object Lambda 접근 지점 만들기
S3 Object Lambda 접근 지점은 S3 GET 요청에서 직접 Lambda 함수를 호출해 함수가 S3 접근 지점에서 검색한 데이터를 처리할 수 있게 하는 유연성을 제공해요. S3 Object Lambda 접근 지점을 만들고 구성할 때 호출할 Lambda 함수를 지정하고, Lambda가 사용할 사용자 지정 파라미터로 이벤트 컨텍스트를 JSON 형식으로 제공해야 해요.
S3 Object Lambda 접근 지점을 만들려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 Object Lambda 접근 지점을 선택해요.
- Object Lambda 접근 지점(Object Lambda Access Points) 페이지에서 **Object Lambda 접근 지점 만들기(Create Object Lambda Access Point)**를 선택해요.
- **Object Lambda 접근 지점 이름(Object Lambda Access Point name)**에 사용하려는 Object Lambda 접근 지점의 이름을 입력해요(예:
tutorial-object-lambda-accesspoint). - **지원 접근 지점(Supporting Access Point)**에서 3단계에서 만든 표준 접근 지점(예:
tutorial-access-point)을 입력하거나 찾아보고 **지원 접근 지점 선택(Choose supporting Access Point)**을 선택해요. - **S3 API(S3 APIs)**에서 Lambda 함수가 처리할 S3 버킷의 객체를 검색하려면
GetObject를 선택해요. - **Lambda 함수 호출(Invoke Lambda function)**에서 이 자습서의 경우 다음 두 옵션 중 하나를 선택할 수 있어요.
- **계정의 함수에서 선택(Choose from functions in your account)**을 선택하고 Lambda 함수(Lambda function) 드롭다운 목록에서 4단계에서 만든 Lambda 함수(예:
tutorial-object-lambda-function)를 선택해요. - **ARN 입력(Enter ARN)**을 선택한 다음 4단계에서 만든 Lambda 함수의 Amazon 리소스 이름(ARN)을 입력해요.
- **계정의 함수에서 선택(Choose from functions in your account)**을 선택하고 Lambda 함수(Lambda function) 드롭다운 목록에서 4단계에서 만든 Lambda 함수(예:
- **Lambda 함수 버전(Lambda function version)**에서
$LATEST(4단계에서 만든 Lambda 함수의 최신 버전)를 선택해요. - (선택 사항) Lambda 함수가 range 및 part number 헤더가 있는 GET 요청을 인식하고 처리해야 한다면 **Lambda 함수가 range를 사용하는 요청을 지원합니다(Lambda function supports requests using range)**와 **Lambda 함수가 part number를 사용하는 요청을 지원합니다(Lambda function supports requests using part numbers)**를 선택해요. 그렇지 않으면 이 두 확인란을 지워요. S3 Object Lambda에서 range 또는 part number를 사용하는 방법에 대한 자세한 내용은 Range 및 partNumber 헤더 사용을 참고하세요.
- (선택 사항) 페이로드 - 선택 사항(Payload - optional) 아래에 Lambda 함수에 추가 정보를 제공할 JSON 텍스트를 추가해요. 페이로드는 특정 S3 Object Lambda 접근 지점에서 오는 모든 호출에 대해 Lambda 함수에 입력으로 제공할 수 있는 선택적 JSON 텍스트예요. 같은 Lambda 함수를 호출하는 여러 Object Lambda 접근 지점의 동작을 사용자 지정하려면 서로 다른 파라미터로 페이로드를 구성해 Lambda 함수의 유연성을 확장할 수 있어요. 페이로드에 대한 자세한 내용은 이벤트 컨텍스트 형식 및 사용법을 참고하세요.
- (선택 사항) **요청 지표 - 선택 사항(Request metrics - optional)**에서 비활성화(Disable) 또는 **활성화(Enable)**를 선택해 Object Lambda 접근 지점에 Amazon S3 모니터링을 추가해요. 요청 지표는 표준 Amazon CloudWatch 요율로 청구돼요. 자세한 내용은 CloudWatch 요금을 참고하세요.
- Object Lambda 접근 지점 정책 - 선택 사항(Object Lambda Access Point policy - optional) 아래에서 기본 설정을 유지해요.
- (선택 사항) 리소스 정책을 설정할 수 있어요. 이 리소스 정책은 지정된 Object Lambda 접근 지점을 사용할
GetObjectAPI 권한을 부여해요. - 나머지 설정은 기본값을 유지하고 **Object Lambda 접근 지점 만들기(Create Object Lambda Access Point)**를 선택해요.
7단계: 변환된 데이터 보기
이제 S3 Object Lambda가 사용 사례에 맞게 여러분의 데이터를 변환할 준비가 됐어요. 이 자습서에서는 S3 Object Lambda가 객체의 모든 텍스트를 대문자로 변환해요.
하위 단계
- S3 Object Lambda 접근 지점에서 변환된 데이터 보기
- Python 스크립트를 실행해 원본 및 변환된 데이터 출력
S3 Object Lambda 접근 지점에서 변환된 데이터 보기
S3 Object Lambda 접근 지점을 통해 파일 검색을 요청하면 S3 Object Lambda에 GetObject API 호출을 하는 거예요. S3 Object Lambda가 Lambda 함수를 호출해 여러분의 데이터를 변환한 다음, 변환된 데이터를 표준 S3 GetObject API 호출의 응답으로 반환해요.
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 Object Lambda 접근 지점을 선택해요.
- Object Lambda 접근 지점(Object Lambda Access Points) 페이지에서 6단계에서 만든 S3 Object Lambda 접근 지점(예:
tutorial-object-lambda-accesspoint)을 선택해요. - S3 Object Lambda 접근 지점의 객체(Objects) 탭에서 2단계에서 S3 버킷에 업로드한 것과 같은 이름(예:
tutorial.txt)의 파일을 선택해요. 이 파일에는 모든 변환된 데이터가 포함되어야 해요. - 변환된 데이터를 보려면 열기(Open) 또는 **다운로드(Download)**를 선택해요.
Python 스크립트를 실행해 원본 및 변환된 데이터 출력
S3 Object Lambda를 기존 애플리케이션과 함께 사용할 수 있어요. 그러려면 6단계에서 만든 새 S3 Object Lambda 접근 지점 ARN을 사용하도록 애플리케이션 구성을 업데이트해 S3에서 데이터를 검색하면 돼요.
다음 예제 Python 스크립트는 S3 버킷의 원본 데이터와 S3 Object Lambda 접근 지점의 변환된 데이터를 모두 출력해요.
-
AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
-
왼쪽 탐색 창에서 Object Lambda 접근 지점을 선택해요.
-
Object Lambda 접근 지점(Object Lambda Access Points) 페이지에서 6단계에서 만든 S3 Object Lambda 접근 지점(예:
tutorial-object-lambda-accesspoint) 왼쪽의 라디오 버튼을 선택해요. -
**ARN 복사(Copy ARN)**를 선택해요. 나중에 사용할 수 있도록 ARN을 저장해요.
-
로컬 컴퓨터에서 Python 스크립트를 작성해 S3 버킷의 원본 데이터(예:
tutorial.txt)와 S3 Object Lambda 접근 지점의 변환된 데이터(예:tutorial.txt)를 모두 출력해요. 다음 예제 스크립트를 사용할 수 있어요.import boto3 from botocore.config import Config s3 = boto3.client('s3', config=Config(signature_version='s3v4')) def getObject(bucket, key): objectBody = s3.get_object(Bucket = bucket, Key = key) print(objectBody["Body"].read().decode("utf-8")) print("\n") print('Original object from the S3 bucket:') # Replace the two input parameters of getObject() below with # the S3 bucket name that you created in Step 1 and # the name of the file that you uploaded to the S3 bucket in Step 2 getObject("tutorial-bucket", "tutorial.txt") print('Object transformed by S3 Object Lambda:') # Replace the two input parameters of getObject() below with # the ARN of your S3 Object Lambda Access Point that you saved earlier and # the name of the file with the transformed data (which in this case is # the same as the name of the file that you uploaded to the S3 bucket # in Step 2) getObject("arn:aws:s3-object-lambda:us-west-2:111122223333:accesspoint/tutorial-object-lambda-accesspoint", "tutorial.txt") -
Python 스크립트를 사용자 지정 이름(예:
tutorial_print.py)으로 4단계에서 로컬 컴퓨터에 만든 폴더(예:object-lambda)에 저장해요. -
로컬 터미널에서 4단계에서 만든 디렉터리(예:
object-lambda)의 루트에서 다음 명령을 실행해요.python3 tutorial_print.py -
터미널에서 원본 데이터와 변환된 데이터(모든 텍스트가 대문자인)를 모두 볼 수 있어야 해요. 예를 들어 다음 텍스트 같은 것이 보여야 해요.
Original object from the S3 bucket: Amazon S3 Object Lambda Tutorial: You can add your own code to process data retrieved from S3 before returning it to an application. Object transformed by S3 Object Lambda: AMAZON S3 OBJECT LAMBDA TUTORIAL: YOU CAN ADD YOUR OWN CODE TO PROCESS DATA RETRIEVED FROM S3 BEFORE RETURNING IT TO AN APPLICATION.
8단계: 정리
학습 목적으로만 S3 Object Lambda로 데이터를 변환했다면 할당한 AWS 리소스를 삭제해 더 이상 요금이 발생하지 않게 해요.
하위 단계
- Object Lambda 접근 지점 삭제
- S3 접근 지점 삭제
- Lambda 함수용 실행 역할 삭제
- Lambda 함수 삭제
- CloudWatch 로그 그룹 삭제
- S3 소스 버킷의 원본 파일 삭제
- S3 소스 버킷 삭제
- IAM 사용자 삭제
Object Lambda 접근 지점을 삭제하려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 Object Lambda 접근 지점을 선택해요.
- Object Lambda 접근 지점(Object Lambda Access Points) 페이지에서 6단계에서 만든 S3 Object Lambda 접근 지점(예:
tutorial-object-lambda-accesspoint) 왼쪽의 라디오 버튼을 선택해요. - **삭제(Delete)**를 선택해요.
- 나타나는 텍스트 필드에 이름을 입력해 Object Lambda 접근 지점을 삭제할 것임을 확인하고 **삭제(Delete)**를 선택해요.
S3 접근 지점을 삭제하려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 **접근 지점(Access Points)**을 선택해요.
- 3단계에서 만든 접근 지점(예:
tutorial-access-point)으로 이동해 접근 지점 이름 옆의 라디오 버튼을 선택해요. - **삭제(Delete)**를 선택해요.
- 나타나는 텍스트 필드에 이름을 입력해 접근 지점을 삭제할 것임을 확인하고 **삭제(Delete)**를 선택해요.
Lambda 함수용 실행 역할을 삭제하려면
- https://console.aws.amazon.com/lambda/ 의 AWS Lambda 콘솔에서 왼쪽 탐색 창의 **함수(Functions)**를 선택해요.
- 4단계에서 만든 함수(예:
tutorial-object-lambda-function)를 선택해요. - Lambda 함수의 세부 정보 페이지에서 구성(Configuration) 탭을 선택한 다음 왼쪽 탐색 창에서 **권한(Permissions)**을 선택해요.
- 실행 역할(Execution role) 아래에서 **역할 이름(Role name)**의 링크를 선택해요. IAM 콘솔이 열려요.
- Lambda 함수 실행 역할에 대한 IAM 콘솔의 요약(Summary) 페이지에서 **역할 삭제(Delete role)**를 선택해요.
- 역할 삭제(Delete role) 대화 상자에서 **예, 삭제(Yes, delete)**를 선택해요.
Lambda 함수를 삭제하려면
- https://console.aws.amazon.com/lambda/ 의 AWS Lambda 콘솔에서 왼쪽 탐색 창의 **함수(Functions)**를 선택해요.
- 4단계에서 만든 함수(예:
tutorial-object-lambda-function) 이름 왼쪽의 확인란을 선택해요. - **작업(Actions)**을 선택한 다음 **삭제(Delete)**를 선택해요.
- 함수 삭제(Delete function) 대화 상자에서 **삭제(Delete)**를 선택해요.
CloudWatch 로그 그룹을 삭제하려면
- https://console.aws.amazon.com/cloudwatch/ 에서 CloudWatch 콘솔을 열어요.
- 왼쪽 탐색 창에서 **로그 그룹(Log groups)**을 선택해요.
- 4단계에서 만든 Lambda 함수(예:
tutorial-object-lambda-function)로 끝나는 이름의 로그 그룹을 찾아요. - 로그 그룹 이름 왼쪽의 확인란을 선택해요.
- **작업(Actions)**을 선택한 다음 **로그 그룹 삭제(Delete log group(s))**를 선택해요.
- 로그 그룹 삭제(Delete log group(s)) 대화 상자에서 **삭제(Delete)**를 선택해요.
S3 소스 버킷의 원본 파일을 삭제하려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택해요.
- 버킷 이름(Bucket name) 목록에서 2단계에서 원본 파일을 업로드한 버킷 이름(예:
tutorial-bucket)을 선택해요. - 삭제하려는 객체(예:
tutorial.txt) 이름 왼쪽의 확인란을 선택해요. - **삭제(Delete)**를 선택해요.
- 객체 삭제(Delete objects) 페이지의 객체를 영구 삭제하시겠습니까?(Permanently delete objects?) 섹션에서 텍스트 상자에
permanently delete를 입력해 이 객체를 삭제할 것임을 확인해요. - **객체 삭제(Delete objects)**를 선택해요.
S3 소스 버킷을 삭제하려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 **버킷(Buckets)**을 선택해요.
- 버킷(Buckets) 목록에서 1단계에서 만든 버킷(예:
tutorial-bucket) 이름 옆의 라디오 버튼을 선택해요. - **삭제(Delete)**를 선택해요.
- 버킷 삭제(Delete bucket) 페이지에서 텍스트 필드에 버킷 이름을 입력해 버킷을 삭제할 것임을 확인하고 **버킷 삭제(Delete bucket)**를 선택해요.
IAM 사용자를 삭제하려면
- AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 열어요.
- 왼쪽 탐색 창에서 **사용자(Users)**를 선택한 다음 삭제하려는 사용자 이름 옆의 확인란을 선택해요.
- **삭제(Delete)**를 선택해요.
- 사용자 이름 삭제(Delete user name)? 대화 상자의 텍스트 입력 필드에 사용자 이름을 입력해 사용자 삭제를 확인해요. **삭제(Delete)**를 선택해요.
다음 단계
이 자습서를 완료한 뒤 사용 사례에 맞게 Lambda 함수를 사용자 지정해 표준 S3 GET 요청에서 반환되는 데이터를 수정할 수 있어요. 다음은 S3 Object Lambda의 일반적인 사용 사례 목록이에요.
- 보안 및 규정 준수를 위한 민감한 데이터 마스킹. 자세한 내용은 S3 Object Lambda와 Amazon Comprehend로 PII 데이터 감지 및 편집 자습서를 참고하세요.
- 특정 정보를 전달하기 위한 데이터 행 필터링.
- 다른 서비스나 데이터베이스의 정보로 데이터 보강.
- 애플리케이션 호환성을 위해 XML을 JSON으로 변환하는 것 같은 데이터 형식 간 변환.
- 다운로드되는 파일의 압축 또는 압축 해제.
- 이미지 크기 조정 및 워터마킹. 자세한 내용은 검색 시 이미지에 동적으로 워터마크를 입히는 S3 Object Lambda 사용 자습서를 참고하세요.
- 데이터 접근을 위한 사용자 지정 권한 부여 규칙 구현.
S3 Object Lambda에 대한 자세한 내용은 S3 Object Lambda로 객체 변환을 참고하세요.