Lambda 受管執行個體入門 - AWS Lambda

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

Lambda 受管執行個體入門

建立 Lambda 受管執行個體函數 (主控台)

您可以使用 Lambda 主控台來建立在容量提供者管理的 Amazon EC2 執行個體上執行的受管執行個體函數。

重要:在建立受管執行個體函數之前,您必須先建立容量提供者。這些函數需要容量提供者來定義將執行函數的 Amazon EC2 基礎設施。

建立 Lambda 受管執行個體函數 (主控台)

  1. 開啟 Lambda 主控台。

  2. 從左側導覽窗格中選擇容量提供者

  3. 選擇建立容量提供者

  4. 容量提供者設定區段中,輸入容量提供者的名稱。

  5. 選取容量提供者的 VPC 和許可。您可以使用現有的 或建立新的 。如需建立必要運算子角色的資訊,請參閱 Lambda 受管執行個體的 Lambda 運算子角色

  6. 展開 Advanced settings (進階設定)。

  7. 選擇處理器架構和執行個體類型來定義您的執行個體需求

  8. 自動擴展下,指定容量提供者的 EC2 vCPUs數量上限。您也可以選擇手動執行個體擴展模式來設定自己的擴展值,以進行精確控制。

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

  10. 接下來,選擇建立函數

  11. 選取從頭開始撰寫

  12. 基本資訊窗格中,提供函數名稱

  13. 針對執行期,選擇任何支援的執行期。

  14. 選擇函數的架構 (與您為容量提供者選取的架構相同)。根據預設,x86_64

  15. 許可下,確保您具有所選執行角色的許可。否則,您可以建立新的角色。

  16. 在其他組態下,選擇運算類型做為 Lambda 受管執行個體

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

  18. 選擇每個 vCPU 比率的記憶體大小和執行環境記憶體 (GiB)。 GiB

  19. 選擇 Create function (建立函數)

您的 Lambda 受管執行個體函數已建立,並將在您指定的容量提供者上佈建容量。函數建立通常需要幾分鐘的時間。完成後,您可以編輯函數程式碼並執行第一個測試。

建立 Lambda 受管執行個體函數 (AWS CLI)

先決條件

開始前,請確定您具有下列項目:

  • AWS CLI – 安裝和設定 AWS CLI。如需詳細資訊,請參閱安裝或更新最新版本的 AWS CLI

  • IAM 許可 – 您的 IAM 使用者或角色必須具有建立 Lambda 函數、容量提供者和傳遞 IAM 角色的許可。請注意,iam:CreateServiceLinkedRole如果您是第一次在帳戶中建立容量提供者,或是已刪除服務連結角色 (SLR),您也需要 。

步驟 1:建立所需的 IAM 角色

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

建立容量提供者運算子角色

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

步驟 3:建立容量提供者

容量提供者會管理執行 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 函數

使用內嵌程式碼建立函數

  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}

    函數的建立方式如下:

    • 執行時間 – Python 3.13

    • 處理常式 – 中的 lambda_handler函數 lambda_function.py

    • 記憶體 – 2048 MB

    • 暫時性儲存 – 512 MB

    • 容量提供者 – 連結至您建立的容量提供者

步驟 5:發佈函數版本

若要在 Lambda 受管執行個體上執行函數,您必須發佈版本。

發佈函數版本

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

此命令會發佈函數的第 1 版,並將其部署到容量提供者。

步驟 6:叫用您的 函數

發佈之後,您可以叫用 函數。

叫用您的 函數

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

函數會在容量提供者管理的 EC2 執行個體上執行,並傳回回應。

清除

若要避免產生費用,請刪除您建立的資源:

  1. 刪除 函數:

    aws lambda delete-function --function-name my-managed-instance-function
  2. 刪除容量提供者:

    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