자습서: S3 객체 Lambda를 사용하여 애플리케이션의 데이터 변환 - Amazon Simple Storage Service

자습서: S3 객체 Lambda를 사용하여 애플리케이션의 데이터 변환

데이터를 Amazon S3 저장하면 여러 애플리케이션에서 사용하기 위해 데이터를 쉽게 공유할 수 있습니다. 그러나 각 애플리케이션에는 고유한 데이터 형식 요구 사항이 있을 수 있으며 특정 사용 사례에 따라 데이터를 수정하거나 처리해야 할 수 있습니다. 예를 들어 전자 상거래 애플리케이션에서 생성한 데이터 집합에는 개인 식별 정보(PII)가 포함될 수 있습니다. 분석을 위해 동일한 데이터가 처리되는 경우 이 PII가 필요하지 않으므로 수정해야 합니다. 그러나 마케팅 캠페인에 동일한 데이터 집합이 사용되는 경우 고객 충성도 데이터베이스의 정보와 같은 추가 세부 정보로 데이터를 보강해야 할 수 있습니다.

S3 객체 Lambda를 사용하여 자체 코드를 추가하여 S3에서 검색한 데이터를 애플리케이션으로 반환하기 전에 처리할 수 있습니다. 특히, AWS Lambda 함수를 구성하여 S3 객체 Lambda 액세스 포인트에 연결할 수 있습니다. 애플리케이션에서 S3 객체 Lambda 액세스 포인트를 통해 표준 S3 GET 요청을 전송하면 지정된 Lambda 함수가 호출되어 지원 S3 액세스 포인트를 통해 S3 버킷에서 검색된 모든 데이터를 처리합니다. 그런 다음 S3 객체 Lambda 액세스 포인트가 변환된 결과를 애플리케이션에 다시 반환합니다. 애플리케이션을 변경할 필요 없이 S3 객체 Lambda 데이터 변환을 특정 사용 사례에 맞게 조정하여 자체 사용자 지정 Lambda 함수를 작성 및 실행할 수 있습니다.

이 다이어그램은 S3 객체 Lambda 워크플로 다이어그램입니다.
목표

이 자습서에서는 표준 S3 GET 요청에 사용자 지정 코드를 추가하여, 요청하는 클라이언트 또는 애플리케이션의 요구 사항에 맞게 S3에서 검색된 요청된 객체를 수정하는 방법에 대해 알아봅니다. 특히 S3에 저장된 원본 객체의 모든 텍스트를 S3 객체 Lambda를 통해 대문자로 변환하는 방법에 대해 알아봅니다.

필수 조건

이 자습서를 시작하기 전에 올바른 권한이 있는 AWS Identity and Access Management(IAM) 사용자로 로그인할 수 있는 AWS 계정이 있어야 합니다. 또한 Python 버전 3.8 이상을 설치해야 합니다.

AWS 계정 권한이 있는 IAM 사용자 생성(콘솔)

그 대신 자습서의 IAM 사용자 자격 증명을 사용하면 됩니다. 이 자습서를 완료하려면 IAM 사용자가 다음 IAM 정책을 연결하여 관련 AWS 리소스에 액세스하고 특정 작업을 수행해야 합니다. IAM 사용자를 생성하는 방법에 대한 자세한 내용은 IAM 사용 설명서IAM 사용자 생성(콘솔)을 참조하십시오.

IAM 사용자에게는 다음의 정책이 필요합니다.

  • AmazonS3FullAccess - 객체 Lambda 액세스 포인트를 생성하고 사용할 수 있는 권한을 포함하여 모든 Amazon S3 작업에 권한을 부여합니다.

  • AWSLambda_FullAccess - 모든 Lambda 작업에 권한을 부여합니다.

  • IAMFullAccess - 모든 IAM 작업에 권한을 부여합니다.

  • IAMAccessAnalyzerReadOnlyAccess - IAM 액세스 분석기에서 제공하는 모든 액세스 정보를 읽을 수 있는 권한을 부여합니다.

  • CloudWatchLogsFullAccess – CloudWatch Logs에 대한 전체 액세스 권한을 부여합니다.

참고

