자체 관리 S3 코드 스토리지

자체 관리 S3 코드 스토리지 (Self-managed S3 code storage)

기본적으로 .zip 파일 아카이브에서 Lambda 함수나 레이어를 만들거나 업데이트하면 Lambda가 코드 사본을 Lambda 관리 스토리지에 저장해요. 각 AWS 계정에는 리전당 Lambda 관리 스토리지에 300 GB 할당량이 있어요.

출처: AWS Lambda 개발자 안내서

본문

자체 관리 S3 코드 스토리지를 사용하면 Lambda가 계정의 S3 버킷에서 코드를 직접 참조하도록 구성할 수 있어요. Lambda는 코드 사본을 저장하지 않으므로 코드가 Lambda 관리 스토리지 할당량에 포함되지 않아요. Lambda는 S3 버킷에서 코드에 직접 접근해요.

자체 관리 S3 코드 스토리지는 .zip 파일 아카이브를 사용해 만들고 업데이트하는 모든 함수와 레이어에 사용할 수 있어요. Glacier 스토리지 클래스를 제외한 모든 S3 스토리지 클래스와 호환돼요.

참고

자체 관리 S3 코드 스토리지는 최대 .zip 배포 패키지 크기를 변경하지 않으며, 이 크기는 250 MB(압축 해제 기준)로 유지돼요.

자체 관리 S3 코드 스토리지 설정 (Setting up self-managed S3 code storage)

자체 관리 S3 코드 스토리지를 사용하려면 다음 단계를 완료해요.

  1. 계정에 S3 버킷을 만들거나 기존 버킷을 사용해요.
  2. 버킷에 S3 버전 관리를 활성화해요. Lambda는 사용할 소스 객체의 버전을 추적하기 위해 S3 버전 관리를 요구해요. 새 .zip 패키지를 업로드할 때마다 S3가 새 버전을 만들어 Lambda가 업데이트를 구분할 수 있게 해요.
  3. .zip 배포 패키지를 S3 버킷에 업로드해요.
  4. Lambda 서비스 프린시펄에 소스 객체에 대한 s3:GetObject 와 s3:GetObjectVersion 권한을 부여해요. 권한 구성을 참고하세요.
  5. S3 객체, S3 키, S3 객체 버전을 지정하고 S3ObjectStorageMode 를 REFERENCE 로 설정해 함수나 레이어를 만들거나 업데이트해요.

권한 구성 (Configuring permissions)

자체 관리 S3 코드 스토리지를 사용하려면 Lambda 서비스 프린시펄(lambda.amazonaws.com)에 소스 객체에 접근할 권한을 부여해요. 다음 S3 버킷 정책을 추가해요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "LambdaSelfManagedCodeAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket/my-function.zip"
      ],
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:function:my-function"
        }
      }
    }
  ]
}

자체 관리 S3 스토리지로 함수 생성 (Creating a function with self-managed S3 storage)

콘솔, AWS CLI, AWS CloudFormation을 사용해 자체 관리 S3 코드 스토리지로 함수를 만들 수 있어요.

참고

Reference 모드를 사용하는 함수에는 Lambda 콘솔 코드 편집기를 사용할 수 없어요. 함수 코드를 편집하려면 S3 버킷의 .zip 파일을 업데이트하고 함수를 업데이트해요.

콘솔 사용 (Using the console)

Lambda 콘솔에서 S3 위치에서 함수를 업데이트할 때 코드 스토리지 모드를 선택할 수 있어요.

함수를 Reference 모드로 업데이트하려면(콘솔)

  1. Lambda 콘솔의 Functions 페이지를 열어요.
  2. 업데이트할 함수를 선택하고 Code 탭을 선택해요.
  3. Code source 아래에서 Update 를 선택한 다음 Update from a file in Amazon S3 를 선택해요.
  4. Amazon S3 link URL 에 .zip 파일의 S3 링크 URL을 입력해요.
  5. Code storage mode 아래에서 Reference mode 를 선택해요.
  6. Save 를 선택해요.

Reference 모드를 구성한 후 함수 Code 탭의 Code properties 섹션에 Code storage mode: Reference 와 S3 버킷을 가리키는 S3 location 이 표시돼요.

AWS CLI 사용 (Using the AWS CLI)

S3ObjectStorageMode=REFERENCE 매개 변수와 함께 create-function 명령을 사용해요.

aws lambda create-function \
  --function-name my-function \
  --runtime python3.12 \
  --role arn:aws:iam::111122223333:role/lambda-execution-role \
  --handler lambda_function.lambda_handler \
  --code S3Bucket=my-bucket,\
S3Key=my-function.zip,\
S3ObjectVersion=abc123def456,\
S3ObjectStorageMode=REFERENCE

기존 함수를 자체 관리 S3 스토리지를 사용하도록 업데이트하려면:

