Lambda Managed Instances 시작하기

Lambda Managed Instances 시작하기 (Getting started with Lambda Managed Instances)

Lambda Managed Instance 함수 만들기(콘솔)

Lambda 콘솔로 capacity provider(용량 공급자)가 관리하는 Amazon EC2 인스턴스에서 실행되는 Managed Instance 함수를 만들 수 있어요.

중요: Managed Instance 함수를 만들기 전에 먼저 capacity provider를 만들어야 해요. 이 함수들은 함수를 실행하는 Amazon EC2 인프라를 정의하는 capacity provider가 필요해요.

출처: AWS Lambda 개발자 안내서

본문

Lambda Managed Instance 함수 만들기(콘솔)

  1. Lambda 콘솔을 엽니다.
  2. 왼쪽 탐색 창에서 Capacity providers를 선택합니다.
  3. Create capacity provider를 선택합니다.
  4. Capacity provider settings 섹션에서 capacity provider의 이름을 입력합니다.
  5. capacity provider의 VPC와 권한을 선택합니다. 기존 것을 사용하거나 새로 만들 수 있습니다.
  6. Advanced settings를 펼칩니다.
  7. Instance requirements를 프로세서 아키텍처와 인스턴스 유형을 선택해 정의합니다.
  8. Auto scaling 아래에서 capacity provider의 최대 EC2 vCPU 수를 지정합니다. 정밀한 제어를 위해 Manual instance scaling mode를 선택해 자체 확장 값을 설정할 수도 있습니다.
  9. Create capacity provider를 선택해 새로 만듭니다.
  10. 다음으로 Create function을 선택합니다.
  11. Author from scratch를 선택합니다.
  12. Basic information 창에서 Function name을 입력합니다.
  13. Runtime에서 지원되는 런타임 중 하나를 선택합니다.
  14. 함수의 Architecture를 선택합니다(기본값 x86_64, capacity provider에서 선택한 것과 동일하게).
  15. Permissions 아래에서 선택한 Execution role에 대한 권한이 있는지 확인합니다. 없으면 새 역할을 만들 수 있습니다.
  16. Additional configurations 아래에서 Compute type을 Lambda Managed Instances로 선택합니다.
  17. 이전 단계에서 만든 capacity provider의 Capacity provider ARN이 미리 선택되어 있어야 합니다.
  18. Memory size와 vCPU당 Execution environment memory(gib) 비율을 선택합니다.
  19. Create function을 선택합니다.

Lambda Managed Instance 함수가 생성되고 지정한 capacity provider에 용량을 프로비저닝해요. 함수 생성은 보통 몇 분이 걸려요. 완료되면 함수 코드를 편집하고 첫 테스트를 실행할 수 있어요.

Lambda Managed Instance 함수 만들기(AWS CLI)

사전 요구 사항

  • AWS CLI – AWS CLI를 설치하고 구성합니다.
  • IAM 권한 – IAM 사용자 또는 역할이 Lambda 함수, capacity provider를 만들고 IAM 역할을 전달할 권한이 있어야 합니다. 계정에서 처음 capacity provider를 만들거나 Service Linked Role(SLR)이 삭제된 경우 iam:CreateServiceLinkedRole도 필요합니다.

1단계: 필요한 IAM 역할 만들기

Lambda Managed Instances는 두 개의 IAM 역할이 필요해요. 함수용 실행 역할(execution role)과 capacity provider용 운영자 역할(operator role)이에요. 운영자 역할은 Lambda가 사용자 대신 Amazon EC2 인스턴스를 시작·종료·모니터링하도록 허용하고, 함수 실행 역할은 함수가 다른 AWS 서비스와 리소스에 접근할 수 있게 해요.

Lambda 실행 역할 만들기

  1. Lambda가 역할을 수임하도록 허용하는 신뢰 정책 문서를 만듭니다.
    cat > lambda-trust-policy.json << 'EOF'
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "lambda.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    EOF
    
  2. 실행 역할을 만듭니다.
    aws iam create-role \
      --role-name MyLambdaExecutionRole \
      --assume-role-policy-document file://lambda-trust-policy.json
    
  3. 기본 실행 정책을 연결합니다.
    aws iam attach-role-policy \
      --role-name MyLambdaExecutionRole \
      --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
    

capacity provider 운영자 역할 만들기

  1. Lambda가 운영자 역할을 수임하도록 허용하는 신뢰 정책 문서를 만듭니다.
    cat > operator-trust-policy.json << 'EOF'
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "lambda.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    EOF
    
  2. 운영자 역할을 만듭니다.
    aws iam create-role \
      --role-name MyCapacityProviderOperatorRole \
      --assume-role-policy-document file://operator-trust-policy.json
    
  3. 필요한 EC2 권한 정책을 연결합니다.
    aws iam attach-role-policy \
      --role-name MyCapacityProviderOperatorRole \
      --policy-arn arn:aws:iam::aws:policy/AWSLambdaManagedEC2ResourceOperator
    

2단계: VPC 리소스 설정

Lambda Managed Instances는 VPC에서 실행되며 서브넷과 보안 그룹이 필요해요.

