

# 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 とアクセス許可を選択します。既存の VPC を使用するか、新しい VPC を作成できます。必要なオペレーターロールの作成については、「[Lambda マネージドインスタンス用の Lambda オペレーターロール](lambda-managed-instances-operator-role.md)」を参照してください。

1. **[詳細設定]** を展開します。

1. プロセッサアーキテクチャとインスタンスタイプを選択して、**[インスタンスの要件]** を定義します。

1. **[自動スケーリング]** で、キャパシティープロバイダーの EC2 vCPU の最大数を指定します。**[手動インスタンススケーリングモード]** を選択して、独自のスケーリング値を設定し、正確にコントロールすることもできます。

1. **[キャパシティープロバイダーを作成]** を選択して、新しいプロバイダーを作成します。

1. 次に、[**Create function**] を選択します。

1. **[一から作成]** を選択します。

1. **[基本的な情報]** ペインで、**[関数名]** を入力します。

1. **[ランタイム]** で、サポートされている任意のランタイムを選択します。

1. 関数の **[アーキテクチャ]** (キャパシティープロバイダーに選択したアーキテクチャと同じもの) を選択します。デフォルトは **x86\_64** です。

1. **[アクセス許可]** で、選択した **[実行ロール]** に対するアクセス許可があることを確認します。それ以外の場合は、ロールを作成します。

1. **[追加設定]** で、**[コンピューティングタイプ]** を **[Lambda マネージドインスタンス]** として選択します。

1. 前のステップで作成したキャパシティープロバイダーのキャパシティープロバイダー ARN を事前に選択する必要があります。

1. **[メモリサイズ]** と **[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 アクセス許可** – Lambda 関数とキャパシティープロバイダーを作成し、IAM ロールを渡すには、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)
   ```

**注:** Lambda マネージドインスタンス関数では、VPC 外のリソースにアクセスしたり、テレメトリデータを CloudWatch Logs や X-Ray に送信したりするには 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 インスタンスのサブネットとセキュリティグループを指定します
+ **アクセス許可** – EC2 インスタンスの管理で Lambda が使用する 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` 関数
   + **メモリ** – 2048 MB
   + **エフェメラルストレージ** – 512 MB
   + **キャパシティープロバイダー** – 作成したキャパシティープロバイダーへのリンク

### ステップ 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
   ```