Lambda 托管实例入门 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Lambda 托管实例入门

创建 Lambda 托管实例函数(控制台)

您可以使用 Lambda 控制台创建一个将在由容量提供程序管理的 Amazon EC2 实例上运行的托管实例函数。

重要提示:在创建托管实例函数之前,您必须先创建容量提供程序。这些函数需要容量提供程序来定义运行您的函数的 Amazon EC2 基础设施。

要创建 Lambda 托管实例函数(控制台)

  1. 打开 Lambda 控制台。

  2. 从左侧导航窗格中选择容量提供程序

  3. 选择创建容量提供程序

  4. 容量提供程序设置部分,为容量提供程序输入一个名称。

  5. 为您的容量提供程序选择 VPC 和权限。您可以使用现有角色,也可以创建新的角色。有关创建所需操作员角色的信息,请参阅 Lambda 托管实例的 Lambda 操作员角色

  6. 展开 Advanced settings(高级设置)。

  7. 通过选择处理器架构和实例类型来定义您的实例要求

  8. 自动扩缩下,为您的容量提供程序指定 EC2 vCPU 的最大数量。您也可以选择手动实例扩展模式来设置自己的扩展值以实现精确控制。

  9. 选择创建容量提供程序以创建新的容量提供程序。

  10. 接下来,选择创建函数

  11. 选择从头开始编写

  12. 基本信息窗格中,提供函数名称

  13. 运行时中,选择任何支持的 Lambda 运行时。

  14. 为您的函数选择架构(与您为容量提供程序选择的架构相同)。默认情况下,为 x86_64

  15. 权限下,确保您拥有所选执行角色的权限。否则,您可以创建新角色。

  16. 其他配置下,选择计算类型作为 Lambda 托管实例

  17. 应预先选择您在之前步骤中创建的容量提供程序的容量提供程序 ARN。

  18. 选择内存大小每个 vCPU 的执行环境内存(GiB)比率

  19. 选择创建函数

您的 Lambda 托管实例函数已创建,并且将为您指定的容量提供程序预置容量。创建函数通常需要几分钟时间。完成后,您可以编辑函数代码并运行第一个测试。

创建 Lambda 托管实例函数(Amazon CLI)

先决条件

在开始之前,请确保您具有以下各项:

  • Amazon CLI:安装和配置 Amazon CLI。有关更多信息,请参阅安装或更新最新版本的 Amazon CLI

  • IAM 权限:您的 IAM 用户或角色必须具有创建 Lambda 函数、容量提供程序和传递 IAM 角色的权限。请注意,如果这是首次在账户中创建容量提供程序,或者如果服务相关角色(SLR)已删除,您也将需要 iam:CreateServiceLinkedRole

步骤 1:创建所需的 IAM 角色

Lambda 托管实例需要两个 IAM 角色:您的函数的执行角色和容量提供程序的操作员角色。操作员角色使 Lambda 能够代表您启动、终止和监控 Amazon EC2 实例。函数的执行角色授予函数访问其他 Amazon 服务和资源的权限。

创建 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 个 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}

    该函数通过以下方法创建:

    • 运行时:Python 3.13

    • 处理程序lambda_function.py 中的 lambda_handler 函数

    • 内存:2048MB

    • 临时存储:512MB

    • 容量提供程序:指向您创建的容量提供程序的链接

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