VPC 리소스 만들기

  1. VPC를 만듭니다.
    VPC_ID=$(aws ec2 create-vpc \
      --cidr-block 10.0.0.0/16 \
      --query 'Vpc.VpcId' \
      --output text)
    
  2. 서브넷을 만듭니다.
    SUBNET_ID=$(aws ec2 create-subnet \
      --vpc-id $VPC_ID \
      --cidr-block 10.0.1.0/24 \
      --query 'Subnet.SubnetId' \
      --output text)
    
  3. 보안 그룹을 만듭니다.
    SECURITY_GROUP_ID=$(aws ec2 create-security-group \
      --group-name my-capacity-provider-sg \
      --description "Security group for Lambda Managed Instances" \
      --vpc-id $VPC_ID \
      --query 'GroupId' \
      --output text)
    

참고: Lambda Managed Instances 함수는 VPC 밖의 리소스에 접근하고 CloudWatch Logs와 X-Ray에 원격 측정 데이터를 전송하려면 VPC 구성이 필요해요.

3단계: capacity provider 만들기

capacity provider는 Lambda 함수를 실행하는 EC2 인스턴스를 관리해요.

ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

aws lambda create-capacity-provider \
  --capacity-provider-name my-capacity-provider \
  --vpc-config SubnetIds=[$SUBNET_ID],SecurityGroupIds=[$SECURITY_GROUP_ID] \
  --permissions-config CapacityProviderOperatorRoleArn=arn:aws:iam::${ACCOUNT_ID}:role/MyCapacityProviderOperatorRole \
  --instance-requirements Architectures=[x86_64] \
  --capacity-provider-scaling-config MaxVCpuCount=30

이 명령은 다음 구성으로 capacity provider를 만들어요.

  • VPC 구성 – EC2 인스턴스의 서브넷과 보안 그룹을 지정
  • 권한 – Lambda가 EC2 인스턴스를 관리하는 데 사용하는 IAM 역할을 정의
  • 인스턴스 요구 사항 – x86_64 아키텍처를 지정
  • 확장 구성 – capacity provider의 최대 30 vCPU 설정

4단계: 인라인 코드로 Lambda 함수 만들기

  1. 간단한 Python 함수를 만들고 인라인으로 패키징합니다.
    # Create a temporary directory for the function code
    mkdir -p /tmp/my-lambda-function
    cd /tmp/my-lambda-function
    
    # Create a simple Python handler
    cat > lambda_function.py << 'EOF'
    import json
    
    def lambda_handler(event, context):
        return {
            'statusCode': 200,
            'body': json.dumps({
                'message': 'Hello from Lambda Managed Instances!',
                'event': event
            })
        }
    EOF
    
    # Create a ZIP file
    zip function.zip lambda_function.py
    
  2. 인라인 ZIP 파일로 Lambda 함수를 만듭니다.
    ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
    REGION=$(aws configure get region)
    
    aws lambda create-function \
      --function-name my-managed-instance-function \
      --package-type Zip \
      --runtime python3.13 \
      --handler lambda_function.lambda_handler \
      --zip-file fileb:///tmp/my-lambda-function/function.zip \
      --role arn:aws:iam::${ACCOUNT_ID}:role/MyLambdaExecutionRole \
      --architectures x86_64 \
      --memory-size 2048 \
      --ephemeral-storage Size=512 \
      --capacity-provider-config LambdaManagedInstancesCapacityProviderConfig={CapacityProviderArn=arn:aws:lambda:${REGION}:${ACCOUNT_ID}:capacity-provider:my-capacity-provider}
    

함수는 다음으로 생성돼요.

  • Runtime – Python 3.13
  • Handler – lambda_function.py의 lambda_handler 함수
  • Memory – 2048 MB
  • Ephemeral storage – 512 MB
  • Capacity provider – 만든 capacity provider에 연결

5단계: 함수 버전 게시

Lambda Managed Instances에서 함수를 실행하려면 버전을 게시해야 해요.

aws lambda publish-version \
  --function-name my-managed-instance-function

이 명령은 함수의 버전 1을 게시하고 capacity provider에 배포해요.

6단계: 함수 호출

게시 후 함수를 호출할 수 있어요.

aws lambda invoke \
  --function-name my-managed-instance-function:1 \
  --payload '{"name": "World"}' \
  response.json

# View the response
cat response.json

함수는 capacity provider가 관리하는 EC2 인스턴스에서 실행되고 응답을 반환해요.

정리

비용이 발생하지 않도록 만든 리소스를 삭제하세요.

  1. 함수 삭제:
    aws lambda delete-function --function-name my-managed-instance-function
    
  2. capacity provider 삭제:
    aws lambda delete-capacity-provider --capacity-provider-name my-capacity-provider
    
  3. VPC 리소스 삭제:
    aws ec2 delete-security-group --group-id $SECURITY_GROUP_ID
    aws ec2 delete-subnet --subnet-id $SUBNET_ID
    aws ec2 delete-vpc --vpc-id $VPC_ID
    
  4. IAM 역할 삭제:
    aws iam detach-role-policy \
      --role-name MyLambdaExecutionRole \
      --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
    aws iam detach-role-policy \
      --role-name MyCapacityProviderOperatorRole \
      --policy-arn arn:aws:iam::aws:policy/AWSLambdaManagedEC2ResourceOperator
    
    aws iam delete-role --role-name MyLambdaExecutionRole
    aws iam delete-role --role-name MyCapacityProviderOperatorRole
    

더 알아보기 (Learn more)