편의상 이 자습서에서는 IAM 사용자를 생성해 사용합니다. 이 자습서를 완료하면 IAM 사용자 삭제를 수행해야 합니다. 프로덕션 용도로는 IAM 사용 설명서에서 IAM의 보안 모범 사례를 따르는 것이 좋습니다. 가장 좋은 방법은 인간 사용자가 ID 제공업체와의 페더레이션을 사용하여 임시 보안 인증으로 AWS에 액세스하도록 하는 것입니다. 워크로드에서 IAM 역할과 함께 임시 보안 인증을 사용하여 AWS에 액세스하도록 하는 것도 좋은 방법입니다. AWS IAM Identity Center를 사용하여 임시 보안 인증으로 사용자를 생성하는 방법에 대해 알아보려면 AWS IAM Identity Center 사용 설명서Getting started(시작하기)를 참조하십시오.

이 자습서에서는 편의상 전체 액세스 AWS 관리형 정책을 사용합니다. 프로덕션 사용 용도의 경우 보안 모범 사례에 따라 사용 사례에 필요한 최소한의 권한만 부여하는 것이 좋습니다.

로컬 시스템에 Python 3.8 이상을 설치합니다.

로컬 시스템에 Python 3.8 이상을 설치하려면 다음 절차를 따르십시오. 설치 지침은 Python 초급 가이드Python 다운로드 페이지를 참조하십시오.

  1. 로컬 터미널 또는 셸을 열고 다음 명령을 실행하여 Python이 이미 설치되어 있는지 여부를 확인하고, 설치되어 있는 경우에는 어떤 버전이 설치되어 있는지 확인합니다.

    python --version
  2. Python 3.8 이상의 버전이 없는 경우 로컬 시스템에 적합한 Python 3.8 이상의 공식 설치 프로그램을 다운로드합니다.

  3. 다운로드한 파일을 두 번 클릭하여 설치 프로그램을 실행하고 단계에 따라 설치를 완료합니다.

    Windows 사용자의 경우 먼저 설치 마법사에서 Python 3.X를 경로에 추가(Add Python 3.X to PATH)를 선택한 후 지금 설치(Install Now)를 선택합니다.

  4. 터미널을 닫았다가 다시 열어서 다시 시작합니다.

  5. Python 3.8 이상이 제대로 설치되었는지 확인하려면 다음 명령을 실행합니다.

    macOS 사용자의 경우 이 명령을 실행합니다.

    python3 --version

    Windows 사용자의 경우 이 명령을 실행합니다.

    python --version
  6. pip3 패키지 관리자가 설치되었는지 확인하려면 다음 명령을 실행합니다. 명령 응답에 pip 버전 번호와 python 3.8 이상이 표시되면 pip3 패키지 관리자가 성공적으로 설치되었음을 의미합니다.

    pip --version

1단계: S3 버킷 생성

버킷을 생성하여 변환하려는 원본 데이터를 저장합니다.

버킷을 생성하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 버킷(Buckets)을 선택합니다.

  3. 버킷 만들기를 선택합니다.

    버킷 만들기 페이지가 열립니다.

  4. 버킷 이름(Bucket Name)에서 버킷 이름을 입력합니다(예: tutorial-bucket).

    Amazon S3의 버킷 이름 지정 규칙에 대한 자세한 내용은 버킷 이름 지정 규칙 섹션을 참조하세요.

  5. 리전(Region)에서 버킷이 속할 AWS 리전을 선택합니다.

    버킷 리전에 대한 자세한 내용은 버킷 개요 섹션을 참조하세요.

  6. 이 버킷에 대한 퍼블릭 액세스 차단 설정(Block Public Access settings for this bucket)에서 해당 설정을 기본값으로 유지합니다(모든 퍼블릭 액세스 차단(Block all public access)이 활성화됨).

    해당 사용 사례에 대해 하나 이상의 설정을 해제해야 하는 경우가 아니라면 모든 설정을 퍼블릭 액세스 차단 설정 활성화 상태로 유지하는 것이 좋습니다. 퍼블릭 액세스 차단에 대한 자세한 내용은 Amazon S3 스토리지에 대한 퍼블릭 액세스 차단 섹션을 참조하십시오.

  7. 나머지 설정은 기본값으로 유지합니다.

    특정 사용 사례에 대한 추가 버킷 설정을 구성하려면 버킷 생성 섹션을 참조하십시오(선택 사항).

  8. 버킷 생성을 선택합니다.

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.
버킷에 파일을 업로드하려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 버킷(Buckets)을 선택합니다.

  3. 버킷(Buckets) 목록에서, 1단계에서 생성한 버킷의 이름(예: tutorial-bucket)을 선택하여 파일을 업로드합니다.

  4. 버킷의 객체(Objects) 탭에서 업로드(Upload)를 선택합니다.

  5. 업로드(Upload) 페이지의 파일 및 폴더(Files and Folders)에서 파일 추가(Add Files)를 선택합니다.

  6. 업로드할 파일을 선택한 후 열기를 선택합니다. 예를 들어, 앞에서 언급한 tutorial.txt 파일 예제를 업로드할 수 있습니다.

  7. 업로드를 선택합니다.

