용량 제공자(Capacity providers)

용량 제공자(Capacity providers)

용량 제공자는 Lambda Managed Instances 실행의 기반이에요. 이는 함수의 보안 경계 역할을 하며, Lambda가 여러분을 대신해 프로비저닝하고 관리하는 컴퓨팅 리소스를 정의합니다.

출처: AWS Lambda 개발자 안내서

본문

용량 제공자를 만들 때 다음을 지정합니다:

  • VPC 구성 — 인스턴스가 실행되는 서브넷과 보안 그룹
  • 권한 — Lambda가 EC2 리소스를 관리할 수 있게 하는 IAM 역할
  • 인스턴스 요구 사항 (선택 사항) — 아키텍처와 인스턴스 유형 선호
  • 스케일링 구성 (선택 사항) — Lambda가 인스턴스를 확장하는 방식

용량 제공자를 보안 경계로 이해하기

용량 제공자는 VPC 내 Lambda 함수의 보안 경계 역할을 하며, Firecracker 기반 격리를 대체합니다. 함수는 인스턴스 내 컨테이너에서 실행되지만, 컨테이너는 Firecracker MicroVM과 달리 함수 사이에 강력한 보안 격리를 제공하지 않아요.

핵심 보안 개념:

  • 용량 제공자(Capacity Provider): Lambda 함수의 신뢰 수준을 정의하는 보안 경계
  • 컨테이너 격리(Container Isolation): 컨테이너는 보안 제공자가 아닙니다 — 신뢰할 수 없는 워크로드 사이의 보안에 의존하지 마세요.
  • 신뢰 분리(Trust Separation): 서로 신뢰하지 않는 워크로드는 서로 다른 용량 제공자를 사용해 분리하세요.

용량 제공자 만들기

용량 제공자는 AWS CLI, AWS Management Console, 또는 AWS SDK로 만들 수 있어요.

AWS CLI 사용:

aws lambda create-capacity-provider \
  --capacity-provider-name my-capacity-provider \
  --vpc-config SubnetIds=subnet-12345,subnet-67890,subnet-11111,SecurityGroupIds=sg-12345 \
  --permissions-config CapacityProviderOperatorRoleArn=arn:aws:iam::123456789012:role/MyOperatorRole \
  --instance-requirements Architectures=x86_64 \
  --capacity-provider-scaling-config ScalingMode=Auto

필수 파라미터

CapacityProviderName

  • 용량 제공자의 고유한 이름
  • AWS 계정 내에서 고유해야 합니다

VpcConfig

  • SubnetIds (필수): 최소 1개, 최대 16개의 서브넷. 복원성을 위해 여러 가용 영역(AZ)에 걸쳐 서브넷을 사용하세요.
  • SecurityGroupIds (선택 사항): 인스턴스용 보안 그룹. 지정하지 않으면 VPC 기본 보안 그룹으로 기본 설정됩니다.

PermissionsConfig

  • CapacityProviderOperatorRoleArn (필수): Lambda가 용량 제공자의 EC2 리소스를 관리할 수 있게 하는 IAM 역할

선택적 파라미터

InstanceRequirements

용량 제공자의 아키텍처와 인스턴스 유형을 지정합니다:

  • Architectures: x86_64 또는 arm64 선택. 기본값은 x86_64.
  • AllowedInstanceTypes: 허용 인스턴스 유형 지정. 예: m5.8xlarge
  • ExcludedInstanceTypes: 와일드카드를 사용해 제외 인스턴스 유형 지정. AllowedInstanceTypes와 ExcludedInstanceTypes 중 하나만 지정할 수 있어요.

기본적으로 Lambda는 워크로드에 최적의 인스턴스 유형을 선택합니다. 가능한 인스턴스 유형 수를 제한하면 가용성이 낮아질 수 있으므로, Lambda Managed Instances가 인스턴스 유형을 선택하도록 두는 것을 권장합니다.

CapacityProviderScalingConfig

Lambda가 인스턴스를 확장하는 방식을 구성합니다:

  • ScalingMode: 자동 스케일링에는 Auto, 수동 제어에는 Manual로 설정. 기본값은 Auto.
  • MaxVCpuCount: 용량 제공자의 vCPU 최대 수. 기본값은 400.
  • ScalingPolicies: CPU 및 메모리 사용률에 대한 대상 추적 스케일링 정책 정의

KmsKeyArn

EBS 암호화용 AWS KMS 키를 지정합니다. 지정하지 않으면 AWS 관리형 키로 기본 설정됩니다.

Tags

용량 제공자를 조직하고 관리하기 위한 태그를 추가합니다.

PropagateTags

용량 제공자가 실행하는 관리 리소스(Amazon EC2 인스턴스, Amazon EBS 볼륨, ENI)에 태그를 자동 적용하도록 태그 전파를 구성합니다. 태그 전파는 비용 할당, SCP, 규정 준수 요구 사항을 적용하는 데 사용합니다. 자세한 내용은 태그 전파를 참고하세요.

용량 제공자 관리

용량 제공자 업데이트하기

UpdateCapacityProvider API를 사용해 용량 제공자의 특정 속성을 업데이트할 수 있어요.

aws lambda update-capacity-provider \
  --capacity-provider-name my-capacity-provider \
  --capacity-provider-scaling-config ScalingMode=Auto

용량 제공자 삭제하기

더 이상 필요하지 않으면 DeleteCapacityProvider API로 용량 제공자를 삭제할 수 있어요.

aws lambda delete-capacity-provider \
  --capacity-provider-name my-capacity-provider

참고: 함수 버전이 연결된 용량 제공자는 삭제할 수 없습니다.

용량 제공자 세부 정보 보기

GetCapacityProvider API로 용량 제공자에 대한 정보를 검색합니다.

aws lambda get-capacity-provider \
  --capacity-provider-name my-capacity-provider

용량 제공자 상태

용량 제공자는 다음 상태 중 하나일 수 있습니다:

  • Pending: 용량 제공자가 생성되는 중
  • Active: 용량 제공자를 사용할 준비가 됨
  • Failed: 용량 제공자 생성 실패
  • Deleting: 용량 제공자가 삭제되는 중

쿼터(Quotas)

  • 계정당 최대 용량 제공자 수: 1,000
  • 용량 제공자당 최대 함수 버전 수: 100 (증가 불가)

모범 사례

  • 신뢰 수준별로 분리하기: 보안 요구 사항이 다른 워크로드에 서로 다른 용량 제공자를 만들기
  • 설명적인 이름 사용하기: 의도된 용도와 신뢰 수준을 명확히 나타내도록 이름 지정 (예: production-trusted, dev-sandbox)
  • 여러 가용 영역 사용하기: 고가용성을 위해 여러 AZ의 서브넷을 지정하기
  • Lambda가 인스턴스 유형을 선택하게 하기: 특정 하드웨어 요구 사항이 없다면 가용성을 위해 Lambda가 최적의 인스턴스 유형을 선택하도록 허용하기
  • 사용량 모니터링: AWS CloudTrail로 용량 제공자 할당과 접근 패턴 모니터링하기

다음 단계

더 알아보기 (Learn more)