aws lambda update-function-code \
  --function-name my-function \
  --s3-bucket my-bucket \
  --s3-key my-function.zip \
  --s3-object-version abc123def456 \
  --s3-object-storage-mode REFERENCE

중요

update-function-code 를 호출할 때마다 S3ObjectStorageMode=REFERENCE 를 지정해야 해요. S3ObjectStorageMode 를 생략하면 기본값인 COPY 가 되어 Lambda가 코드를 Lambda 관리 스토리지에 저장해요.

AWS CloudFormation 사용 (Using AWS CloudFormation)

CloudFormation 템플릿에서 AWS::Lambda::Function 리소스의 Code 속성에 S3ObjectStorageMode 를 REFERENCE 로 설정해요.

Resources:
  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-function
      Runtime: python3.12
      Handler: lambda_function.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        S3Bucket: my-bucket
        S3Key: my-function.zip
        S3ObjectVersion: abc123def456
        S3ObjectStorageMode: REFERENCE

레이어와 함께 자체 관리 S3 스토리지 사용 (Using self-managed S3 storage with layers)

레이어 버전에도 자체 관리 S3 코드 스토리지를 사용할 수 있어요. S3ObjectStorageMode=REFERENCE 와 함께 publish-layer-version 명령을 사용해요.

aws lambda publish-layer-version \
  --layer-name my-layer \
  --content S3Bucket=my-bucket,S3Key=my-layer.zip,S3ObjectStorageMode=REFERENCE \
  --compatible-runtimes python3.12

함수 코드와 레이어 코드에 Lambda 관리 스토리지와 자체 관리 스토리지의 어떤 조합이든 사용할 수 있어요.

스토리지 모드 간 전환 (Switching between storage modes)

함수 코드를 업데이트하거나 새 레이어 버전을 게시할 때 Lambda 관리 스토리지와 자체 관리 S3 코드 스토리지 사이를 전환할 수 있어요. S3ObjectStorageMode 를 COPY 또는 REFERENCE 로 설정해요.

  • COPY (기본값) – Lambda가 소스 코드를 Lambda 관리 스토리지에 복사해요.
  • REFERENCE – Lambda가 사본을 저장하지 않고 S3 버킷에서 소스 코드를 직접 참조해요.

COPY 에서 REFERENCE 로 전환하면 Lambda가 소스 코드의 Lambda 관리 사본을 삭제해요. REFERENCE 에서 COPY 로 전환하면 Lambda가 소스 코드의 사본을 Lambda 관리 스토리지에 만들어요. Lambda 관리 코드 스토리지 한도를 초과하면 COPY 로 전환하는 것이 실패해요.

자체 관리 스토리지의 함수 수명주기 (Function lifecycle with self-managed storage)

Lambda는 함수 코드를 재최적화하기 위해 S3 버킷의 소스 객체에 주기적으로 접근해요. 함수가 계속 활성 상태로 유지되려면 소스 객체에 대한 접근을 유지해야 해요.

  • 함수의 소스 객체에 대한 접근을 Lambda가 잃으면 함수는 Inactive 상태로 전환돼요. 함수를 복원하려면 소스 객체에 대한 접근을 복원하고 함수를 업데이트해요.
  • 레이어의 소스 객체에 대한 접근을 Lambda가 잃으면 함수는 Active 상태로 유지돼요. 함수 구성(레이어 업데이트 없이)을 업데이트하거나, 함수 코드를 업데이트하거나, 새 레이어로 함수 구성을 업데이트할 수 있어요. 그러나 접근할 수 없는 레이어로 함수 구성을 업데이트하면 실패해요.

교차 계정 및 교차 리전 사용 (Cross-account and cross-Region usage)

다른 계정과 다른 리전의 S3 버킷에 있는 소스 코드에서 함수와 레이어를 만들 수 있어요. 교차 리전 객체 검색은 추가 S3 데이터 전송 비용이 발생해요. 자세한 내용은 S3 요금을 참고하세요.

고려 사항 (Considerations)

  • 자체 관리 S3 코드 스토리지는 .zip 파일 아카이브 함수와 레이어에서만 사용할 수 있어요. 컨테이너 이미지 함수는 계속 Amazon ECR을 사용해요.
  • 최대 .zip 배포 패키지 크기(압축 해제 기준 250 MB)는 변경되지 않아요.
  • 자체 관리 버킷에 저장된 코드에는 표준 Amazon S3 스토리지 요금을 지불해요. Lambda는 같은 리전 내 S3 객체 검색에 대해 요금을 부과하지 않아요.
  • 자체 관리 S3 코드 스토리지는 Glacier 스토리지 클래스를 제외한 모든 S3 스토리지 클래스와 호환돼요.
  • S3 교차 리전 복제 같은 S3 기능을 사용해 리전 간에 아티팩트를 공유하고, S3 수명주기 정책으로 객체를 관리할 수 있어요.

더 알아보기 (Learn more)