3단계: S3 액세스 포인트 생성

S3 객체 Lambda 액세스 포인트를 사용하여 원본 데이터에 액세스하고 변환하려면 S3 액세스 포인트를 생성하고 1단계에서 생성한 S3 버킷에 연결해야 합니다. 액세스 포인트는 변환하려는 객체와 동일한 AWS 리전에 있어야 합니다.

이 자습서의 뒷부분에서 이 액세스 포인트를 객체 Lambda 액세스 포인트에 대한 지원 액세스 포인트로 사용합니다.

액세스 포인트 생성
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 탐색 창에서 액세스 포인트(Access Points)를 선택합니다.

  3. 액세스 포인트(Access Points) 페이지에서 액세스 포인트 생성(Create access point)을 선택합니다.

  4. 액세스 포인트 이름(Access point name) 필드에 액세스 포인트 이름을 입력합니다(예: tutorial-access-point).

    액세스 포인트 명명에 대한 자세한 내용은 Amazon S3 액세스 포인트 이름 지정 규칙 섹션을 참조하십시오.

  5. 버킷(Buckets) 필드에서, 1단계에서 생성한 버킷의 이름을 입력합니다(예: tutorial-bucket). S3는 액세스 포인트를 이 버킷에 연결합니다.

    (선택 사항) S3 찾아보기(Browse S3)를 선택하여 계정의 버킷을 찾아보고 검색할 수 있습니다. S3 찾아보기(Browse S3)를 선택할 경우 원하는 버킷을 선택한 후 경로 선택(Choose path)을 선택하여 버킷 이름(Bucket name) 필드를 해당 버킷의 이름으로 채웁니다.

  6. 네트워크 오리진(Network origin)에서 인터넷(Internet)을 선택합니다.

    액세스 포인트의 네트워크 오리진에 대한 자세한 내용은 Virtual Private Cloud(VPC)로 제한된 액세스 포인트 생성 섹션을 참조하십시오.

  7. 액세스 포인트에는 기본값으로 모든 퍼블릭 액세스 차단(Block all public access) 설정이 활성화되어 있습니다. 모든 퍼블릭 액세스 차단(Block all public access) 설정을 활성화 상태로 유지하는 것이 좋습니다.

    자세한 정보는 액세스 포인트에 대한 퍼블릭 액세스 관리을 참조하세요.

  8. 다른 모든 액세스 포인트 설정의 경우 기본 설정을 그대로 유지합니다.

    (선택 사항) 사용 사례를 지원하도록 액세스 포인트 설정을 수정할 수 있습니다. 이 자습서에서는 기본 설정을 그대로 유지하는 것이 좋습니다.

    (선택 사항) 액세스 포인트에 대한 액세스를 관리해야 하는 경우 액세스 포인트 정책을 지정할 수 있습니다. 자세한 정보는 액세스 포인트 정책 예제을 참조하세요.

  9. 액세스 포인트 생성을 선택합니다.

4단계: Lambda 함수 생성

원본 데이터를 변환하려면 S3 객체 Lambda 액세스 포인트에 사용할 Lambda 함수를 생성합니다.

