

# Lambda 관리형 인스턴스 시작하기
<a name="lambda-managed-instances-getting-started"></a>

## Lambda 관리형 인스턴스 함수 생성(콘솔)
<a name="lambda-managed-instances-getting-started-console"></a>

Lambda 콘솔을 사용하여 용량 공급자가 관리하는 Amazon EC2 인스턴스에서 실행되는 관리형 인스턴스 함수를 생성할 수 있습니다.

**중요:** 관리형 인스턴스 함수 생성 전에 먼저 용량 공급자를 생성해야 합니다. 이러한 함수에는 함수를 실행할 Amazon EC2 인프라를 정의하는 용량 공급자가 필요합니다.

**Lambda 관리형 인스턴스 함수 생성(콘솔)**

1. Lambda 콘솔을 엽니다.

1. 왼쪽 탐색 창에서 **용량 공급자**를 선택합니다.

1. **용량 공급자 생성**을 선택합니다.

1. **용량 공급자 설정** 섹션에서 용량 공급자의 이름을 입력합니다.

1. 용량 공급자의 VPC 및 권한을 선택합니다. 기존 역할을 사용하거나 새 역할을 생성할 수 있습니다. 필요한 운영자 역할 생성에 대한 자세한 내용은 [Lambda 관리형 인스턴스의 Lambda 운영자 역할](lambda-managed-instances-operator-role.md)을 참조하세요.

1. **Advanced settings(고급 설정)**를 확장합니다.

1. 프로세서 아키텍처와 인스턴스 유형을 선택하여 **인스턴스 요구 사항**을 정의합니다.

1. **오도 스케일링**에서 용량 공급자의 최대 EC2 vCPU 수를 지정합니다. **수동 인스턴스 규모 조정 모드**를 선택하고 자체 조정 값을 입력하면 정밀하게 제어할 수 있습니다.

1. **용량 공급자 생성**을 선택하여 새 용량 공급자를 생성합니다.

1. 다음으로 **함수 생성**을 선택합니다.

1. **새로 작성**을 선택합니다.

1. **기본 정보** 창에 **함수 이름**을 입력합니다.

1. **런타임**에서 지원되는 런타임을 선택합니다.

1. 함수의 **아키텍처**를 선택합니다(용량 공급자에 대해 선택한 아키텍처와 동일). 기본값은 **x86\_64**입니다.

1. **권한**에 선택한 **실행 역할**에 대한 권한이 있어야 합니다. 그렇지 않으면 새 역할을 생성할 수 있습니다.

1. **추가 구성**에서 **컴퓨팅 유형**을 **Lambda 관리형 인스턴스**로 선택합니다.

1. 이전 단계에서 생성한 용량 공급자의 용량 공급자 ARN이 미리 선택되어야 합니다.

1. vCPU당 **메모리 크기** 및 **vCPU당 실행 환경 메모리(GiB) 비율**을 선택합니다.

1. **함수 생성**을 선택합니다.

Lambda 관리형 인스턴스 함수가 생성되고 지정된 용량 공급자에 용량을 프로비저닝합니다. 함수 생성에는 일반적으로 몇 분 정도 걸립니다. 완료되면 함수 코드를 편집하고 첫 번째 테스트를 실행할 수 있습니다.

## Lambda 관리형 인스턴스 함수 생성(AWS CLI)
<a name="lambda-managed-instances-getting-started-cli"></a>

### 사전 조건
<a name="lambda-managed-instances-prerequisites"></a>

