View a markdown version of this page

자체 관리형 S3 코드 스토리지 - AWS Lambda

자체 관리형 S3 코드 스토리지

기본적으로 .zip 파일 아카이브에서 Lambda 함수 또는 계층을 생성하거나 업데이트하면 Lambda는 코드 사본을 Lambda 관리형 스토리지에 저장합니다. 각 AWS 계정에는 리전별로 Lambda 관리형 스토리지에 대해 300GB의 할당량이 있습니다.

자체 관리형 S3 코드 스토리지를 사용하면 계정의 S3 버킷에서 직접 코드를 참조하도록 Lambda를 구성할 수 있습니다. Lambda는 코드 사본을 저장하지 않으므로 코드는 Lambda 관리형 스토리지 할당량에 포함되지 않습니다. Lambda는 S3 버킷에서 직접 코드에 액세스합니다.

.zip 파일 아카이브를 사용하여 생성되고 업데이트되는 모든 함수와 계층에 자체 관리형 S3 코드 스토리지를 사용할 수 있습니다. 자체 관리형 S3 코드 스토리지는 Glacier 스토리지 클래스를 제외한 모든 S3 스토리지 클래스와 호환됩니다.

참고

자체 관리형 S3 코드 스토리지는 250MB(압축 해제됨)로 유지되는 최대 .zip 배포 패키지 크기를 변경하지 않습니다.

자체 관리형 S3 코드 스토리지 설정

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

  1. 계정에서 S3 버킷을 생성하거나 기존 버킷을 사용합니다.

  2. 버킷에 대해 S3 버전 관리를 활성화합니다. Lambda는 사용할 소스 객체의 버전을 추적하기 위해 S3 버전 관리가 필요합니다. 새로운 .zip 패키지를 업로드할 때마다 S3는 Lambda가 업데이트를 구별할 수 있도록 새 버전을 생성합니다.

  3. S3 버킷에 .zip 배포 패키지를 업로드합니다.

  4. Lambda 서비스 위탁자에게 소스 객체에 대한 s3:GetObjects3:GetObjectVersion 권한을 부여합니다. 권한 구성을 참조하세요.

  5. S3 객체, S3 키, S3 객체 버전을 지정하고 S3ObjectStorageModeREFERENCE로 설정하여 함수 또는 계층을 생성하거나 업데이트합니다.

권한 구성

자체 관리형 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 스토리지를 사용하는 함수 생성

AWS CLI 또는 AWS CloudFormation으로 자체 관리형 S3 코드 스토리지를 사용하는 함수를 생성할 수 있습니다.

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 사용하기

CloudFormation 템플릿에서 AWS::Lambda::Function 리소스의 Code 속성에서 S3ObjectStorageModeREFERENCE로 설정합니다.

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 스토리지 사용

계층 버전에 자체 관리형 S3 코드 스토리지를 사용할 수도 있습니다. publish-layer-version 명령을 S3ObjectStorageMode=REFERENCE와 함께 사용합니다.

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

함수 코드와 계층 코드에 Lambda 관리형 스토리지와 자체 관리형 스토리지를 조합하여 사용할 수 있습니다.

스토리지 모드 간 전환

함수 코드를 업데이트하거나 새 계층 버전을 게시할 때 Lambda 관리형 스토리지와 자체 관리형 S3 코드 스토리지 간 전환이 가능합니다. S3ObjectStorageModeCOPY 또는 REFERENCE로 설정합니다.

  • COPY(기본값) - Lambda가 Lambda 관리형 스토리지에 소스 코드를 복사합니다.

  • REFERENCE - Lambda가 사본을 저장하지 않고 S3 버킷에서 직접 소스 코드를 참조합니다.

COPY에서 REFERENCE로 전환하면 Lambda는 소스 코드의 Lambda 관리형 사본을 삭제합니다. REFERENCE에서 COPY로 전환하면 Lambda는 Lambda 관리형 스토리지에 소스 코드의 사본을 만듭니다. Lambda 관리형 코드 스토리지 제한을 초과하면 COPY로 전환이 실패합니다.

자체 관리형 스토리지를 사용하는 함수 수명 주기

Lambda는 함수 코드를 다시 최적화하기 위해 S3 버킷의 소스 객체에 주기적으로 액세스합니다. 함수가 활성 상태를 유지하려면 소스 객체에 대한 액세스 권한을 유지해야 합니다.

  • Lambda가 함수의 소스 객체에 대한 액세스 권한을 잃으면 함수는 Inactive 상태로 전환됩니다 함수를 복원하려면 소스 객체에 대한 액세스 권한을 복원하고 함수를 업데이트합니다.

  • Lambda가 계층의 소스 객체에 대한 액세스 권한을 잃더라도 함수는 Active 상태를 유지합니다. 계층을 업데이트하지 않고 함수 구성을 업데이트하거나, 함수 코드를 업데이트하거나, 새 계층으로 함수 구성을 업데이트할 수 있습니다. 그러나 액세스할 수 없는 계층으로 함수 구성을 업데이트하면 실패합니다.

교차 계정 및 교차 리전 사용량

서로 다른 계정과 리전의 S3 버킷에 있는 소스 코드에서 함수와 계층을 생성할 수 있습니다. 교차 리전 객체 검색 시 S3 데이터 전송 비용이 추가로 발생합니다. 자세한 내용은 S3 요금을 참조하세요.

고려 사항

  • .zip 파일 아카이브 함수와 계층에만 자체 관리형 S3 코드 스토리지를 사용할 수 있습니다. 컨테이너 이미지 함수는 Amazon ECR을 계속 사용합니다.

  • .zip 배포 패키지의 최대 크기(압축 해제 시 250 MB)는 변경되지 않았습니다.

  • 자체 관리형 버킷에 저장된 코드에 대해 표준 Amazon S3 스토리지 요금을 지불합니다. Lambda는 동일한 리전 내의 S3 객체 검색에 대해서는 요금을 부과하지 않습니다.

  • 자체 관리형 S3 코드 스토리지는 Glacier 스토리지 클래스를 제외한 모든 S3 스토리지 클래스와 호환됩니다.

  • S3 교차 리전 복제와 같은 S3 기능을 사용하여 리전 간에 아티팩트를 공유하고 S3 수명 주기 정책을 사용하여 객체를 관리할 수 있습니다.