Lambda 함수 코드 작성 및 가상 환경의 배포 패키지 생성

  1. 로컬 시스템에서, 이 자습서의 뒷부분에서 사용할 가상 환경의 object-lambda 폴더 이름으로 폴더를 생성합니다.

  2. 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에서 객체를 스트리밍하여 전체 객체를 메모리에 로드하지 않도록 할 수 있습니다. 이 접근 방법은 큰 객체 작업 시 유용할 수 있습니다. 객체 Lambda 액세스 포인트를 사용하여 응답을 스트리밍하는 방법에 대한 자세한 내용은 Lambda에서 GetObject 요청 작업 섹션을 참조하십시오.

    S3 객체 Lambda 액세스 포인트와 함께 사용할 Lambda 함수를 작성할 때 이 함수는 S3 객체 Lambda 함수가 Lambda 함수에 제공하는 입력 이벤트 컨텍스트를 기반으로 합니다. 이벤트 컨텍스트는 S3 객체 Lambda에서 Lambda로 전달된 이벤트에서 수행되는 요청에 대한 정보를 제공합니다. 여기에는 Lambda 함수를 생성하는 데 사용하는 파라미터가 포함되어 있습니다.

    앞의 Lambda 함수를 생성하는 데 사용된 필드는 다음과 같습니다.

    getObjectContext 필드는 Amazon S3 및 S3 객체 Lambda 연결에 대한 입력 및 출력 세부 정보입니다. 해당 필드에는 다음 필드가 포함되어 있습니다.

    • inputS3Url - Lambda 함수가 지원 액세스 포인트에서 원본 객체를 다운로드하는 데 사용할 수 있는 미리 서명된 URL입니다. 미리 서명된 URL을 사용하면 Lambda 함수가 원본 객체를 검색하기 위해 Amazon S3 읽기 권한을 가질 필요가 없으며 각 호출에 의해 처리된 객체에만 액세스할 수 있습니다.

    • outputRoute - 변환된 객체를 다시 전송하기 위해 Lambda 함수에서 WriteGetObjectResponse를 호출할 때 S3 객체 Lambda URL에 추가되는 라우팅 토큰입니다.

    • outputToken - 변환된 객체를 다시 전송할 때 WriteGetObjectResponse 호출을 원래 발신자와 일치시키기 위해 S3 객체 Lambda에서 사용하는 토큰입니다.

    이벤트 컨텍스트의 모든 필드에 대한 자세한 내용은 이벤트 컨텍스트 형식 및 사용법S3 객체 Lambda 액세스 포인트에 대한 Lambda 함수 작성 섹션을 참조하십시오.

  3. 로컬 터미널에서 virtualenv 패키지를 설치하려면 다음 명령을 입력합니다.

    python -m pip install virtualenv
  4. 로컬 터미널에서, 이전에 생성된 object-lambda 폴더를 연 후 다음 명령을 입력하여 venv 가상 환경을 생성하고 초기화합니다.

    python -m virtualenv venv
  5. 가상 환경을 활성화하려면 다음 명령을 입력하여 환경의 폴더에서 activate 파일을 실행합니다.

    macOS 사용자의 경우 이 명령을 실행합니다.

    source venv/bin/activate

    Windows 사용자의 경우 이 명령을 실행합니다.

    .\venv\Scripts\activate

    이제 명령 프롬프트가 (venv)를 표시하도록 변경되어 가상 환경이 활성임을 보여 줍니다.

  6. 필요한 라이브러리를 설치하려면 venv 가상 환경에서 다음 명령을 한 줄씩 실행합니다.

    이러한 명령은 lambda_handler Lambda 함수의 종속성에 대한 업데이트된 버전을 설치합니다. 이러한 종속성은 AWS SDK for Python(Boto3) 및 요청 모듈입니다.

    pip3 install boto3
    pip3 install requests
  7. 가상 환경을 비활성화하려면 다음 명령을 실행합니다.

    deactivate
  8. 설치된 라이브러리를 object-lambda 디렉터리의 루트에 lambda.zip이라는 .zip 파일로 사용하여 배포 패키지를 생성하려면 로컬 터미널에서 다음 명령줄을 한 줄씩 실행합니다.

    작은 정보

    특정 환경에서 작동하도록 다음 명령을 조정해야 할 수 있습니다. 예를 들어 라이브러리는 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 디렉터리의 루트에 저장합니다.

  9. 배포 패키지 루트에 함수 코드 파일 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 함수 생성(콘솔)

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 함수(Functions)를 선택합니다.

  3. 함수 생성을 선택합니다.

  4. 새로 작성을 선택합니다.

  5. 기본 정보에서 다음과 같이 합니다.

    1. [함수 이름(Function name)]에 tutorial-object-lambda-function을 입력합니다.

    2. 런타임(Runtime)에서 Python 3.8 이상 버전을 선택합니다.

  6. 기본 실행 역할 변경(Change default execution role) 섹션을 펼칩니다. 실행 역할(Execution role)에서 기본 Lambda 권한을 가진 새 역할 생성(Create a new role with basic Lambda permissions)을 선택합니다.

    이 자습서 뒷부분의 5단계에서 AmazonS3ObjectLambdaExecutionRolePolicy를 이 Lambda 함수의 실행 역할에 연결합니다.

  7. 나머지 설정은 기본값으로 유지합니다.

  8. 함수 생성을 선택합니다.

