

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 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 vCPUs數量上限。您也可以選擇**手動執行個體擴展模式**來設定自己的擴展值，以進行精確控制。

1. 選擇**建立容量提供者**以建立新的容量提供者。

1. 接著，選擇**建立函數**。

1. 選取**從頭開始撰寫**。

1. 在**基本資訊**窗格中，提供**函數名稱**。

1. 針對**執行期**，選擇任何支援的執行期。

1. 選擇函數的**架構** （與您為容量提供者選取的架構相同）。根據預設，**x86\_64**。

1. 在**許可**下，確保您具有所選**執行角色**的許可。否則，您可以建立新的角色。

1. **在其他組態**下，選擇**運算類型**做為 **Lambda 受管執行個體**。

1. 應該預先選取您在先前步驟中建立之容量提供者的容量提供者 ARN。

1. 選擇每個 vCPU 比率的**記憶體大小**和執行環境記憶體 (GiB)。 **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 角色的許可。請注意，`iam:CreateServiceLinkedRole`如果您是第一次在帳戶中建立容量提供者，或是已刪除服務連結角色 (SLR)，您也需要 。

### 步驟 1：建立所需的 IAM 角色
<a name="lambda-managed-instances-step1-iam"></a>

Lambda 受管執行個體需要兩個 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 組態才能存取 VPC 外部的資源，以及將遙測資料傳輸到 CloudWatch Logs 和 X-Ray。如需組態詳細資訊，請參閱 [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 vCPUs 

### 步驟 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_handler`函數 `lambda_function.py`
   + **記憶體** – 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
   ```