시작하기 전에 다음 항목이 준비되었는지 확인합니다.
+ **AWS CLI** - AWS CLI를 설치하고 구성합니다. 자세한 내용은 [최신 버전의 AWS CLI 설치 또는 업데이트](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.
+ **IAM 권한** - IAM 사용자 또는 역할에 Lambda 함수, 용량 공급자를 생성하고 IAM 역할을 전달할 수 있는 권한이 있어야 합니다. 계정에서 용량 공급자를 처음 생성하거나 서비스 연결 역할(SLR)이 삭제된 경우에도 `iam:CreateServiceLinkedRole`이 필요합니다.

### 1단계: 필요한 IAM 역할 생성
<a name="lambda-managed-instances-step1-iam"></a>

Lambda 관리형 인스턴스에는 함수의 실행 역할과 용량 공급자의 운영자 역할이라는 2가지 IAM 역할이 필요합니다. 운영자 역할을 통해 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
   ```

1. 실행 역할을 생성합니다.

   ```
   aws iam create-role \
     --role-name MyLambdaExecutionRole \
     --assume-role-policy-document file://lambda-trust-policy.json
   ```

1. 기본 실행 정책을 연결합니다.

   ```
   aws iam attach-role-policy \
     --role-name MyLambdaExecutionRole \
     --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
   ```

**용량 공급자 운영자 역할 생성**

1. Lambda의 운영자 역할 수임을 허용하는 신뢰 정책 문서를 생성합니다.

   ```
   cat > operator-trust-policy.json << 'EOF'
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lambda.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   EOF
   ```

1. 운영자 역할 생성을 생성합니다.

   ```
   aws iam create-role \
     --role-name MyCapacityProviderOperatorRole \
     --assume-role-policy-document file://operator-trust-policy.json
   ```

1. 필요한 EC2 권한 정책 연결을 연결합니다.

   ```
   aws iam attach-role-policy \
     --role-name MyCapacityProviderOperatorRole \
     --policy-arn arn:aws:iam::aws:policy/AWSLambdaManagedEC2ResourceOperator
   ```

### 2단계: VPC 리소스 설정
<a name="lambda-managed-instances-step2-vpc"></a>

Lambda 관리형 인스턴스는 VPC에서 실행되며 서브넷 및 보안 그룹이 필요합니다.

**VPC 리소스 생성**

1. VPC를 생성합니다.

   ```
   VPC_ID=$(aws ec2 create-vpc \
     --cidr-block 10.0.0.0/16 \
     --query 'Vpc.VpcId' \
     --output text)
   ```

1. 서브넷을 생성합니다.

   ```
   SUBNET_ID=$(aws ec2 create-subnet \
     --vpc-id $VPC_ID \
     --cidr-block 10.0.1.0/24 \
     --query 'Subnet.SubnetId' \
     --output text)
   ```

1. 보안 그룹을 생성합니다.

   ```
   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)
   ```

**참고:** VPC 외부의 리소스에 액세스하고 텔레메트리 데이터를 CloudWatch Logs 및 X-Ray로 전송하려면 Lambda 관리형 인스턴스 함수에 VPC 구성이 필요합니다. 구성 세부 정보는 [Lambda 관리형 인스턴스의 네트워킹](lambda-managed-instances-networking.md)을 참조하세요.

### 3단계: 용량 공급자 생성
<a name="lambda-managed-instances-step3-capacity-provider"></a>

용량 공급자는 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
```

이 명령은 다음 구성을 사용하여 용량 공급자를 생성합니다.
+ **VPC 구성** - EC2 인스턴스의 서브넷 및 보안 그룹 지정
+ **권한** - Lambda가 EC2 인스턴스 관리에 사용하는 IAM 역할 정의
+ **인스턴스 요구 사항** - x86\_64 아키텍처 지정
+ **조정 구성** - 용량 공급자에 대해 최대 30개의 vCPU 설정

### 4단계: 인라인 코드를 사용하여 Lambda 함수 생성
<a name="lambda-managed-instances-step4-function"></a>

**인라인 코드를 사용하여 함수 생성**

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
   ```

1. 인라인 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}
   ```

   다음을 사용하여 함수를 생성합니다.
   + **런타임** – Python 3.13
   + **핸들러** - `lambda_function.py`의 `lambda_handler` 함수
   + **메모리** - 2,048MB
   + **임시 스토리지 크기** - 512MB
   + **용량 공급자** - 생성한 용량 공급자에 연결

### 5단계: 함수 버전 게시
<a name="lambda-managed-instances-step5-publish"></a>

Lambda 관리형 인스턴스에서 함수를 실행하려면 버전을 게시해야 합니다.

**함수 버전 게시**

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

이 명령은 함수 버전 1을 게시하고 용량 공급자에 배포합니다.

### 6단계: 함수 간접 호출
<a name="lambda-managed-instances-step6-invoke"></a>

게시 후 함수를 간접 호출할 수 있습니다.

**함수를 간접 호출하려면**

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

# View the response
cat response.json
```

함수는 용량 공급자가 관리하는 EC2 인스턴스에서 실행되고 응답을 반환합니다.

### 정리
<a name="lambda-managed-instances-cleanup"></a>

요금이 발생하지 않도록 생성한 리소스를 삭제합니다.

1. 함수를 삭제합니다.

   ```
   aws lambda delete-function --function-name my-managed-instance-function
   ```

1. 용량 공급자를 삭제합니다.

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

1. 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
   ```

1. 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
   ```