.zip 파일 아카이브를 사용하여 Lambda 함수 코드 배포 및 Lambda 함수 구성(콘솔)

  1. https://console.aws.amazon.com/lambda/에 있는 AWS Lambda 콘솔의 왼쪽 탐색 창에서 함수(Functions)를 선택합니다.

  2. 전에 생성해 둔 Lambda 함수를 선택합니다(예: tutorial-object-lambda-function).

  3. Lambda 함수의 세부 정보 페이지에서 코드(Code) 탭을 선택합니다. 코드 소스(Code Source) 섹션에서 업로드 원본(Upload from)을 선택한 다음 .zip 파일(.zip file)을 선택합니다.

  4. 업로드(Upload)를 선택하여 로컬 .zip 파일을 선택합니다.

  5. 이전에 생성한 lambda.zip 파일을 선택한 후 열기(Open)를 선택합니다.

  6. Save(저장)를 선택합니다.

  7. 런타임 설정(Runtime settings) 섹션에서 편집(Edit)을 선택합니다.

  8. 런타임 설정 편집(Edit runtime settings) 페이지에서 런타임(Runtime)Python 3.8 이상 버전으로 설정되었는지 확인합니다.

  9. Lambda 함수 코드에서 호출할 핸들러 메서드를 Lambda 런타임에 알리기 위해 핸들러(Handler)transform.lambda_handler를 입력합니다.

    Python에서 함수를 구성할 때, 핸들러 설정의 값은 파일의 이름과 핸들러 모듈의 이름이며 점으로 구분됩니다. 예를 들어 transform.lambda_handlertransform.py 파일에 정의된 lambda_handler 메서드를 호출합니다.

  10. Save(저장)를 선택합니다.

  11. (선택 사항) Lambda 함수의 세부 정보 페이지에서 구성(Configuration) 탭을 선택합니다. 왼쪽 탐색 창에서 일반 구성(General configuration)을 선택한 후 편집(Edit)을 선택합니다. 제한 시간(Timeout) 필드에 10초를 입력합니다. 나머지 설정은 기본값으로 유지하고 저장(Save)을 선택합니다.

    제한 시간(Timeout)은 Lambda가 함수를 중지하기까지 호출 실행을 허용하는 시간입니다. 기본값은 3초입니다. S3 객체 Lambda에서 사용하는 Lambda 함수의 최대 지속 시간은 60초입니다. 요금은 구성된 메모리 양과 코드가 실행되는 시간을 기준으로 책정됩니다.

5단계: Lambda 함수의 실행 역할에 대한 IAM 정책 구성

Lambda 함수가 사용자 지정된 데이터 및 응답 헤더를 GetObject 발신자에게 제공하도록 설정하려면 Lambda 함수의 실행 역할에 WriteGetObjectResponse API를 호출할 수 있는 IAM 권한이 있어야 합니다.

IAM 정책을 Lambda 함수 역할에 연결하려면

  1. https://console.aws.amazon.com/lambda/에 있는 AWS Lambda 콘솔의 왼쪽 탐색 창에서 함수(Functions)를 선택합니다.

  2. 4단계에서 생성한 함수(예: tutorial-object-lambda-function)를 선택합니다.

  3. Lambda 함수의 세부 정보 페이지에서 구성(Configuration) 탭을 선택한 후 왼쪽 탐색 창에서 권한(Permissions)을 선택합니다.

  4. 실행 역할(Execution role)에서 역할 이름(Role name) 링크를 선택합니다. 그러면 IAM 콘솔이 열립니다.

  5. Lambda 함수의 실행 역할에 대한 IAM 콘솔의 Summary(요약) 페이지에서 Permissions(권한) 탭을 선택합니다. 그런 다음, 권한 추가 메뉴에서 정책 연결을 선택합니다.

  6. 권한 연결(Attach Permissions) 페이지에서 검색 필드에 AmazonS3ObjectLambdaExecutionRolePolicy를 입력하여 정책 목록을 필터링합니다. AmazonS3ObjectLambdaExecutionRolePolicy 정책 이름 옆의 확인란을 선택합니다.

  7. 정책 연결을 선택합니다.

6단계: S3 객체 Lambda 액세스 포인트 생성

