Lambda 함수를 사용하여 한 Amazon S3 버킷에서 다른 버킷으로 파일을 복사하려면 어떻게 해야 하나요?

3분 분량
0

AWS Lambda 함수를 사용하여 Amazon Simple Storage Service(S3) 버킷에서 다른 버킷으로 파일을 복사하고 싶습니다.

해결 방법

다음 단계에 따라 원본 Amazon S3 버킷에서 대상 S3 버킷으로 파일을 복사하는 Lambda 함수를 생성하세요.

원본 및 대상 Amazon S3 버킷 생성

참고: 원본 및 대상 S3 버킷을 이미 생성한 경우 이 단계를 건너뛰세요.

다음 단계를 완료합니다.

  1. Amazon S3 콘솔을 엽니다.
  2. 버킷 생성을 선택합니다.
  3. 버킷 이름에 원본 버킷의 이름을 입력합니다.
  4. AWS 리전 드롭다운 목록에서 내 AWS 리전을 선택합니다.
  5. 버킷 생성을 선택합니다.
  6. 대상 버킷에 대해 1~4단계를 반복합니다.

자세한 내용을 보려면 버킷 생성을 참조하세요.

Lambda 함수 생성

다음 단계를 완료합니다.

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

  2. 함수 생성을 선택한 다음 처음부터 새로 작성을 선택합니다.

  3. 함수 이름에 내 함수 이름을 입력합니다.

  4. 런타임 드롭다운 목록에서 Python 3.11을 선택합니다.

  5. 기본 실행 역할 변경을 확장한 다음 기본 권한으로 새 역할 생성을 선택합니다.

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

  7. 코드 탭을 선택하고 다음 Python 코드를 붙여 넣습니다.

    import boto3import botocore
    import json
    import os
    import logging
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    s3 = boto3.resource('s3')
    
    def lambda_handler(event, context):
        logger.info("New files uploaded to the source bucket.")
    
        key = event['Records'][0]['s3']['object']['key']
    
        source_bucket = event['Records'][0]['s3']['bucket']['name']
        destination_bucket = os.environ['destination_bucket']
    
        source = {'Bucket': source_bucket, 'Key': key}
    
        try:
            response = s3.meta.client.copy(source, destination_bucket, key)
            logger.info("File copied to the destination bucket successfully!")
    
        except botocore.exceptions.ClientError as error:
            logger.error("There was an error copying the file to the destination bucket")
            print('Error Message: {}'.format(error))
    
        except botocore.exceptions.ParamValidationError as error:
            logger.error("Missing required parameters while calling the API.")
            print('Error Message: {}'.format(error))

    참고: Lambda 함수가 수신하는 이벤트 객체에서 source_bucket 이름을 찾습니다. destination_bucket 이름을 환경 변수로 저장할 수 있습니다.

  8. 배포를 선택합니다.

Lambda는 Amazon CloudWatch에 로그를 업로드할 수 있는 권한을 함수에 부여하는 실행 역할을 생성합니다. 자세한 내용을 보려면 콘솔을 사용한 Lambda 함수 생성을 참조하세요.

Lambda 함수를 위한 Amazon S3 트리거 생성

다음 단계를 완료합니다.

  1. Lambda 콘솔에서 함수 페이지를 엽니다.
  2. 함수에서 Lambda 함수를 선택합니다.
  3. 함수 개요에서 트리거 추가를 선택합니다.
  4. 트리거 구성드롭다운 목록에서 S3를 선택합니다.
  5. 버킷에 원본 버킷의 이름을 입력합니다.
  6. 이벤트 유형 드롭다운 목록에서 모든 객체 생성 이벤트를 선택합니다.
    참고: POST, PUT 또는 멀티파트 업로드 이벤트 유형을 사용하여 객체를 업로드하도록 이 단계를 구성합니다.
  7. 입력과 출력 모두에 동일한 S3 버킷을 사용하는 것이 권장되지 않음을 인정합니다에 동의함을 선택한 다음 추가를 선택합니다.

자세한 내용을 보려면 자습서: Amazon S3 트리거를 사용하여 Lambda 함수 간접 호출을 참조하세요.

Lambda 함수의 실행 역할에 대한 IAM 권한 제공

대상 S3 버킷에 파일을 복사하려면 Lambda 함수의 실행 역할에 AWS Identity and Access Management(IAM) 권한을 추가합니다. 다음 리소스 기반 정책과 유사한 정책을 사용하세요.

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "putObject",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::destination-s3-bucket/*"
      ]
    },
    {
      "Sid": "getObject",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::source-s3-bucket/*"
      ]
    }
  ]
}

참고:

  • destination-s3-bucket을 내 S3 대상 버킷으로 교체하고 source-s3-bucket을 S3 원본 버킷으로 교체합니다.
  • 리소스 ARN 끝에 있는 /*를 해당 환경에 필요한 접두사 값으로 바꾸어 권한을 제한합니다.
  • 작업을 수행할 수 있는 최소 권한 권한을 부여하는 것이 가장 좋습니다.
  • 객체 태그가 있는 객체를 복사하려면 실행 역할에 s3:GetObjectTaggings3:PutObjectTagging 권한이 있어야 합니다. 원복 객체에 대한 s3:GetObjectTagging 권한과 대상 버킷의 객체에 대한 s3:PutObjectTagging 권한이 있어야 합니다.

자세한 내용을 보려면 AWS 서비스에 대한 함수 액세스 권한 부여를 참조하세요.

관련 정보

Amazon S3의 403 Access Denied 오류 문제를 해결하려면 어떻게 해야 하나요?

Lambda 실행 역할이 Amazon S3 버킷에 액세스하도록 허용하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 5달 전
댓글 없음