S3 객체 Lambda 액세스 포인트는 해당 함수가 S3 액세스 포인트에서 검색된 데이터를 처리할 수 있도록 S3 GET 요청에서 직접 Lambda 함수를 호출할 수 있는 유연성을 제공합니다. S3 객체 Lambda 액세스 포인트를 생성하고 구성하는 경우, Lambda 함수를 지정하여 Lambda가 사용할 사용자 지정 파라미터로 JSON 형식의 이벤트 컨텍스트를 호출하고 제공해야 합니다.

S3 객체 Lambda 액세스 포인트를 생성하는 방법
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 객체 Lambda 액세스 포인트(Object Lambda Access Points)를 선택합니다.

  3. 객체 Lambda 액세스 포인트(Object Lambda Access Points) 페이지에서 객체 Lambda 액세스 포인트 생성(Create Object Lambda Access Point)을 선택합니다.

  4. 객체 Lambda 액세스 포인트 이름에서 객체 Lambda 액세스 포인트에 사용할 이름을 입력합니다(예: tutorial-object-lambda-accesspoint).

  5. 지원 액세스 포인트(Supporting Access Point)에서, 3단계에서 생성한 표준 액세스 포인트(예: tutorial-access-point)를 입력하거나 검색한 후 지원 액세스 포인트 선택(Choose supporting Access Point).을 선택합니다.

  6. S3 API의 경우, Lambda 함수가 처리할 S3 버킷에서 객체를 검색하려면 GetObject를 선택합니다.

  7. 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)을 입력합니다.

  8. Lambda 함수 버전(Lambda function version)에서 $LATEST(4단계에서 생성한 Lambda 함수의 최신 버전)를 선택합니다.

  9. (선택 사항) Lambda 함수가 범위 및 부분 번호 헤더가 있는 GET 요청을 인식하고 처리해야 하는 경우 Lambda 함수는 범위를 사용하여 요청을 지원합니다(Lambda function supports requests using range)Lambda 함수는 부분 번호를 사용하여 요청을 지원합니다(Lambda function supports requests using part numbers)를 선택합니다. 그렇지 않으면 이 두 확인란의 선택을 취소합니다.

    S3 객체 Lambda에서 범위 또는 부분 번호를 사용하는 방법에 대한 자세한 내용은 Range 및 partNumber 헤더 작업 섹션을 참조하십시오.

  10. (선택 사항) 페이로드 - 선택 사항(Payload - optional)에서, Lambda 함수에 추가 정보를 제공하는 JSON 텍스트를 추가합니다.

    페이로드는 특정 S3 객체 Lambda 액세스 포인트에서 오는 모든 호출에 대한 입력으로 Lambda 함수에 제공할 수 있는 선택적 JSON 텍스트입니다. 동일한 Lambda 함수를 호출하는 여러 객체 Lambda 액세스 포인트에 대해 사용자 지정하기 위해 서로 다른 파라미터를 사용하여 페이로드를 구성할 수 있으므로 Lambda 함수의 유연성을 높일 수 있습니다.

    페이로드에 대한 자세한 내용은 이벤트 컨텍스트 형식 및 사용법 섹션을 참조하십시오.

  11. 요청 지표 - 선택 사항에서 비활성화 또는 활성화를 선택하여 객체 Lambda 액세스 포인트에 Amazon S3 모니터링을 추가합니다(선택 사항). 요청 지표는 표준 Amazon CloudWatch 요금으로 청구됩니다. 자세한 내용은 CloudWatch 요금을 참조하십시오.

  12. 객체 Lambda 액세스 포인트 정책 - 선택 사항(Object Lambda Access Point policy - optional)에서 기본 설정을 그대로 유지합니다.

    리소스 정책을 설정할 수 있습니다(선택 사항). 이 리소스 정책은 지정된 객체 Lambda 액세스 포인트를 사용할 수 있는 권한을 GetObject API에 부여합니다.

  13. 나머지 설정은 기본값으로 유지하고 객체 Lambda 액세스 포인트 생성(Create Object Lambda Access Point)을 선택합니다.

7단계: 변환된 데이터 보기

이제 S3 Object Lambda가 사용 사례에 맞게 데이터를 변환할 준비가 되었습니다. 이 자습서에서는 S3 객체 Lambda가 객체의 모든 텍스트를 대문자로 변환합니다.

S3 객체 Lambda 액세스 포인트에서 변환된 데이터 보기

S3 객체 Lambda 액세스 포인트를 통해 파일을 검색하도록 요청할 때 S3 객체 Lambda에 대한 GetObject API 호출을 수행합니다. S3 객체 Lambda는 Lambda 함수를 호출하여 데이터를 변환하고 변환된 데이터를 표준 S3 GetObject API 호출에 대한 응답으로 반환합니다.

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 객체 Lambda 액세스 포인트(Object Lambda Access Points)를 선택합니다.

  3. 객체 Lambda 액세스 포인트 페이지에서 6단계에서 생성한 S3 객체 Lambda 액세스 포인트를 선택합니다(예: tutorial-object-lambda-accesspoint).

  4. S3 객체 Lambda 액세스 포인트의 객체 탭에서 2단계에서 S3 버킷에 업로드한 파일과 이름이 같은 파일을 선택합니다(예: tutorial.txt)

    이 파일에는 변환된 모든 데이터가 포함되어야 합니다.

  5. 변환된 데이터를 보려면 열기(Open) 또는 다운로드(Download)를 선택합니다.

Python 스크립트를 실행하여 원본 및 변환된 데이터를 인쇄합니다.

S3 객체 Lambda를 기존 애플리케이션에서 사용할 수 있습니다. 이 작업을 수행하려면 6단계에서 생성한 새로운 S3 객체 Lambda 액세스 포인트 ARN을 사용하여 S3에서 데이터를 검색하도록 애플리케이션 구성을 업데이트합니다.

다음 예시 Python 스크립트는 S3 버킷의 원본 데이터와 S3 객체 Lambda 액세스 포인트에서 변환된 데이터를 모두 인쇄합니다.

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 객체 Lambda 액세스 포인트(Object Lambda Access Points)를 선택합니다.

  3. 객체 Lambda 액세스 포인트 페이지에서 6단계에서 생성한 S3 객체 Lambda 액세스 포인트 왼쪽에 있는 라디오 버튼을 선택합니다(예: tutorial-object-lambda-accesspoint).

  4. ARN 복사(Copy ARN)를 선택합니다.

  5. 나중에 사용할 수 있도록 ARN을 저장합니다.

  6. 로컬 시스템에서 Python 스크립트를 작성하여 S3 버킷의 원본 데이터(예 :tutorial.txt)와 S3 객체 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")
  7. 로컬 시스템의 4단계에서 생성한 폴더(예: object-lambda)에 Python 스크립트를 사용자 지정 이름(예: tutorial_print.py)으로 저장합니다.

  8. 로컬 터미널에서, 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 객체 Lambda를 통해 데이터를 변환한 경우에는 요금이 발생하지 않도록 할당한 AWS 리소스를 삭제합니다.

객체 Lambda 액세스 포인트 삭제

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 객체 Lambda 액세스 포인트(Object Lambda Access Points)를 선택합니다.

  3. 객체 Lambda 액세스 포인트 페이지에서 6단계에서 생성한 S3 객체 Lambda 액세스 포인트 왼쪽에 있는 라디오 버튼을 선택합니다(예: tutorial-object-lambda-accesspoint).

  4. 삭제를 선택합니다.

  5. 표시되는 텍스트 필드에 객체 Lambda 액세스 포인트 이름을 입력하여 삭제 여부를 확인하고 삭제를 선택합니다.

S3 액세스 포인트 삭제

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 탐색 창에서 액세스 포인트(Access Points)를 선택합니다.

  3. 3단계에서 생성한 액세스 포인트(예: tutorial-access-point)로 이동한 후 액세스 포인트 이름 옆에 있는 라디오 버튼을 선택합니다.

  4. 삭제를 선택합니다.

  5. 표시되는 텍스트 필드에 액세스 포인트 이름을 입력하여 삭제 여부를 확인하고 삭제(Delete)를 선택합니다.

Lambda 함수용 실행 역할 삭제

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/lambda/에서 AWS Lambda 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 함수(Functions)를 선택합니다.

  3. 4단계에서 생성한 함수(예: tutorial-object-lambda-function)를 선택합니다.

  4. Lambda 함수의 세부 정보 페이지에서 구성(Configuration) 탭을 선택한 후 왼쪽 탐색 창에서 권한(Permissions)을 선택합니다.

  5. 실행 역할(Execution role)에서 역할 이름(Role name) 링크를 선택합니다. 그러면 IAM 콘솔이 열립니다.

  6. Lambda 함수의 실행 역할에 대한 IAM 콘솔 요약(Summary) 페이지에서 역할 삭제(Delete role)를 선택합니다.

  7. 역할 삭제(Delete role) 대화 상자에서 예, 삭제(Yes, Delete)를 선택합니다.

Lambda 함수 삭제

  1. https://console.aws.amazon.com/lambda/에 있는 AWS Lambda 콘솔의 왼쪽 탐색 창에서 함수(Functions)를 선택합니다.

  2. 4단계에서 생성한 함수 이름 왼쪽에 있는 확인란을 선택합니다(예: tutorial-object-lambda-function).

  3. 작업을 선택한 후 삭제를 선택합니다.

  4. 함수 삭제(Delete function) 대화 상자에서 삭제(Delete)를 선택합니다.

CloudWatch 로그 그룹 삭제

  1. https://console.aws.amazon.com/cloudwatch/에서 CloudWatch 콘솔을 엽니다.

  2. 탐색 창에서 로그 그룹(Log groups)을 선택합니다.

  3. 이름이 4단계에서 생성한 Lambda 함수로 끝나는 로그 그룹을 찾습니다(예: tutorial-object-lambda-function).

  4. 로그 그룹 이름 왼쪽에 있는 확인란을 선택합니다.

  5. 작업(Actions)을 선택한 후 로그 그룹 삭제(Delete log group(s))를 선택합니다.

  6. 로그 그룹 삭제(Delete log group(s)) 대화 상자에서 삭제(Delete)를 선택합니다.

S3 소스 버킷에서 원본 파일 삭제

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 버킷(Buckets)을 선택합니다.

  3. 버킷 이름(Bucket name) 목록에서, 2단계에서 원본 파일을 업로드한 버킷의 이름을 선택합니다(예: tutorial-bucket).

  4. 삭제할 객체의 이름 왼쪽에 있는 확인란을 선택합니다(예: tutorial.txt).

  5. 삭제를 선택합니다.

  6. 객체 삭제(Delete objects) 페이지의 객체를 영구적으로 삭제하시겠습니까?(Permanently delete objects?) 섹션에서 텍스트 상자에 permanently delete를 입력하여 이 객체의 삭제 여부를 확인합니다.

  7. 객체 삭제를 선택합니다.

S3 소스 버킷 삭제

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 버킷(Buckets)을 선택합니다.

  3. 버킷(Buckets) 목록에서, 1단계에서 생성한 버킷의 이름 옆에 있는 라디오 버튼을 선택합니다(예: tutorial-bucket).

  4. 삭제를 선택합니다.

  5. 버킷 삭제(Delete bucket) 페이지의 텍스트 필드에 버킷 이름을 입력하여 버킷의 삭제 여부를 확인한 다음 버킷 삭제(Delete bucket)를 선택합니다.

IAM 사용자 삭제

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 사용자(Users)를 선택한 후 삭제할 사용자 이름 옆에 있는 확인란을 선택합니다.

  3. 페이지 상단에서 삭제(Delete)를 선택합니다.

  4. 사용자 이름을 삭제하시겠습니까?(Delete user name?) 대화 상자에서 텍스트 입력 필드에 역할 이름을 입력하여 사용자의 삭제 여부를 확인합니다. 삭제를 선택합니다.

다음 단계

이 자습서를 완료한 후 사용 사례에 따라 Lambda 함수를 사용자 지정하여 표준 S3 GET 요청에서 반환된 데이터를 수정할 수 있습니다.

다음은 S3 객체 Lambda의 일반적인 사용 사례 목록입니다.

  • 보안 및 규정 준수를 위해 민감한 데이터를 마스킹합니다.

    자세한 정보는 자습서: S3 객체 Lambda 및 Amazon Comprehend를 사용하여 PII 데이터 감지 및 수정을 참조하세요.

  • 특정 정보를 제공하기 위해 특정 데이터 행을 필터링합니다.

  • 다른 서비스 또는 데이터베이스의 정보로 데이터를 보강합니다.

  • 애플리케이션 호환성을 위해 XML을 JSON으로 변환하는 등 데이터 형식 간에 변환합니다.

  • 다운로드 중일 때 파일을 압축 또는 압축 해제합니다.

  • 이미지 크기를 조정하고 워터마킹을 수행합니다.

    자세한 내용은 Tutorial: Using S3 Object Lambda to dynamically watermark images as they are retrieved(자습서: S3 객체 Lambda를 사용하여 이미지를 검색할 때 동적으로 워터마크 지정)를 참조하십시오.

  • 사용자 지정 권한 부여 규칙을 구현하여 데이터에 액세스합니다.

S3 객체 Lambda에 대한 자세한 내용은 S3 객체 Lambda를 사용하여 객체 변환 섹션을 참조하세요.